| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| <simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods-v2.xsd"> |
| |
| <simple-method method-name="loadSalesInvoiceFact" short-description=""> |
| <entity-one entity-name="Invoice" value-field="invoice"/> |
| <if-empty field="invoice"> |
| <add-error> |
| <fail-property resource="AccountingUiLabels" property="AccountingInvoiceDoesNotExists"/> |
| </add-error> |
| </if-empty> |
| <check-errors/> |
| <if-compare field="invoice.invoiceTypeId" operator="equals" value="SALES_INVOICE"> |
| <set field="andConditions.invoiceItemTypeId" value="INV_FPROD_ITEM"/> |
| <get-related relation-name="InvoiceItem" value-field="invoice" list="invoiceItems" map="andConditions"/> |
| <iterate list="invoiceItems" entry="invoiceItem"> |
| <clear-field field="inMap"/> |
| <set field="inMap.invoice" from-field="invoice"/> |
| <set field="inMap.invoiceItem" from-field="invoiceItem"/> |
| <call-service service-name="loadSalesInvoiceItemFact" in-map-name="inMap"/> |
| </iterate> |
| </if-compare> |
| </simple-method> |
| <simple-method method-name="loadSalesInvoiceItemFact" short-description=""> |
| <set field="invoice" from-field="parameters.invoice"/> |
| <set field="invoiceItem" from-field="parameters.invoiceItem"/> |
| <if-empty field="invoice"> |
| <entity-one entity-name="Invoice" value-field="invoice"/> |
| </if-empty> |
| <if-empty field="invoiceItem"> |
| <entity-one entity-name="InvoiceItem" value-field="invoiceItem"/> |
| </if-empty> |
| <if-empty field="invoice"> |
| <add-error> |
| <fail-property resource="AccountingUiLabels" property="AccountingInvoiceDoesNotExists"/> |
| </add-error> |
| </if-empty> |
| <if-empty field="invoiceItem"> |
| <add-error> |
| <fail-property resource="AccountingUiLabels" property="AccountingInvoiceItemDoesNotExists"/> |
| </add-error> |
| </if-empty> |
| <check-errors/> |
| |
| <if-compare field="invoice.invoiceTypeId" operator="equals" value="SALES_INVOICE"> |
| <entity-one entity-name="SalesInvoiceItemFact" value-field="fact" auto-field-map="false"> |
| <field-map field-name="invoiceId" from-field="invoiceItem.invoiceId"/> |
| <field-map field-name="invoiceItemSeqId" from-field="invoiceItem.invoiceItemSeqId"/> |
| </entity-one> |
| <!-- key handling --> |
| <if-empty field="fact"> |
| <make-value entity-name="SalesInvoiceItemFact" value-field="fact"/> |
| <set field="fact.invoiceId" from-field="invoice.invoiceId"/> |
| <set field="fact.invoiceItemSeqId" from-field="invoiceItem.invoiceItemSeqId"/> |
| <!-- conversion of the invoice date --> |
| <if-not-empty field="invoice.invoiceDate"> |
| <clear-field field="inMap"/> |
| <set field="inMap.dimensionEntityName" value="DateDimension"/> |
| <set field="inMap.naturalKeyFields.dateValue" from-field="invoice.invoiceDate" type="Date"/> |
| <call-service service-name="getDimensionIdFromNaturalKey" in-map-name="inMap"> |
| <result-to-field result-name="dimensionId" field="fact.invoiceDateDimId"/> |
| </call-service> |
| <if-empty field="fact.invoiceDateDimId"> |
| <set field="fact.invoiceDateDimId" value="_NF_"/> |
| </if-empty> |
| <else> |
| <set field="fact.invoiceDateDimId" value="_NA_"/> |
| </else> |
| </if-not-empty> |
| <!-- conversion of the product id --> |
| <if-not-empty field="invoiceItem.productId"> |
| <clear-field field="inMap"/> |
| <set field="inMap.dimensionEntityName" value="ProductDimension"/> |
| <set field="inMap.naturalKeyFields.productId" from-field="invoiceItem.productId"/> |
| <call-service service-name="getDimensionIdFromNaturalKey" in-map-name="inMap"> |
| <result-to-field result-name="dimensionId" field="fact.productDimId"/> |
| </call-service> |
| <if-empty field="fact.productDimId"> |
| <set field="fact.productDimId" value="_NF_"/> |
| </if-empty> |
| <else> |
| <set field="fact.productDimId" value="_NA_"/> |
| </else> |
| </if-not-empty> |
| <!-- conversion of the invoice currency --> |
| <if-not-empty field="invoice.currencyUomId"> |
| <clear-field field="inMap"/> |
| <set field="inMap.dimensionEntityName" value="CurrencyDimension"/> |
| <set field="inMap.naturalKeyFields.currencyId" from-field="invoice.currencyUomId"/> |
| <call-service service-name="getDimensionIdFromNaturalKey" in-map-name="inMap"> |
| <result-to-field result-name="dimensionId" field="fact.origCurrencyDimId"/> |
| </call-service> |
| <if-empty field="fact.origCurrencyDimId"> |
| <set field="fact.origCurrencyDimId" value="_NF_"/> |
| </if-empty> |
| <else> |
| <set field="fact.origCurrencyDimId" value="_NA_"/> |
| </else> |
| </if-not-empty> |
| <!-- TODO --> |
| <set field="fact.orderId" value="_NA_"/> |
| <set field="fact.billToCustomerDimId" value="_NA_"/> |
| <create-value value-field="fact"/> |
| </if-empty> |
| <!-- =============== --> |
| <!-- facts handling --> |
| <!-- =============== --> |
| <set field="fact.quantity" from-field="invoiceItem.quantity" type="BigDecimal"/> |
| <set field="fact.extGrossAmount" value="0.0" type="BigDecimal"/> |
| <set field="fact.extDiscountAmount" value="0.0" type="BigDecimal"/> |
| <set field="fact.extTaxAmount" value="0.0" type="BigDecimal"/> |
| <set field="fact.extNetAmount" value="0.0" type="BigDecimal"/> |
| <calculate field="fact.extGrossAmount"> |
| <calcop field="invoiceItem.quantity" operator="multiply"> |
| <calcop field="invoiceItem.amount" operator="get"/> |
| </calcop> |
| </calculate> |
| <!-- taxes --> |
| <clear-field field="andConditions"/> |
| <set field="andConditions.invoiceItemTypeId" value="ITM_SALES_TAX"/> |
| <get-related relation-name="ChildrenInvoiceItem" value-field="invoiceItem" list="taxes" map="andConditions"/> |
| <iterate list="taxes" entry="tax"> |
| <calculate field="fact.extTaxAmount"> |
| <calcop field="fact.extTaxAmount" operator="add"> |
| <calcop field="tax.amount" operator="get"/> |
| </calcop> |
| </calculate> |
| </iterate> |
| <!-- discounts --> |
| <clear-field field="andConditions"/> |
| <set field="andConditions.invoiceItemTypeId" value="ITM_PROMOTION_ADJ"/> |
| <get-related relation-name="ChildrenInvoiceItem" value-field="invoiceItem" list="discounts" map="andConditions"/> |
| <iterate list="discounts" entry="discount"> |
| <calculate field="fact.extDiscountAmount" type="BigDecimal"> |
| <calcop field="fact.extDiscountAmount" operator="add"> |
| <calcop field="discount.amount" operator="negative"/> |
| </calcop> |
| </calculate> |
| </iterate> |
| |
| <calculate field="fact.extNetAmount"> |
| <calcop field="fact.extGrossAmount" operator="subtract"> |
| <calcop field="fact.extDiscountAmount" operator="get"/> |
| </calcop> |
| </calculate> |
| <!-- TODO: prorate invoice header discounts and shipping charges --> |
| <!-- TODO: costs --> |
| <set field="fact.extManFixedCost" value="0.0" type="BigDecimal"/> |
| <set field="fact.extManVarCost" value="0.0" type="BigDecimal"/> |
| <set field="fact.extStorageCost" value="0.0" type="BigDecimal"/> |
| <set field="fact.extDistributionCost" value="0.0" type="BigDecimal"/> |
| |
| <calculate field="fact.contributionAmount"> |
| <calcop field="fact.extNetAmount" operator="subtract"> |
| <calcop field="fact.extManFixedCost" operator="get"/> |
| <calcop field="fact.extManVarCost" operator="get"/> |
| <calcop field="fact.extStorageCost" operator="get"/> |
| <calcop field="fact.extDistributionCost" operator="get"/> |
| </calcop> |
| </calculate> |
| |
| <store-value value-field="fact"/> |
| </if-compare> |
| </simple-method> |
| </simple-methods> |