blob: 517fdffffcd2e6479f390cc034b9dd89611440ea [file] [log] [blame]
/*
* 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
}
}