| /* |
| * 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. |
| */ |
| |
| // this script is used to get the company's logo header information for orders, invoices, and returns. It can either take order, invoice, returnHeader from |
| // parameters or use orderId, invoiceId, or returnId to look them up. |
| // if none of these parameters are available then fromPartyId is used or "ORGANIZATION_PARTY" from general.properties as fallback |
| |
| import java.sql.Timestamp |
| |
| import org.apache.ofbiz.base.util.* |
| import org.apache.ofbiz.entity.* |
| import org.apache.ofbiz.entity.util.* |
| import org.apache.ofbiz.party.contact.* |
| import org.apache.ofbiz.order.order.OrderReadHelper |
| import org.apache.ofbiz.party.content.PartyContentWrapper |
| import org.apache.ofbiz.entity.util.EntityUtilProperties |
| |
| orderHeader = parameters.orderHeader |
| orderId = parameters.orderId |
| invoice = parameters.invoice |
| invoiceId = parameters.invoiceId |
| shipmentId = parameters.shipmentId |
| returnHeader = parameters.returnHeader |
| returnId = parameters.returnId |
| quote = null |
| quoteId = parameters.quoteId |
| fromPartyId = parameters.fromPartyId |
| |
| if (!orderHeader && orderId) { |
| orderHeader = from("OrderHeader").where("orderId", orderId).queryOne() |
| try { |
| if (parameters.facilityId) { |
| UtilHttp.setContentDisposition(response, "PickSheet" + orderId + ".pdf") |
| } else { |
| UtilHttp.setContentDisposition(response, orderId + ".pdf") |
| } |
| } catch (MissingPropertyException e) { |
| // This hack for OFBIZ-6792 to avoid "groovy.lang.MissingPropertyException: No such property: response for class: CompanyHeader" when response does not exist (in sendOrderConfirmation service) |
| } |
| } else if (shipmentId) { |
| shipment = from("Shipment").where("shipmentId", shipmentId).queryOne() |
| orderHeader = shipment.getRelatedOne("PrimaryOrderHeader", false) |
| } |
| |
| if (!invoice && invoiceId) { |
| invoice = from("Invoice").where("invoiceId", invoiceId).queryOne() |
| try { |
| UtilHttp.setContentDisposition(response, invoiceId + ".pdf") |
| } catch (MissingPropertyException e) { |
| // This hack for OFBIZ-6792 to avoid "groovy.lang.MissingPropertyException: No such property: response for class: CompanyHeader" when response does not exist (in sendOrderConfirmation service) |
| } |
| } |
| |
| if (!returnHeader && returnId) { |
| returnHeader = from("ReturnHeader").where("returnId", returnId).queryOne() |
| } |
| |
| if (quoteId) { |
| quote = from("Quote").where("quoteId", quoteId).queryOne() |
| } |
| |
| // defaults: |
| def logoImageUrl = null // the default value, "/images/ofbiz_powered.gif", is set in the screen decorators |
| def partyId = null |
| |
| // get the logo partyId from order or invoice - note that it is better to do comparisons this way in case the there are null values |
| if (orderHeader) { |
| orh = new OrderReadHelper(orderHeader) |
| // for sales order, the logo party is the "BILL_FROM_VENDOR" of the order. If that's not available, we'll use the OrderHeader's ProductStore's payToPartyId |
| if ("SALES_ORDER".equals(orderHeader.orderTypeId)) { |
| if (orh.getBillFromParty()) { |
| partyId = orh.getBillFromParty().partyId |
| } else { |
| productStore = orderHeader.getRelatedOne("ProductStore", false) |
| if (orderHeader.orderTypeId.equals("SALES_ORDER") && productStore?.payToPartyId) { |
| partyId = productStore.payToPartyId |
| } |
| } |
| // purchase orders - use the BILL_TO_CUSTOMER of the order |
| } else if ("PURCHASE_ORDER".equals(orderHeader.orderTypeId)) { |
| def billToParty = orh.getBillToParty() |
| if (billToParty) { |
| partyId = billToParty.partyId |
| } else { |
| def billToCustomer = EntityUtil.getFirst(orderHeader.getRelated("OrderRole", [roleTypeId : "BILL_TO_CUSTOMER"], null, false)) |
| if (billToCustomer) { |
| partyId = billToCustomer.partyId |
| } |
| } |
| } |
| } else if (invoice) { |
| if ("SALES_INVOICE".equals(invoice.invoiceTypeId) && invoice.partyIdFrom) { |
| partyId = invoice.partyIdFrom |
| } |
| if ("PURCHASE_INVOICE".equals(invoice.invoiceTypeId) || "CUST_RTN_INVOICE".equals(invoice.invoiceTypeId) && invoice.partyId) { |
| partyId = invoice.partyId |
| } |
| } else if (returnHeader) { |
| if ("CUSTOMER_RETURN".equals(returnHeader.returnHeaderTypeId) && returnHeader.toPartyId) { |
| partyId = returnHeader.toPartyId |
| } else if ("VENDOR_RETURN".equals(returnHeader.returnHeaderTypeId) && returnHeader.fromPartyId) { |
| partyId = returnHeader.fromPartyId |
| } |
| } else if (quote) { |
| productStore = quote.getRelatedOne("ProductStore", false) |
| if (productStore?.payToPartyId) { |
| partyId = productStore.payToPartyId |
| } |
| } |
| |
| // if partyId wasn't found use fromPartyId-parameter |
| if (!partyId) { |
| if (fromPartyId) { |
| partyId = fromPartyId |
| } else { |
| partyId = parameters.get('ApplicationDecorator|organizationPartyId') ? parameters.get('ApplicationDecorator|organizationPartyId') : context.defaultOrganizationPartyId |
| } |
| } |
| |
| // the logo |
| partyGroup = from("PartyGroup").where("partyId", partyId).queryOne() |
| if (partyGroup) { |
| partyContentWrapper = new PartyContentWrapper(dispatcher, partyGroup, locale, EntityUtilProperties.getPropertyValue("content", "defaultMimeType", "text/html; charset=utf-8", delegator)) |
| partyContent = partyContentWrapper.getFirstPartyContentByType(partyGroup.partyId , partyGroup, "LGOIMGURL", delegator) |
| if (partyContent) { |
| logoImageUrl = "/content/control/stream?contentId=" + partyContent.contentId |
| } else { |
| if (partyGroup?.logoImageUrl) { |
| logoImageUrl = partyGroup.logoImageUrl |
| } |
| } |
| } |
| //If logoImageUrl not null then only set it to context else it will override the default value "/images/ofbiz_powered.gif" |
| if (logoImageUrl) { |
| context.logoImageUrl = logoImageUrl |
| } |
| |
| // the company name |
| companyName = "Default Company" |
| if (partyGroup?.groupName) { |
| companyName = partyGroup.groupName |
| } |
| context.companyName = companyName |
| |
| // the address |
| addresses = from("PartyContactWithPurpose") |
| .where("partyId", partyId, "contactMechPurposeTypeId", "GENERAL_LOCATION") |
| .filterByDate("contactFromDate", "contactThruDate", "purposeFromDate", "purposeThruDate") |
| .queryList() |
| address = null |
| if (addresses) { |
| address = from("PostalAddress").where("contactMechId", addresses[0].contactMechId).queryOne() |
| } |
| if (address) { |
| // get the country name and state/province abbreviation |
| country = address.getRelatedOne("CountryGeo", true) |
| if (country) { |
| context.countryName = country.get("geoName", locale) |
| } |
| stateProvince = address.getRelatedOne("StateProvinceGeo", true) |
| if (stateProvince) { |
| context.stateProvinceAbbr = stateProvince.abbreviation |
| } |
| } |
| context.postalAddress = address |
| |
| //telephone |
| phones = from("PartyContactWithPurpose") |
| .where("partyId", partyId, "contactMechPurposeTypeId", "PRIMARY_PHONE") |
| .filterByDate("contactFromDate", "contactThruDate", "purposeFromDate", "purposeThruDate") |
| .queryList() |
| if (phones) { |
| context.phone = from("TelecomNumber").where("contactMechId", phones[0].contactMechId).queryOne() |
| } |
| |
| // Fax |
| faxNumbers = from("PartyContactWithPurpose") |
| .where("partyId", partyId, "contactMechPurposeTypeId", "FAX_NUMBER") |
| .filterByDate("contactFromDate", "contactThruDate", "purposeFromDate", "purposeThruDate") |
| .queryList() |
| if (faxNumbers) { |
| context.fax = from("TelecomNumber").where("contactMechId", faxNumbers[0].contactMechId).queryOne() |
| } |
| |
| //Email |
| emails = from("PartyContactWithPurpose") |
| .where("partyId", partyId, "contactMechPurposeTypeId", "PRIMARY_EMAIL") |
| .filterByDate("contactFromDate", "contactThruDate", "purposeFromDate", "purposeThruDate") |
| .queryList() |
| if (emails) { |
| context.email = from("ContactMech").where("contactMechId", emails[0].contactMechId).queryOne() |
| } else { //get email address from party contact mech |
| selContacts = from("PartyContactMech") |
| .where("partyId", partyId).filterByDate(nowTimestamp, "fromDate", "thruDate") |
| .queryList() |
| if (selContacts) { |
| i = selContacts.iterator() |
| while (i.hasNext()) { |
| email = i.next().getRelatedOne("ContactMech", false) |
| if ("ELECTRONIC_ADDRESS".equals(email.contactMechTypeId)) { |
| context.email = email |
| break |
| } |
| } |
| } |
| } |
| |
| // website |
| websiteUrls = from("PartyContactWithPurpose") |
| .where("partyId", partyId, "contactMechPurposeTypeId", "PRIMARY_WEB_URL") |
| .filterByDate("contactFromDate", "contactThruDate", "purposeFromDate", "purposeThruDate") |
| .queryList() |
| if (websiteUrls) { |
| websiteUrl = EntityUtil.getFirst(websiteUrls) |
| context.website = from("ContactMech").where("contactMechId", websiteUrl.contactMechId).queryOne() |
| } else { //get web address from party contact mech |
| selContacts = from("PartyContactMech") |
| .where("partyId", partyId) |
| .filterByDate(nowTimestamp, "fromDate", "thruDate") |
| .queryList() |
| if (selContacts) { |
| Iterator i = selContacts.iterator() |
| while (i.hasNext()) { |
| website = i.next().getRelatedOne("ContactMech", false) |
| if ("WEB_ADDRESS".equals(website.contactMechTypeId)) { |
| context.website = website |
| break |
| } |
| } |
| } |
| } |
| |
| //Bank account |
| selPayments = from("PaymentMethod") |
| .where("partyId", partyId, "paymentMethodTypeId", "EFT_ACCOUNT") |
| .filterByDate(nowTimestamp, "fromDate", "thruDate") |
| .queryList() |
| if (selPayments) { |
| context.eftAccount = from("EftAccount").where("paymentMethodId", selPayments[0].paymentMethodId).queryOne() |
| } |
| |
| // Tax ID Info |
| partyTaxAuthInfoList = from("PartyTaxAuthInfo").where("partyId", partyId) |
| .filterByDate(nowTimestamp, "fromDate", "thruDate") |
| .queryList() |
| if (partyTaxAuthInfoList) { |
| if (address?.countryGeoId) { |
| // if we have an address with country filter by that |
| partyTaxAuthInfoList.eachWithIndex { partyTaxAuthInfo, i -> |
| if (partyTaxAuthInfo.taxAuthGeoId.equals(address.countryGeoId)) { |
| context.sendingPartyTaxId = partyTaxAuthInfo.partyTaxId |
| } |
| } |
| } else { |
| // otherwise just grab the first one |
| context.sendingPartyTaxId = partyTaxAuthInfoList[0].partyTaxId |
| } |
| } |
| |