290 likes | 396 Views
Mass Invoicing Module Extension Module Webinar. 15 th of October 2009. Agenda. Functionality and Demo 10 min. Process and Tools 10 min. Development Technique 10 min. Q & A 30 min. Agenda. Functionality and Demo Process and Tools Development Technique
E N D
Mass Invoicing ModuleExtension Module Webinar 15th of October 2009
Agenda Functionality and Demo 10 min. Process and Tools 10 min. Development Technique 10 min. Q & A 30 min.
Agenda Functionality and Demo Process and Tools Development Technique Q & A
Massinvoicing: Functional Highlights Goal: improve efficiency when creating sales invoices for multiple business partners Functional Concepts: Invoice Template Mass Invoicing Wizard Solution Approach: Deliver as a Module Use Forge capabilities Use current OB technology stack
Agenda Functionality and Demo Process and Tools Development Technique Q & A
Deliver as a Module: benefits of Modularity Configure a focused/lean system Independent and shorter release cycles Fine-grained dependency management Improve functionality/code re-use Facilitates contributions Publish and promote new functionality
Process and Tools: Openbravo Forge Start Requirements Gathering/Wire Frame Forge: Project Creation Functional Design Functional Design Document & Review Forge: Project Wiki Development & Delivery Coding & Delivery Forge: Code & Module & Mercurial Testing Test Plan Forge: Wiki & Module Maintenance Coding & Re-deliver Forge: Forum & Module
Agenda Functionality and Demo Process and Tools Development Technique Q & A
Development Approach Application Dictionary Mass Invoicing XML Engine DAL Business Object Setter
Development Approach Application Dictionary - Model Definition - Form & Object Mapping Mass Invoicing XML Engine DAL Business Object Setter
Development Approach Application Dictionary - Model Definition - Form & Object Mapping Mass Invoicing XML Engine DAL - Entity Generation - Transaction Handling - Ease-of-coding - Stored Proc. Calling Business Object Setter
Development Approach Application Dictionary - Model Definition - Form & Object Mapping - HTML-Logic Separation - Automatic Translation/labels - Handle both single as structures Mass Invoicing XML Engine DAL - Entity Generation - Transaction Handling - Ease-of-coding - Stored Proc. Calling Business Object Setter
Development Approach Application Dictionary - Model Definition - Form & Object Mapping - HTML-Logic Separation - Automatic Translation/labels - Handle both single as structures Mass Invoicing XML Engine DAL - Entity Generation - Transaction Handling - Ease-of-coding - Stored Proc. Calling - One central setter per Entity - Sets all default values of a BO - Handles already set values Business Object Setter
Development Approach: Runtime Class/Objects Browser Entities: BusinessPartner Invoice & InvoiceLine InvoiceTemplate InvoiceTemplateLine Organization PriceList MassInvoicing Invoice Property Setter XML Engine Post Invoices SP
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, creating Invoices for (String bpId : bpIds) { // query for the business partner final BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId); // create a new Invoice Object final Invoice invoice = OBProvider.getInstance().get(Invoice.class); invoice.setOrganization(org); invoice.setBusinessPartner(bp); ........... invoice.setFormOfPayment(invoiceTemplate.getFormOfPayment()); invoice.setDocumentType(invoiceTemplate.getDocumentType()); // create the invoice lines for (InvoiceTemplateLine invoiceTemplateLine : invoiceTemplate.getMINVInvoiceTemplateLineList()) { // set invoice line properties final String qtyStr = vars.getNumericParameter("inpQuantity_" + postfix); final BigDecimal qty = new BigDecimal(qtyStr); final InvoiceLine invoiceLine = OBProvider.getInstance().get(InvoiceLine.class); invoiceLine.setProduct(invoiceTemplateLine.getProduct()); invoiceLine.setInvoicedQuantity(qty); ............ } // set remaining invoice properties invoicePropertySetter.setInvoiceProperties(invoice, vars); // then save the invoice OBDal.getInstance().save(invoice); }
Development Approach: code snippets, posting invoices final CallProcess caller = OBProvider.getInstance().get(CallProcess.class); final org.openbravo.model.ad.ui.Process process = OBDal.getInstance().get(org.openbravo.model.ad.ui.Process.class, "111"); for (Invoice invoice : invoices) { final ProcessInstance processInstance = caller.call(process, invoice.getId(), null); if (processInstance.getErrorMsg() != null && processInstance.getErrorMsg().trim().length() > 0) { // handle process instance.... } }
Development Approach: code snippets, posting invoices final CallProcess caller = OBProvider.getInstance().get(CallProcess.class); final org.openbravo.model.ad.ui.Process process = OBDal.getInstance().get(org.openbravo.model.ad.ui.Process.class, "111"); for (Invoice invoice : invoices) { final ProcessInstance processInstance = caller.call(process, invoice.getId(), null); if (processInstance.getErrorMsg() != null && processInstance.getErrorMsg().trim().length() > 0) { // handle process instance.... } }
Development Approach: code snippets, posting invoices final CallProcess caller = OBProvider.getInstance().get(CallProcess.class); final org.openbravo.model.ad.ui.Process process = OBDal.getInstance().get(org.openbravo.model.ad.ui.Process.class, "111"); for (Invoice invoice : invoices) { final ProcessInstance processInstance = caller.call(process, invoice.getId(), null); if (processInstance.getErrorMsg() != null && processInstance.getErrorMsg().trim().length() > 0) { // handle process instance.... } }
Wrap-Up Functionality and Demo Process and Tools Development Technique
Q & A http://forge.openbravo.com http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide martin.taal@openbravo.com Next webinar: Intercompany Documents October 29th 4-5 PM (CET)