/* * 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 } }