Mass Invoicing Module Extension Module Webinar
description
Transcript of Mass Invoicing Module Extension Module Webinar
Mass Invoicing Module
Extension Module Webinar
15th of October 2009
Page 2Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Agenda
Functionality and Demo 10 min.
Process and Tools 10 min.
Development Technique 10 min.
Q & A 30 min.
Page 3Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Agenda
Functionality and Demo
Process and Tools
Development Technique
Q & A
Page 4Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Goal: improve efficiency when creating sales invoices for multiple business partners
Massinvoicing: Functional Highlights
Functional Concepts:
Invoice Template
Mass Invoicing Wizard
Solution Approach:
Deliver as a Module
Use Forge capabilities
Use current OB technology stack
Page 5Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
DEMO
Massinvoicing: Functional Highlights
Page 6Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Agenda
Functionality and Demo
Process and Tools
Development Technique
Q & A
Page 7Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Configure a focused/lean system
Deliver as a Module: benefits of Modularity
Independent and shorter release cycles
Fine-grained dependency management
Improve functionality/code re-use
Facilitates contributions
Publish and promote new functionality
Page 8Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Start
Functional Design
Development&
Delivery
Testing
Requirements Gathering/Wire Frame
Forge: Project Creation
Process and Tools: Openbravo Forge
Functional Design Document & Review
Forge: Project Wiki
Coding & Delivery
Forge: Code & Module & Mercurial
Test Plan
Forge: Wiki & Module
MaintenanceCoding & Re-deliver
Forge: Forum & Module
Page 9Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
DEMO
Process and Tools: Openbravo Forge
Page 10Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Functionality and Demo
Process and Tools
Development Technique
Q & A
Agenda
Page 11Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
MassInvoicing
Development Approach
DAL
ApplicationDictionary
XML Engine
BusinessObject Setter
Page 12Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
MassInvoicing
Development Approach
DAL
ApplicationDictionary
XML Engine
BusinessObject Setter
- Model Definition- Form & Object Mapping
Page 13Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
MassInvoicing
Development Approach
DAL
ApplicationDictionary
XML Engine
BusinessObject Setter
- Model Definition- Form & Object Mapping
- Entity Generation- Transaction Handling- Ease-of-coding- Stored Proc. Calling
Page 14Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
MassInvoicing
Development Approach
DAL
ApplicationDictionary
XML Engine
BusinessObject Setter
- Model Definition- Form & Object Mapping
- Entity Generation- Transaction Handling- Ease-of-coding- Stored Proc. Calling
- HTML-Logic Separation- Automatic Translation/labels- Handle both single as structures
Page 15Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
MassInvoicing
Development Approach
DAL
ApplicationDictionary
XML Engine
BusinessObject Setter
- Model Definition- Form & Object Mapping
- Entity Generation- Transaction Handling- Ease-of-coding- Stored Proc. Calling
- HTML-Logic Separation- Automatic Translation/labels- Handle both single as structures
- One central setter per Entity- Sets all default values of a BO- Handles already set values
Page 16Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Development Approach: Runtime Class/Objects
Entities:BusinessPartnerInvoice & InvoiceLineInvoiceTemplateInvoiceTemplateLineOrganizationPriceList
MassInvoicing
Invoice Property Setter
Post InvoicesSP
Browser
XML Engine
Page 17Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 18Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 19Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 20Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 21Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 22Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 23Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
for (String bpId : bpIds) {// query for the business partnerfinal BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, bpId);// create a new Invoice Objectfinal 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 propertiesinvoicePropertySetter.setInvoiceProperties(invoice, vars);
// then save the invoiceOBDal.getInstance().save(invoice);
}
Development Approach: code snippets, creating Invoices
Page 24Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
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
Page 25Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
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
Page 26Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
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
Page 27Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Functionality and Demo
Wrap-Up
Process and Tools
Development Technique
Page 28Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal
Q & Ahttp://forge.openbravo.com
http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide
Next webinar:Intercompany DocumentsOctober 29th 4-5 PM (CET)
Page 29Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal