Hey Adrian, While its true most don't go this way, if you bought some books from Amazon then you would need to pay before they would ship ;-)
This kind of interaction happens when the transaction is between 2 businesses where the supplier is used to dealing with end consumers rather than businesses that request credit. Cheers Sam On 05/05/2010 13:14, Adrian Crum wrote: > Yeah, that scenario sounds pretty specific. That's not how most US businesses > work. > > -Adrian > > --- On Tue, 5/4/10, Sam Hamilton <s...@sh81.com> wrote: > >> From: Sam Hamilton <s...@sh81.com> >> Subject: Re: svn commit: r941132 - in /ofbiz/trunk/applications: >> accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml >> accounting/servicedef/services_payment.xml order/servicedef/secas.xml >> To: dev@ofbiz.apache.org >> Date: Tuesday, May 4, 2010, 8:00 PM >> Hi Scott, >> >> We will ring a supplier and get a quote for a product, >> agree the terms >> e.g. pay first then they send the goods or 30 days credit >> or pay on >> delivery of goods. Then create a Purchase Order and then >> wire them the >> payment, the goods will then be delivered to our warehouse >> where we >> receive against the PO. >> >> Sometimes the supplier can send too much or too little >> goods at which >> point either our purchasing department chases them for more >> products or >> we then send an additional wire for the extra cash or we >> get credit from >> the supplier to use against the next order. >> >> From my understanding of the flow of OFBiz you need to >> create the >> Purchase Order, approve it and then once the goods have >> been received in >> full the Purchase Invoice is generated which then kicks in >> the >> Agreements which you set during the creation of the >> Purchase Invoice and >> finally the Purchase Invoice is shown to the Accounts >> Payable team for >> payment. >> >> Yes I agree that this seems the wrong way round but this is >> how the >> business is done here and I can't change that - China can >> seem very >> inefficient at times. >> >> Perhaps a On/Off switch for this code could be made - then >> it suits all >> companies? How best to make this work for everyone? >> >> Cheers >> Sam >> >> >> >> On 05/05/2010 10:34, Scott Gray wrote: >>> Surely they invoice you beforehand though? >>> >>> The payment should be created based on that. >>> >>> Regards >>> Scott >>> >>> On 5/05/2010, at 2:28 PM, Sam Hamilton wrote: >>> >>>> Hi Guys, >>>> >>>> Its for suppliers who need the payment of the >> invoice before the goods >>>> will be shipped e.g. they don't give credit. >>>> >>>> Sam >>>> >>>> >>>> On 05/05/2010 10:24, BJ Freeman wrote: >>>>> 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"> >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>> >>> >> >> > > >