001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.ar.document.service.impl;
017    
018    import java.math.BigDecimal;
019    import java.util.ArrayList;
020    import java.util.Collection;
021    import java.util.HashMap;
022    import java.util.List;
023    import java.util.Map;
024    
025    import org.apache.commons.lang.StringUtils;
026    import org.kuali.kfs.module.ar.ArConstants;
027    import org.kuali.kfs.module.ar.businessobject.CustomerCreditMemoDetail;
028    import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail;
029    import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceItemCode;
030    import org.kuali.kfs.module.ar.businessobject.OrganizationAccountingDefault;
031    import org.kuali.kfs.module.ar.businessobject.SystemInformation;
032    import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
033    import org.kuali.kfs.module.ar.document.service.AccountsReceivableTaxService;
034    import org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService;
035    import org.kuali.kfs.module.ar.document.service.InvoicePaidAppliedService;
036    import org.kuali.kfs.sys.KFSPropertyConstants;
037    import org.kuali.kfs.sys.businessobject.ChartOrgHolder;
038    import org.kuali.kfs.sys.context.SpringContext;
039    import org.kuali.kfs.sys.service.FinancialSystemUserService;
040    import org.kuali.kfs.sys.service.TaxService;
041    import org.kuali.kfs.sys.service.UniversityDateService;
042    import org.kuali.rice.kns.service.BusinessObjectService;
043    import org.kuali.rice.kns.service.DateTimeService;
044    import org.kuali.rice.kns.service.ParameterService;
045    import org.kuali.rice.kns.util.GlobalVariables;
046    import org.kuali.rice.kns.util.KualiDecimal;
047    import org.kuali.rice.kns.util.ObjectUtils;
048    import org.kuali.rice.kns.util.spring.CacheNoCopy;
049    import org.springframework.transaction.annotation.Transactional;
050    
051    @Transactional
052    public class CustomerInvoiceDetailServiceImpl implements CustomerInvoiceDetailService {
053    
054        private DateTimeService dateTimeService;
055        private UniversityDateService universityDateService;
056        private BusinessObjectService businessObjectService;
057        private ParameterService parameterService;
058        private InvoicePaidAppliedService invoicePaidAppliedService;
059        private AccountsReceivableTaxService accountsReceivableTaxService;
060        private TaxService taxService;
061    
062    
063        /**
064         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getAddCustomerInvoiceDetail(java.lang.Integer,
065         *      java.lang.String, java.lang.String)
066         */
067        public CustomerInvoiceDetail getCustomerInvoiceDetailFromOrganizationAccountingDefault(Integer universityFiscalYear, String chartOfAccountsCode, String organizationCode) {
068            CustomerInvoiceDetail customerInvoiceDetail = new CustomerInvoiceDetail();
069    
070            Map<String, Object> criteria = new HashMap<String, Object>();
071            criteria.put("universityFiscalYear", universityFiscalYear);
072            criteria.put("chartOfAccountsCode", chartOfAccountsCode);
073            criteria.put("organizationCode", organizationCode);
074    
075            OrganizationAccountingDefault organizationAccountingDefault = (OrganizationAccountingDefault) businessObjectService.findByPrimaryKey(OrganizationAccountingDefault.class, criteria);
076            if (ObjectUtils.isNotNull(organizationAccountingDefault)) {
077                customerInvoiceDetail.setChartOfAccountsCode(organizationAccountingDefault.getDefaultInvoiceChartOfAccountsCode());
078                customerInvoiceDetail.setAccountNumber(organizationAccountingDefault.getDefaultInvoiceAccountNumber());
079                customerInvoiceDetail.setSubAccountNumber(organizationAccountingDefault.getDefaultInvoiceSubAccountNumber());
080                customerInvoiceDetail.setFinancialObjectCode(organizationAccountingDefault.getDefaultInvoiceFinancialObjectCode());
081                customerInvoiceDetail.setFinancialSubObjectCode(organizationAccountingDefault.getDefaultInvoiceFinancialSubObjectCode());
082                customerInvoiceDetail.setProjectCode(organizationAccountingDefault.getDefaultInvoiceProjectCode());
083                customerInvoiceDetail.setOrganizationReferenceId(organizationAccountingDefault.getDefaultInvoiceOrganizationReferenceIdentifier());
084            }
085    
086            customerInvoiceDetail.setInvoiceItemTaxAmount(new KualiDecimal(0.00));
087            customerInvoiceDetail.setInvoiceItemQuantity(new BigDecimal(1));
088            customerInvoiceDetail.setInvoiceItemUnitOfMeasureCode(ArConstants.CUSTOMER_INVOICE_DETAIL_UOM_DEFAULT);
089            // KULAR-448 customerInvoiceDetail.setInvoiceItemServiceDate(dateTimeService.getCurrentSqlDate());
090            customerInvoiceDetail.setTaxableIndicator(false);
091    
092            return customerInvoiceDetail;
093        }
094    
095        /**
096         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getAddLineCustomerInvoiceDetailForCurrentUserAndYear()
097         */
098        public CustomerInvoiceDetail getCustomerInvoiceDetailFromOrganizationAccountingDefaultForCurrentYear() {
099            Integer currentUniversityFiscalYear = universityDateService.getCurrentFiscalYear();
100            ChartOrgHolder currentUser = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(GlobalVariables.getUserSession().getPerson(), ArConstants.AR_NAMESPACE_CODE);
101            return getCustomerInvoiceDetailFromOrganizationAccountingDefault(currentUniversityFiscalYear, currentUser.getChartOfAccountsCode(), currentUser.getOrganizationCode());
102        }
103    
104        /**
105         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetailFromCustomerInvoiceItemCode(java.lang.String,
106         *      java.lang.String, java.lang.String)
107         */
108        public CustomerInvoiceDetail getCustomerInvoiceDetailFromCustomerInvoiceItemCode(String invoiceItemCode, String chartOfAccountsCode, String organizationCode) {
109    
110            Map<String, String> criteria = new HashMap<String, String>();
111            criteria.put("invoiceItemCode", invoiceItemCode);
112            criteria.put("chartOfAccountsCode", chartOfAccountsCode);
113            criteria.put("organizationCode", organizationCode);
114            CustomerInvoiceItemCode customerInvoiceItemCode = (CustomerInvoiceItemCode) businessObjectService.findByPrimaryKey(CustomerInvoiceItemCode.class, criteria);
115    
116            CustomerInvoiceDetail customerInvoiceDetail = null;
117            if (ObjectUtils.isNotNull(customerInvoiceItemCode)) {
118    
119                customerInvoiceDetail = new CustomerInvoiceDetail();
120                customerInvoiceDetail.setChartOfAccountsCode(customerInvoiceItemCode.getDefaultInvoiceChartOfAccountsCode());
121                customerInvoiceDetail.setAccountNumber(customerInvoiceItemCode.getDefaultInvoiceAccountNumber());
122                customerInvoiceDetail.setSubAccountNumber(customerInvoiceItemCode.getDefaultInvoiceSubAccountNumber());
123                customerInvoiceDetail.setFinancialObjectCode(customerInvoiceItemCode.getDefaultInvoiceFinancialObjectCode());
124                customerInvoiceDetail.setFinancialSubObjectCode(customerInvoiceItemCode.getDefaultInvoiceFinancialSubObjectCode());
125                customerInvoiceDetail.setProjectCode(customerInvoiceItemCode.getDefaultInvoiceProjectCode());
126    
127                customerInvoiceDetail.setOrganizationReferenceId(customerInvoiceItemCode.getDefaultInvoiceOrganizationReferenceIdentifier());
128                customerInvoiceDetail.setInvoiceItemCode(customerInvoiceItemCode.getInvoiceItemCode());
129                customerInvoiceDetail.setInvoiceItemDescription(customerInvoiceItemCode.getInvoiceItemDescription());
130                customerInvoiceDetail.setInvoiceItemUnitPrice(customerInvoiceItemCode.getItemDefaultPrice());
131                customerInvoiceDetail.setInvoiceItemUnitOfMeasureCode(customerInvoiceItemCode.getDefaultUnitOfMeasureCode());
132                customerInvoiceDetail.setInvoiceItemQuantity(customerInvoiceItemCode.getItemDefaultQuantity());
133                customerInvoiceDetail.setTaxableIndicator(customerInvoiceItemCode.isTaxableIndicator());
134    
135                // KULAR-448 customerInvoiceDetail.setInvoiceItemServiceDate(dateTimeService.getCurrentSqlDate());
136    
137                // TODO set sales tax accordingly
138                customerInvoiceDetail.setInvoiceItemTaxAmount(new KualiDecimal(0.00));
139    
140                // set amount = unit price * quantity
141                customerInvoiceDetail.updateAmountBasedOnQuantityAndUnitPrice();
142    
143            }
144    
145            return customerInvoiceDetail;
146        }
147    
148        public List<String> getCustomerInvoiceDocumentNumbersByAccountNumber(String accountNumber) {
149    
150            Map<String, String> fieldValues = new HashMap<String, String>();
151            fieldValues.put("accountNumber", accountNumber);
152    
153            Collection<CustomerInvoiceDetail> customerInvoiceDetails = businessObjectService.findMatching(CustomerInvoiceDetail.class, fieldValues);
154            List<String> docNumbers = new ArrayList<String>();
155            for (CustomerInvoiceDetail detail : customerInvoiceDetails) {
156                docNumbers.add(detail.getDocumentNumber());
157            }
158    
159            return docNumbers;
160        }
161    
162        /**
163         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetailFromCustomerInvoiceItemCodeForCurrentUser(java.lang.String)
164         */
165        public CustomerInvoiceDetail getCustomerInvoiceDetailFromCustomerInvoiceItemCodeForCurrentUser(String invoiceItemCode) {
166            ChartOrgHolder currentUser = SpringContext.getBean(FinancialSystemUserService.class).getPrimaryOrganization(GlobalVariables.getUserSession().getPerson(), ArConstants.AR_NAMESPACE_CODE);
167            return getCustomerInvoiceDetailFromCustomerInvoiceItemCode(invoiceItemCode, currentUser.getChartOfAccountsCode(), currentUser.getOrganizationCode());
168        }
169    
170        /**
171         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getDiscountCustomerInvoiceDetail(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail,
172         *      java.lang.Integer, java.lang.String, java.lang.String)
173         */
174        public CustomerInvoiceDetail getDiscountCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail, Integer universityFiscalYear, String chartOfAccountsCode, String organizationCode) {
175    
176            CustomerInvoiceDetail discountCustomerInvoiceDetail = (CustomerInvoiceDetail) ObjectUtils.deepCopy(customerInvoiceDetail);
177            discountCustomerInvoiceDetail.setInvoiceItemUnitPriceToNegative();
178            discountCustomerInvoiceDetail.updateAmountBasedOnQuantityAndUnitPrice();
179            discountCustomerInvoiceDetail.setInvoiceItemDescription(ArConstants.DISCOUNT_PREFIX + StringUtils.trimToEmpty(customerInvoiceDetail.getInvoiceItemDescription()));
180    
181            Map<String, Object> criteria = new HashMap<String, Object>();
182            criteria.put("universityFiscalYear", universityFiscalYear);
183            criteria.put("processingChartOfAccountCode", chartOfAccountsCode);
184            criteria.put("processingOrganizationCode", organizationCode);
185    
186            SystemInformation systemInformation = (SystemInformation) businessObjectService.findByPrimaryKey(SystemInformation.class, criteria);
187            if (ObjectUtils.isNotNull(systemInformation)) {
188                discountCustomerInvoiceDetail.setFinancialObjectCode(systemInformation.getDiscountObjectCode());
189            }
190    
191            return discountCustomerInvoiceDetail;
192        }
193    
194        /**
195         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getDiscountCustomerInvoiceDetailForCurrentYear(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
196         */
197        public CustomerInvoiceDetail getDiscountCustomerInvoiceDetailForCurrentYear(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument) {
198            Integer currentUniversityFiscalYear = universityDateService.getCurrentFiscalYear();
199            String processingChartOfAccountsCode = customerInvoiceDocument.getAccountsReceivableDocumentHeader().getProcessingChartOfAccountCode();
200            String processingOrganizationCode = customerInvoiceDocument.getAccountsReceivableDocumentHeader().getProcessingOrganizationCode();
201            return getDiscountCustomerInvoiceDetail(customerInvoiceDetail, currentUniversityFiscalYear, processingChartOfAccountsCode, processingOrganizationCode);
202        }
203    
204    
205        /**
206         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#recalculateCustomerInvoiceDetail(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
207         */
208        public void recalculateCustomerInvoiceDetail(CustomerInvoiceDocument customerInvoiceDocument, CustomerInvoiceDetail customerInvoiceDetail) {
209    
210            // make sure amounts are negative when they are supposed to be
211            if (!customerInvoiceDocument.isInvoiceReversal() && customerInvoiceDetail.isDiscountLine()) {
212                customerInvoiceDetail.setInvoiceItemUnitPriceToNegative();
213            }
214            else if (customerInvoiceDocument.isInvoiceReversal() && !customerInvoiceDetail.isDiscountLine()) {
215                customerInvoiceDetail.setInvoiceItemUnitPriceToNegative();
216            }
217            KualiDecimal pretaxAmount = customerInvoiceDetail.getInvoiceItemPreTaxAmount();
218    
219    
220            KualiDecimal taxAmount = KualiDecimal.ZERO;
221            if (accountsReceivableTaxService.isCustomerInvoiceDetailTaxable(customerInvoiceDocument, customerInvoiceDetail)) {
222    
223                String postalCode = accountsReceivableTaxService.getPostalCodeForTaxation(customerInvoiceDocument);
224                taxAmount = taxService.getTotalSalesTaxAmount(dateTimeService.getCurrentSqlDate(), postalCode, pretaxAmount);
225            }
226    
227            customerInvoiceDetail.setInvoiceItemTaxAmount(taxAmount);
228            customerInvoiceDetail.setAmount(taxAmount.add(pretaxAmount));
229        }
230    
231        /**
232         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#updateAccountsForCorrespondingDiscount(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
233         */
234        public void updateAccountsForCorrespondingDiscount(CustomerInvoiceDetail parent) {
235    
236            CustomerInvoiceDetail discount = parent.getDiscountCustomerInvoiceDetail();
237            if (ObjectUtils.isNotNull(discount)) {
238                if (StringUtils.isNotEmpty(parent.getAccountNumber())) {
239                    discount.setAccountNumber(parent.getAccountNumber());
240                }
241                if (StringUtils.isNotEmpty(parent.getSubAccountNumber())) {
242                    discount.setSubAccountNumber(parent.getSubAccountNumber());
243                }
244            }
245        }
246    
247    
248        /**
249         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetail(java.lang.String,
250         *      java.lang.Integer)
251         */
252        @SuppressWarnings("unchecked")
253        public CustomerInvoiceDetail getCustomerInvoiceDetail(String documentNumber, Integer sequenceNumber) {
254            Map<String, String> criteria = new HashMap<String, String>();
255            criteria.put("documentNumber", documentNumber);
256            criteria.put("sequenceNumber", sequenceNumber.toString());
257    
258            return (CustomerInvoiceDetail) businessObjectService.findByPrimaryKey(CustomerInvoiceDetail.class, criteria);
259        }
260    
261        /**
262         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetailsForInvoice(java.lang.String)
263         */
264        public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoice(String customerInvoiceDocumentNumber) {
265            Map<String, String> criteria = new HashMap<String, String>();
266            criteria.put("documentNumber", customerInvoiceDocumentNumber);
267    
268            return businessObjectService.findMatching(CustomerInvoiceDetail.class, criteria);
269        }
270    
271        /**
272         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetailsForInvoiceWithCaching(java.lang.String)
273         */
274        @CacheNoCopy
275        public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoiceWithCaching(String customerInvoiceDocumentNumber) {
276            Map<String, String> criteria = new HashMap<String, String>();
277            criteria.put("documentNumber", customerInvoiceDocumentNumber);
278    
279            return businessObjectService.findMatching(CustomerInvoiceDetail.class, criteria);
280        }
281    
282        /**
283         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getCustomerInvoiceDetailsForInvoice(org.kuali.kfs.module.ar.document.CustomerInvoiceDocument)
284         */
285        public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoice(CustomerInvoiceDocument customerInvoiceDocument) {
286            if (null == customerInvoiceDocument) {
287                return new ArrayList<CustomerInvoiceDetail>();
288            }
289            return getCustomerInvoiceDetailsForInvoice(customerInvoiceDocument.getDocumentNumber());
290        }
291    
292        
293        /**
294         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getFinancialObjectCode(org.kuali.kfs.module.ar.businessobject.CustomerCreditMemoDetail)
295         *
296        public String getFinancialObjectCode(CustomerCreditMemoDetail customerCreditMemoDetail) {
297            // this implementation directly returns the FinancialObjectCode contained in the ref obj  
298            // customerInvoiceDetail in the customerCreditMemoDetail
299            return customerCreditMemoDetail.getCustomerInvoiceDetail().getFinancialObjectCode();
300        }
301        */
302        
303        /**
304         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#updateFinancialObjectCode(org.kuali.kfs.module.ar.businessobject.CustomerCreditMemoDetail)
305         *
306        public void updateFinancialObjectCode(CustomerCreditMemoDetail customerCreditMemoDetail) {
307            // this implementation directly returns without changing FinancialObjectCode contained in the ref obj customerInvoiceDetail
308            return;
309        }
310        */
311        
312        /**
313         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#updateAccountsReceivableObjectCode(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
314         */
315        public void updateAccountsReceivableObjectCode(CustomerInvoiceDetail customerInvoiceDetail) {
316            customerInvoiceDetail.setAccountsReceivableObjectCode(getAccountsReceivableObjectCodeBasedOnReceivableParameter(customerInvoiceDetail));
317        }
318    
319        /**
320         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#getAccountsReceivableObjectCodeBasedOnReceivableParameter(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail)
321         */
322        public String getAccountsReceivableObjectCodeBasedOnReceivableParameter(CustomerInvoiceDetail customerInvoiceDetail) {
323            String receivableOffsetOption = parameterService.getParameterValue(CustomerInvoiceDocument.class, ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD);
324            String accountsReceivableObjectCode = null;
325            if (ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD_CHART.equals(receivableOffsetOption)) {
326                if (StringUtils.isNotEmpty(customerInvoiceDetail.getChartOfAccountsCode())) {
327                    customerInvoiceDetail.refreshReferenceObject(KFSPropertyConstants.CHART);
328                    accountsReceivableObjectCode = customerInvoiceDetail.getChart().getFinAccountsReceivableObj().getFinancialObjectCode();
329                }
330            }
331            else if (ArConstants.GLPE_RECEIVABLE_OFFSET_GENERATION_METHOD_SUBFUND.equals(receivableOffsetOption)) {
332                if (StringUtils.isNotEmpty(customerInvoiceDetail.getAccountNumber())) {
333                    customerInvoiceDetail.refreshReferenceObject(KFSPropertyConstants.ACCOUNT);
334                    accountsReceivableObjectCode = SpringContext.getBean(ParameterService.class).getParameterValue(CustomerInvoiceDocument.class, ArConstants.GLPE_RECEIVABLE_OFFSET_OBJECT_CODE_BY_SUB_FUND, customerInvoiceDetail.getAccount().getSubFundGroupCode());
335                }
336            }
337            return accountsReceivableObjectCode;
338        }
339    
340        /**
341         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#prepareCustomerInvoiceDetailForAdd(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail,
342         *      org.kuali.kfs.module.ar.document.CustomerInvoiceDocument)
343         */
344        public void prepareCustomerInvoiceDetailForAdd(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument) {
345            recalculateCustomerInvoiceDetail(customerInvoiceDocument, customerInvoiceDetail);
346            updateAccountsReceivableObjectCode(customerInvoiceDetail);
347        }
348        
349        /**
350         * @see org.kuali.kfs.module.ar.document.service.CustomerInvoiceDetailService#prepareCustomerInvoiceDetailForErrorCorrection(org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail,org.kuali.kfs.module.ar.document.CustomerInvoiceDocument)
351         *
352        public void prepareCustomerInvoiceDetailForErrorCorrection(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument) {
353            // negate unit price
354            customerInvoiceDetail.setInvoiceItemUnitPrice(customerInvoiceDetail.getInvoiceItemUnitPrice().negate());
355            
356            //clear the old CustomerInvoiceDocument
357            customerInvoiceDetail.setCustomerInvoiceDocument(null);
358        }
359        */
360        
361        public DateTimeService getDateTimeService() {
362            return dateTimeService;
363        }
364    
365        public void setDateTimeService(DateTimeService dateTimeService) {
366            this.dateTimeService = dateTimeService;
367        }
368    
369        public UniversityDateService getUniversityDateService() {
370            return universityDateService;
371        }
372    
373        public void setUniversityDateService(UniversityDateService universityDateService) {
374            this.universityDateService = universityDateService;
375        }
376    
377        public BusinessObjectService getBusinessObjectService() {
378            return businessObjectService;
379        }
380    
381        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
382            this.businessObjectService = businessObjectService;
383        }
384    
385        public ParameterService getParameterService() {
386            return parameterService;
387        }
388    
389        public void setParameterService(ParameterService parameterService) {
390            this.parameterService = parameterService;
391        }
392    
393        /**
394         * @param invoicePaidAppliedService
395         */
396        public void setInvoicePaidAppliedService(InvoicePaidAppliedService invoicePaidAppliedService) {
397            this.invoicePaidAppliedService = invoicePaidAppliedService;
398        }
399    
400    
401        public InvoicePaidAppliedService getInvoicePaidAppliedService() {
402            return invoicePaidAppliedService;
403        }
404    
405        public TaxService getTaxService() {
406            return taxService;
407        }
408    
409        public void setTaxService(TaxService taxService) {
410            this.taxService = taxService;
411        }
412    
413        public AccountsReceivableTaxService getAccountsReceivableTaxService() {
414            return accountsReceivableTaxService;
415        }
416    
417        public void setAccountsReceivableTaxService(AccountsReceivableTaxService accountsReceivableTaxService) {
418            this.accountsReceivableTaxService = accountsReceivableTaxService;
419        }
420    }