Mass Invoicing Module Extension Module Webinar

29
Mass Invoicing Module Extension Module Webinar 15 th of October 2009

description

Mass Invoicing Module Extension Module Webinar. 15 th of October 2009. Agenda. Functionality and Demo10 min. Process and Tools10 min. Development Technique10 min. Q & A 30 min. Agenda. Functionality and Demo Process and Tools Development Technique - PowerPoint PPT Presentation

Transcript of Mass Invoicing Module Extension Module Webinar

Page 1: Mass Invoicing Module Extension Module Webinar

Mass Invoicing Module

Extension Module Webinar

15th of October 2009

Page 2: Mass Invoicing Module Extension Module Webinar

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 3: Mass Invoicing Module Extension Module Webinar

Page 3Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

Agenda

Functionality and Demo

Process and Tools

Development Technique

Q & A

Page 4: Mass Invoicing Module Extension Module Webinar

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 5: Mass Invoicing Module Extension Module Webinar

Page 5Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

DEMO

Massinvoicing: Functional Highlights

Page 6: Mass Invoicing Module Extension Module Webinar

Page 6Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

Agenda

Functionality and Demo

Process and Tools

Development Technique

Q & A

Page 7: Mass Invoicing Module Extension Module Webinar

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 8: Mass Invoicing Module Extension Module Webinar

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 9: Mass Invoicing Module Extension Module Webinar

Page 9Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

DEMO

Process and Tools: Openbravo Forge

Page 10: Mass Invoicing Module Extension Module Webinar

Page 10Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

Functionality and Demo

Process and Tools

Development Technique

Q & A

Agenda

Page 11: Mass Invoicing Module Extension Module Webinar

Page 11Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

MassInvoicing

Development Approach

DAL

ApplicationDictionary

XML Engine

BusinessObject Setter

Page 12: Mass Invoicing Module Extension Module Webinar

Page 12Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

MassInvoicing

Development Approach

DAL

ApplicationDictionary

XML Engine

BusinessObject Setter

- Model Definition- Form & Object Mapping

Page 13: Mass Invoicing Module Extension Module Webinar

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 14: Mass Invoicing Module Extension Module Webinar

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 15: Mass Invoicing Module Extension Module Webinar

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 16: Mass Invoicing Module Extension Module Webinar

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 17: Mass Invoicing Module Extension Module Webinar

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 18: Mass Invoicing Module Extension Module Webinar

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 19: Mass Invoicing Module Extension Module Webinar

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 20: Mass Invoicing Module Extension Module Webinar

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 21: Mass Invoicing Module Extension Module Webinar

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 22: Mass Invoicing Module Extension Module Webinar

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 23: Mass Invoicing Module Extension Module Webinar

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 24: Mass Invoicing Module Extension Module Webinar

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 25: Mass Invoicing Module Extension Module Webinar

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 26: Mass Invoicing Module Extension Module Webinar

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 27: Mass Invoicing Module Extension Module Webinar

Page 27Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

Functionality and Demo

Wrap-Up

Process and Tools

Development Technique

Page 28: Mass Invoicing Module Extension Module Webinar

Page 28Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal

Q & Ahttp://forge.openbravo.com

http://wiki.openbravo.com/wiki/ERP/2.50/Developers_Guide

[email protected]

Next webinar:Intercompany DocumentsOctober 29th 4-5 PM (CET)

Page 29: Mass Invoicing Module Extension Module Webinar

Page 29Mass Invoicing -Extension Module Webinar-Openbravo, Martin Taal