more for my understanding, I believe an invoice for a PO is internal not sent to the supplier, if I remember a previous thread on the ml. and that it is used to reconcile against the invoice received from the supplier. I did something similar.
======================== BJ Freeman http://bjfreeman.elance.com Strategic Power Office with Supplier Automation <http://www.businessesnetwork.com/automation/viewforum.php?f=93> Specialtymarket.com <http://www.specialtymarket.com/> Systems Integrator-- Glad to Assist Chat Y! messenger: bjfr33man Linkedin <http://www.linkedin.com/profile?viewProfile=&key=1237480&locale=en_US&trk=tab_pro> Scott Gray sent the following on 5/4/2010 6:56 PM: > Hi Hans, > > Wouldn't you do this when an order is received (i.e. an invoice created) > rather than when the order is placed? > > Typically payment due dates are based on the invoice date not the order date. > > Regards > Scott > > HotWax Media > http://www.hotwaxmedia.com > > On 5/05/2010, at 1:43 PM, hans...@apache.org wrote: > >> Author: hansbak >> Date: Wed May 5 01:43:45 2010 >> New Revision: 941132 >> >> URL: http://svn.apache.org/viewvc?rev=941132&view=rev >> Log: >> Create a payment with the status 'not-paid' when a purchase order is >> approved setting the payment date according agreements >> >> Modified: >> >> ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml >> ofbiz/trunk/applications/accounting/servicedef/services_payment.xml >> ofbiz/trunk/applications/order/servicedef/secas.xml >> >> Modified: >> ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml?rev=941132&r1=941131&r2=941132&view=diff >> ============================================================================== >> --- >> ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml >> (original) >> +++ >> ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml >> Wed May 5 01:43:45 2010 >> @@ -746,4 +746,72 @@ under the License. >> <clear-field field="setPaymentStatusMap"/> >> </iterate> >> </simple-method> >> -</simple-methods> >> + >> + <simple-method method-name="createPaymentFromOrder" >> short-description="Service auto create Payment from Order"> >> + <entity-one value-field="orderHeader" entity-name="OrderHeader"/> >> + <entity-and list="orderRoleToList" entity-name="OrderRole"> >> + <field-map field-name="orderId" >> from-field="orderHeader.orderId"/> >> + <field-map field-name="roleTypeId" value="BILL_FROM_VENDOR"/> >> + </entity-and> >> + <first-from-list entry="orderRoleTo" list="orderRoleToList"/> >> + <entity-and list="orderRoleFromList" entity-name="OrderRole"> >> + <field-map field-name="orderId" >> from-field="orderHeader.orderId"/> >> + <field-map field-name="roleTypeId" value="BILL_TO_CUSTOMER"/> >> + </entity-and> >> + <first-from-list entry="orderRoleFrom" list="orderRoleFromList"/> >> + <if-compare operator="equals" value="PURCHASE_ORDER" >> field="orderHeader.orderTypeId"> >> + <entity-and list="agreementList" entity-name="Agreement" >> filter-by-date="true"> >> + <field-map field-name="partyIdFrom" >> from-field="orderRoleFrom.partyId"/> >> + <field-map field-name="partyIdTo" >> from-field="orderRoleTo.partyId"/> >> + <field-map field-name="agreementTypeId" >> value="PURCHASE_AGREEMENT"/> >> + </entity-and> >> + <set field="parameters.paymentTypeId" value="VENDOR_PAYMENT"/> >> + <else> >> + <entity-and list="agreementList" entity-name="Agreement" >> filter-by-date="true"> >> + <field-map field-name="partyIdFrom" >> from-field="orderRoleFrom.partyId"/> >> + <field-map field-name="partyIdTo" >> from-field="orderRoleTo.partyId"/> >> + <field-map field-name="agreementTypeId" >> value="SALES_AGREEMENT"/> >> + </entity-and> >> + <set field="parameters.paymentTypeId" >> value="CUSTOMER_PAYMENT"/> >> + </else> >> + </if-compare> >> + <first-from-list entry="agreement" list="agreementList"/> >> + <if-not-empty field="agreement"> >> + <entity-and list="orderTermList" entity-name="OrderTerm"> >> + <field-map field-name="orderId" >> from-field="orderHeader.orderId"/> >> + <field-map field-name="termTypeId" >> value="FIN_PAYMENT_TERM"/> >> + </entity-and> >> + <first-from-list entry="orderTerm" list="orderTermList"/> >> + <if-not-empty field="orderTerm.termDays"> >> + <set field="days" from-field="orderTerm.termDays" >> type="Integer"/> >> + <now-timestamp field="start"/> >> + <call-class-method >> class-name="org.ofbiz.base.util.UtilDateTime" >> method-name="addDaysToTimestamp" ret-field="parameters.effectiveDate"> >> + <field field="start" type="java.sql.Timestamp"/> >> + <field field="days" type="int"/> >> + </call-class-method> >> + </if-not-empty> >> + </if-not-empty> >> + <if-empty field="parameters.effectiveDate"> >> + <now-timestamp field="parameters.effectiveDate"/> >> + </if-empty> >> + <set field="parameters.partyIdFrom" >> from-field="orderRoleFrom.partyId"/> >> + <set field="parameters.partyIdTo" from-field="orderRoleTo.partyId"/> >> + <set field="parameters.amount" from-field="orderHeader.grandTotal"/> >> + <set field="parameters.currencyUomId" >> from-field="orderHeader.currencyUom"/> >> + <set field="parameters.paymentMethodTypeId" >> value="COMPANY_ACCOUNT"/> >> + <set field="parameters.statusId" value="PMNT_NOT_PAID"/> >> + <set-service-fields service-name="createPayment" >> to-map="createPayment" map="parameters"/> >> + <call-service service-name="createPayment" >> in-map-name="createPayment"> >> + <result-to-field result-name="paymentId" >> field="parameters.paymentId"/> >> + </call-service> >> + <set field="parameters.orderId" from-field="orderHeader.orderId"/> >> + <set field="parameters.maxAmount" >> from-field="orderHeader.grandTotal"/> >> + <set-service-fields service-name="createOrderPaymentPreference" >> to-map="newOrderPaymentPreference" map="parameters"/> >> + <call-service service-name="createOrderPaymentPreference" >> in-map-name="newOrderPaymentPreference"> >> + <result-to-field result-name="orderPaymentPreferenceId" >> field="parameters.paymentPreferenceId"/> >> + </call-service> >> + <set-service-fields service-name="updatePayment" >> to-map="updatePayment" map="parameters"/> >> + <call-service service-name="updatePayment" >> in-map-name="updatePayment"/> >> + <field-to-result field="parameters.paymentId" >> result-name="paymentId"/> >> + </simple-method> >> +</simple-methods> >> \ No newline at end of file >> >> Modified: ofbiz/trunk/applications/accounting/servicedef/services_payment.xml >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_payment.xml?rev=941132&r1=941131&r2=941132&view=diff >> ============================================================================== >> --- ofbiz/trunk/applications/accounting/servicedef/services_payment.xml >> (original) >> +++ ofbiz/trunk/applications/accounting/servicedef/services_payment.xml Wed >> May 5 01:43:45 2010 >> @@ -233,4 +233,11 @@ under the License. >> <attribute name="statusId" type="String" mode="IN" optional="false"/> >> <attribute name="errorMessage" type="String" optional="true" >> mode="OUT"/> >> </service> >> + >> + <service name="createPaymentFromOrder" engine="simple" >> + >> location="component://accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml" >> invoke="createPaymentFromOrder" auth="true"> >> + <description>create Payment from Order</description> >> + <attribute name="orderId" type="String" mode="IN" optional="false"/> >> + <attribute name="paymentId" type="String" mode="OUT" >> optional="false"/> >> + </service> >> </services> >> >> Modified: ofbiz/trunk/applications/order/servicedef/secas.xml >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=941132&r1=941131&r2=941132&view=diff >> ============================================================================== >> --- ofbiz/trunk/applications/order/servicedef/secas.xml (original) >> +++ ofbiz/trunk/applications/order/servicedef/secas.xml Wed May 5 01:43:45 >> 2010 >> @@ -93,6 +93,12 @@ under the License. >> <action service="resetGrandTotal" mode="sync"/> >> <action service="sendOrderCompleteNotification" mode="async" >> persist="true"/> >> </eca> >> + <eca service="changeOrderStatus" event="commit" run-on-error="false"> >> + <condition field-name="orderTypeId" operator="equals" >> value="PURCHASE_ORDER"/> >> + <condition field-name="statusId" operator="equals" >> value="ORDER_APPROVED"/> >> + <condition-field field-name="statusId" operator="not-equals" >> to-field-name="oldStatusId"/> >> + <action service="createPaymentFromOrder" mode="sync" >> persist="true"/> >> + </eca> >> >> <!-- DISABLED FOR NOW >> <eca service="changeOrderStatus" event="commit" run-on-error="false"> >> >> >