290 likes | 402 Views
This webinar explores the functional highlights, development techniques, and tools of the Mass Invoicing Module Extension. Learn about improving efficiency in creating sales invoices for multiple business partners using Invoice Template and Mass Invoicing Wizard. Discover the benefits of delivering as a module, modular system configuration, and fine-grained dependency management. See a demo showcasing the Application Dictionary, XML Engine, and Business Object Setter. Follow the development approach with code snippets for invoice creation and management. Explore the process and tools on Openbravo Forge, from requirements gathering to maintenance.
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)