|
|||||||
Вывоз по факту
Время создания: 18.11.2019 14:03
Раздел: INFO - JOB - CUBA - GroovyScripts
Запись: wwwlir/Tetra/master/base/15740570052ceouvp5ct/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
import com.groupstp.datasupplier.data.BankData import com.groupstp.datasupplier.service.BankDataSupplierService import com.groupstp.rtneo.entity.* import org.apache.commons.collections4.CollectionUtils import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import com.github.declinationofnames.* import com.haulmont.cuba.core.global.*; import com.groupstp.rtneo.core.bean.calculation.CalculationWorkerHelper import com.groupstp.rtneo.service.AccrualService import com.groupstp.rtneo.data.ContainerYardSearchData import com.groupstp.rtneo.core.bean.ContainerYardWorker import org.apache.commons.lang.StringUtils import com.groupstp.rtneo.service.CompanyService import java.text.DateFormat; import java.text.SimpleDateFormat; def helper = AppBeans.get(CalculationWorkerHelper.NAME) def service = AppBeans.get(AccrualService.NAME) def containerYardWorker = AppBeans.get(ContainerYardWorker.NAME) def bankDataService = AppBeans.get(BankDataSupplierService.NAME) def companyService = AppBeans.get(CompanyService.NAME) def contract = dataManager.reload(params['contract'],'contract-print') def r1 = "d6cc66de-e017-f8e6-1915-6b3fef60080e" def r2 = "2254e580-3a64-9b11-0fc9-8fa3dfa00438" //def params = [:] //def contract = dataManager.load(Contract.class).id(UUID.fromString(r1)).view('contract-print').optional().orElse(null) DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); DateFormat df2 = new SimpleDateFormat("dd.MM.yyyy"); Calendar cal = Calendar.getInstance(); cal.setTime(contract.getFrom()); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH)); def startFrom = df.format(cal.getTime()) cal.setTime(contract.getBefore()); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); def endBefore = df.format(cal.getTime()) //Получаем реквизиты компании, действующие на момент даты договора def company = contract.getCompany() def companyRequisites = companyService.getCompanyRequisites(company, contract.getDate()) def companyManagerNameR = companyRequisites.getManagerName() try{ companyManagerNameR = new RussianName(companyManagerNameR).fullName(RussianNameProcessor.gcaseRod) } catch(e){ } //заполняем шапку def contragent = contract.getContragent() //документ-основание contragentPersonReasonText = ', действующего на основании ' if (contragent.getType() == ContragentType.PERSONAL){ contragentPersonReasonText = '' } contragentPersonReasonDoc = params['personReason'] if (contragentPersonReasonDoc == null){ contragentPersonReasonDoc = contragent.getHeadPersonReasonDoc() } contragentPersonReasonDocR = contragentPersonReasonDoc try{ contragentPersonReasonDocR = new RussianName(contragentPersonReasonDoc).fullName(RussianNameProcessor.gcaseRod) } catch(e){ } if (contragentPersonReasonDocR == null){ if (getContragentType(contragent) == ContragentType.ORGANISATION){ contragentPersonReasonDocR = "устава" } else if(getContragentType(contragent) == ContragentType.INDIVIDUAL){ contragentPersonReasonDocR = "свидетельства / выписки о государственной регистрации в качестве индивидуального предпринимателя" } } //подписант contragentPersonName = params['personName'] if (contragentPersonName == null){ contragentPersonName = contragent.getHeadPersonName() if (contragent.getType() == ContragentType.PERSONAL){ contragentPersonName = contragent.getName() } } contragentPersonNameR = contragentPersonName try{ contragentPersonNameR = new RussianName(contragentPersonName).fullName(RussianNameProcessor.gcaseRod) } catch(e){ } //должность подписанта contragentPersonPost = params['personPost'] if (contragentPersonPost == null){ contragentPersonPost = contragent.getHeadPersonPost() } contragentPersonPostR = contragentPersonPost try{ contragentPersonPostR = new RussianName(contragentPersonPost).fullName(RussianNameProcessor.gcaseRod) } catch(e){ } //массив шапочных параметров def props = [ 'number': contract.getNumber(), 'date': getTextDate(contract.getDate()), //a.kotvinskiy /-- 'dateFromTKO': df2.format(contract.getFrom()), 'dateBeforeTKO': df.format(contract.getBefore()), //a.kotvinskiy --/ 'contragentName':contragent.getName(), 'contragentNameShort':contragent.getShortName(), 'contragentPersonName': contragentPersonName, 'contragentPersonNameR': contragentPersonNameR, 'contragentPersonNameShort': getShortFio(contragentPersonName), 'contragentPersonPost': contragentPersonPost, 'contragentPersonPostR': contragentPersonPostR, 'contragentPersonReasonDoc': contragentPersonReasonDoc, 'contragentPersonReasonDocR': contragentPersonReasonDocR, 'contragentPersonReasonText': contragentPersonReasonText, 'contragentShortName':contragent.getShortName(), 'legalAddress':contragent.getLegalAddress(), 'actualAddress':contragent.getActualAddress(), 'mailingAddress':contragent.getMailingAddress(), 'registrationAddrees': contragent.getRegistrationAddress(), 'passportSeries': contragent.getPassportSeries(), 'passportNumber': contragent.getPassportNumber(), 'passportGivenDate': contragent.getPassportGivenDate(), 'inn':contragent.getInn(), 'kpp':contragent.getKpp(), 'ogrn':contragent.getOgrn(), 'checkingAccount':contragent.getCheckingAccount(), 'bankName':contragent.getBankName(), 'correspondentAccount':contragent.getCorrespondentAccount(), 'bik':contragent.getBik() ,'companyShortName':company.shortName ,'companyFullName':company.fullName ,'companyInn':company.inn ,'companyEmail':company.email ,'companyOgrn':company.ogrn ,'companyPhone':company.phone ,'companyLegalAddress':companyRequisites.legalAddress ,'companyActualAddress':companyRequisites.actualAddress ,'companyPostalAddress':companyRequisites.postalAddress ,'companyKpp':companyRequisites.kpp ,'companyBankName':companyRequisites.bankName ,'companyBankAccount':companyRequisites.bankAccount ,'companyCorrespondentAccount':companyRequisites.correspondentAccount ,'companyRcbic':companyRequisites.rcbic ,'companyManagerTitle':companyRequisites.managerTitle ,'companyManagerTitleR':companyRequisites.managerTitleR ,'companyManagerName':companyRequisites.managerName ,'companyManagerNameR':companyManagerNameR ,'companyManagerNameShort':getShortFio(companyRequisites.managerName) ,'companyManagerDocumentR':getShortFio(companyRequisites.managerDocumentR) ] if (!StringUtils.isBlank(props['bik']) && (StringUtils.isBlank(props['bankName']) || StringUtils.isBlank(props['correspondentAccount']))) { BankData bank = bankDataService.getSuggestionBankDetails(props['bik']) if (bank != null) { if (StringUtils.isBlank(props['bankName'])) { props['bankName'] = bank.getName() } if (StringUtils.isBlank(props['correspondentAccount'])) { props['correspondentAccount'] = bank.getCorrespondentAccount() } } } //телефон + почта def phone = '' if (contragent.getHeadPersonPhone() != null){ phone = contragent.getHeadPersonPhone() } else if (contragent.getContactPersonPhone()!=null){ phone = contragent.getContactPersonPhone() } def email = '' if (contragent.getHeadPersonEmail()!=null){ email = contragent.getHeadPersonEmail() } else if (contragent.getContactPersonEmail()!=null){ email = contragent.getContactPersonEmail() } props['phone'] = phone props['email'] = email //a.kotvinskiy 19-07-19/-- //В пункте 3 доп соглашения, указываем начало действия доп соглашения props['dateFrom'] = getTextDate(contract.getFrom()) //a.kotvinskiy 19-07-19--/ //получаем номер и дату головного договора if (contract.getMainContract()!=null){ props['mainContractNumber'] = contract.getMainContract().getNumber() props['mainContractDate'] = getTextDate(contract.getMainContract().getDate()) } //вычисляем подписантов и юридический адрес def defaultDate = new Date().copyWith(year: 2019, month: Calendar.JANUARY, dayOfMonth: 17, hourOfDay: 0, minute: 0, second: 0); def addressChangeDate = new Date().copyWith(year: 2019, month: Calendar.APRIL, dayOfMonth: 26, hourOfDay: 0, minute: 0, second: 0); def contractDate = contract.getDate() props['ourPersonPost'] = "Заместитель генерального директора по коммерческой работе" props['ourPersonPostR'] = "Заместителя генерального директора по коммерческой работе" props['ourPersonName'] = "Степанова Татьяна Анатольевна" props['ourPersonNameR'] = "Степановой Татьяны Анатольевны" props['ourPersonReasonDoc'] = "доверенность № РТ-05 от 11.01.2019 г" props['ourPersonReasonDocR'] = "доверенности № РТ-05 от 11.01.2019 г" props['ourPersonNameShort'] = "Степанова Т.А." if (contractDate < addressChangeDate){ props['ourLegalAddress'] = '308000, Белгородская область, город Белгород, проспект Б. Хмельницкого, дом 131, помещение 15' props['ourKpp'] = '312301001' } else { props['ourLegalAddress'] = '664033, Иркутская область, город Иркутск, улица Лермонтова, дом 337Б, помещение 8' props['ourKpp'] = '381201001' } //позиции по договору def units = []; def realEstates = []; def calculations = []; //контейнерные площадки def containers = []; def containersUnique = []; // def accrualsGroup = new TreeMap<>(); //a.kotvinskiy /-- //Объемы арендаторов за которые оплачивает арендодатель def rentersGroup = new TreeMap<>(); ViewRepository vRep = AppBeans.get(ViewRepository.NAME) View creView = vRep.getView(ContragentRealEstate.class, "_local"); creView.addProperty("contragent", vRep.getView(Contragent.class, "_local")); //creView.addProperty("category", vRep.getView(RealEstateCategory.class, "_local")); creView.addProperty("ownType"); //a.kotvinskiy --/ //заполняем позиции for (ContractPosition position: contract.getPositions()){ //a.kotvinskiy /-- //Оплата арендодателем def isPayLandlord = false; def isOwner = false; def isCnC = false;
//////////////////////
//Проверяем на null if(position.getContragentRealEstate()!=null && !position.getContragentRealEstate().isDeleted()){
def rentCre = position.getContragentRealEstate(); rentCre = dataManager.reload(rentCre, creView);
//Арендатор или собственник if(rentCre.getOwnType().equals(TypeOwnership.RENT)){ isOwner = true; } //Если за объект оплачивает арендодатель if(isOwner & isPayLandLord(position.getContragentRealEstate())){ isPayLandlord = true; } //Если позиция создалась с объектом арендодателя if(isOwner && !contragent.getId().equals(rentCre.getContragent().getId())){ isCnC = true; }
//log.debug("${rentCre.getId()}: isPayLandlord = ${isPayLandlord}, isOwner = ${isOwner}, isCnC = ${isCnC} | ${contragent.getId()} and ${rentCre.getContragent()}") }else{ //log.debug("${position.getId()}: CRE is null") } def isFact = dataManager.loadValue('select cp.isFactCalculation from rtneo$ContractPosition cp where cp.id = :id', Boolean.class).parameter("id", position.getId()).optional().orElse(false); //////////////////////
// if(position.getContragentRealEstate()!=null && !position.getContragentRealEstate().isDeleted()){ // def rentCre = position.getContragentRealEstate(); // rentCre = dataManager.reload(rentCre, creView); // if(rentCre.getOwnType().equals(TypeOwnership.RENT) & isPayLandLord(position.getContragentRealEstate())){ // isPayLandlord = true; // } // // } // calculation = [:] // if(isFact){ // calculation['unitName'] = 'Вывоз по факту' // calculation['norm'] = '--' // calculation['amount'] = '--' // calculation['calculationAmount'] = '--' // calculation['n'] = calculations.size()+1 // calculations.push(calculation) // } //a.kotvinskiy --/ if (CollectionUtils.isEmpty(position.getAccruals()) && !isFact) { continue }
realEstateNums = "" realEstatePos = [:] calculation = [:]
if (position.getCategory()!=null){ calculation['unitName'] = position.getUnit().getName() } if (position.getNorm()!=null){ //a.kotvinskiy /-- //calculation['norm'] = getNumber(position.getNorm(), false, true) calculation['norm'] = getFormatNum(position.getNorm(), 4) //a.kotvinskiy --/ } if (position.getWasteProject()!=null){ //calculation['unitName'] = 'ПНООЛР' calculation['unitName'] = "ПНООЛР с ${position.getWasteProject().getValidityFrom() == null? '--':df.format(position.getWasteProject().getValidityFrom())} по ${position.getWasteProject().getValidityTo() == null? '--':df.format(position.getWasteProject().getValidityTo())}" } //бегаем по начислениям BigDecimal totalVolumePosition = 0 //a.kotvinskiy /-- BigDecimal tariff = 0 BigDecimal amountBaseRent = 0; //a.kotvinskiy --/ for (Accrual accrual: position.getAccruals()){ tariffNoNDS = round(getNN(accrual.getPrice())*5/6); totalVolumePosition+=getNN(accrual.getAmountBase())
amountBaseRent += isCnC && isPayLandlord?getNN(accrual.getAmountBase()):BigDecimal.ZERO
// totalVolumePosition+=isPayLandlord?BigDecimal.ZERO:getNN(accrual.getAmountBase()) // amountBaseRent +=!isPayLandlord?BigDecimal.ZERO:getNN(accrual.getAmountBase()) // amountBaseRent +=!isPayLandlord?BigDecimal.ZERO:getNN(accrual.getAmountBase()) if (accrualsGroup[accrual.getPeriod()]==null){ accrualsGroup[accrual.getPeriod()] = [ 'period' : getTextPeriod(accrual.getPeriod()), 'tariff': round(getNN(accrual.getPrice())*5/6), 'amountBase': !isCnC && isPayLandlord ? BigDecimal.ZERO : getNN(accrual.getAmountBase()), 'amountBaseNoRent': !isCnC ? getNN(accrual.getAmountBase()) : BigDecimal.ZERO, 'amountBaseRent': isCnC && isPayLandlord ? getNN(accrual.getAmountBase()) : BigDecimal.ZERO, //a.kotvinskiy /-- 'totalSumBaseNoNds': (getNN(accrual.getTotalSumBase())-getNN(accrual.getNdsSumBase())), //'totalSumBaseNoNds': (getNN(accrual.getAmountBase())*getNN(tariffNoNDS)), //a.kotvinskiy --/ 'totalSumBase': getNN(accrual.getTotalSumBase()), 'discount': getNN(accrual.getTotalSumBase())-getNN(accrual.getTotalSum()), 'totalSum': getNN(accrual.getTotalSum()), 'calculationAmount':getNN(accrual.getCalculationAmount())] } else { accrualsGroup[accrual.getPeriod()]['amountBase']+=!isCnC && isPayLandlord ? BigDecimal.ZERO : getNN(accrual.getAmountBase()); accrualsGroup[accrual.getPeriod()]['amountBaseNoRent']+=!isCnC ? getNN(accrual.getAmountBase()) : BigDecimal.ZERO; accrualsGroup[accrual.getPeriod()]['amountBaseRent']+=isCnC && isPayLandlord ? getNN(accrual.getAmountBase()) : BigDecimal.ZERO; //a.kotvinskiy /-- accrualsGroup[accrual.getPeriod()]['totalSumBaseNoNds']+=(getNN(accrual.getTotalSumBase())-getNN(accrual.getNdsSumBase())); //accrualsGroup[accrual.getPeriod()]['totalSumBaseNoNds']+=(getNN(accrual.getAmountBase())*getNN(tariffNoNDS)); //a.kotvinskiy --/ accrualsGroup[accrual.getPeriod()]['totalSumBase']+=getNN(accrual.getTotalSumBase()); accrualsGroup[accrual.getPeriod()]['discount']+=(getNN(accrual.getTotalSumBase())-getNN(accrual.getTotalSum())); accrualsGroup[accrual.getPeriod()]['totalSum']+=getNN(accrual.getTotalSum()); accrualsGroup[accrual.getPeriod()]['calculationAmount'] = getNN(accrual.getCalculationAmount()); }
if(isCnC && isPayLandlord){ def rentCategory = dataManager.load(RealEstateCategory.class) .query('select a.category from rtneo$Accrual a where a.id=:id') .parameter('id', accrual.getId()) .view('_local') .optional() .orElse(null); if(rentersGroup[rentCategory.getName()] == null){ rentersGroup[rentCategory.getName()]=[ 'rentCategory': rentCategory.getName(), 'rentArea':accrual.getCalculationAmount(), 'rentNorm':rentCategory.getNorm(), 'rentAmount':accrual.getAmountBase()]; }else{ rentersGroup[rentCategory.getName()]['rentArea']+=accrual.getCalculationAmount(); rentersGroup[rentCategory.getName()]['rentAmount'] += accrual.getAmountBase(); } }
} ////////////////////////////////////////// // if(isPayLandlord){ // def rentCategory = dataManager.load(RealEstateCategory.class) // .query('select a.category from rtneo$Accrual a where a.id=:id') // .parameter('id', accrual.getId()) // .view('_local') // .optional() // .orElse(null); // if(rentersGroup[rentCategory.getName()] == null){ // rentersGroup[rentCategory.getName()]=[ // 'rentCategory': rentCategory.getName(), // 'rentArea':accrual.getCalculationAmount(), // 'rentNorm':rentCategory.getNorm(), // 'rentAmount':accrual.getAmountBase()]; // }else{ // rentersGroup[rentCategory.getName()]['rentArea']+=accrual.getCalculationAmount(); // rentersGroup[rentCategory.getName()]['rentAmount'] += accrual.getAmountBase(); // } // } //a.kotvinskiy /-- //calculation['amount'] = getNumber(totalVolumePosition, false) //calculation['calculationAmount'] = getNumber(position.getAccruals().get(0).getCalculationAmount(), false) calculation['amount'] = getFormatNum(totalVolumePosition, 5);
//Нужен среднее кол-во р/е по позиции, или объем деленый на норматив //Вычисляем актуальное начисление на в зависимости от даты договора // def nMouth = accrualsGroup.size() == 12 ? contract.getDate().getMonth()-1 : 0 def nMouth = accrualsGroup.size()-(12-contract.getDate().getMonth())
calculation['calculationAmount'] = getFormatNum(accrualsGroup.values()[nMouth]['calculationAmount'], 5) if(position.getNorm() == null) calculation['calculationAmountPay'] = getFormatNum(accrualsGroup.values()[nMouth]['calculationAmount'], 5); else calculation['calculationAmountPay'] = position.getNorm() == 0 ? BigDecimal.ZERO : getFormatNum(totalVolumePosition / new BigDecimal(position.getNorm()), 3); //a.kotvinskiy --/ if (position.getContragentRealEstate()!=null && position.getContragentRealEstate().getRealEstate()){ RealEstate realEstate = position.getContragentRealEstate().getRealEstate() realEstatePos['realEstateName'] = realEstate.getName() realEstatePos['cadastralNumber'] = realEstate.getCadastralNumber() realEstatePos['address'] = realEstate.getAddress() realEstatePos['startFrom'] = startFrom realEstatePos['endBefore'] = endBefore } def realEstatesWasteProject = []; //бегаем по площадкам if (position.getContainerYards()!=null){ //заполняем массив КП for (ContractPositionContainerYard contractPositionContainerYard: position.getContainerYards()){ containerYard = contractPositionContainerYard.getContainerYard() realEstatePos['containerYardNumber'] = containerYard.getCode(); //выдираем из проекта лимитов ОН if (position.getWasteProject()!=null){ realEstateP = [:] realEstateP['realEstateName'] = contractPositionContainerYard.getContragentRealEstate().getRealEstate().getName() realEstateP['cadastralNumber'] = contractPositionContainerYard.getContragentRealEstate().getRealEstate().getCadastralNumber() realEstateP['address'] = contractPositionContainerYard.getContragentRealEstate().getRealEstate().getAddress() realEstateP['containerYardNumber'] = containerYard.getCode(); realEstateP['n'] = realEstates.size()+1 if (realEstateNums.length()>0){ realEstateNums+=',' } realEstateNums+=realEstateP['n'] realEstatesWasteProject.add(contractPositionContainerYard.getContragentRealEstate().getId()) if(!isCnC) realEstates.push(realEstateP) } if (containersUnique.indexOf(containerYard.getId())<0){ containersUnique.push(containerYard.getId()) def containerWasteBuff = [:] // for (ContainerWaste container: containerYard.getContainers()){ // String type = container.getType()?.getName() == null ? '' : container.getType().getName() // String volume = container.getType()?.getVolume() == null ? '' : getNumber(container.getType().getVolume(),false) // Integer count = container.getCount() == null ? 0 : container.getCount(); // // String key = type + volume // // Map previous = containerWasteBuff[key] // if (previous == null) { // def current = [ // 'n': containers.size()+1, // 'code':containerYard.getCode(), // 'address':containerYard.getAddress(), // 'longitude':containerYard.getLongitude(), // 'latitude':containerYard.getLatitude(), // 'owner': containerYard.getOwner(), // 'type': type, // 'volume': volume, // 'count': count // ] // containers.push(current) // containerWasteBuff[key] = current // } else { // previous['count'] += count // } // } for (ContainerWaste container: containerYard.getContainers()){ String type = container.getType()?.getName() == null ? '' : container.getType().getName() String volume = container.getType()?.getVolume() == null ? '' : getNumber(container.getType().getVolume(),false) Integer count = container.getCount() == null ? 0 : container.getCount(); String typeVal = type + volume String key = containerYard.getCode() def current = [] Map previous = containerWasteBuff[key] // if (previous == null) { current = [ 'n': containers.size()+1, 'code':containerYard.getCode(), 'startFrom':startFrom, 'endBefore':endBefore, 'address':containerYard.getAddress(), 'longitude':containerYard.getLongitude(), 'latitude':containerYard.getLatitude(), 'owner': containerYard.getOwner(), 'type': type, 'volume': volume, 'count': count, 'typeWaste': container.getType().getVolume() < 5.0?'ТКО':'КГО' ] // log.debug(previous['code']) if(containerWasteBuff[key] != null) { // if(current['n'] == ) current['n'] = '' current['code'] = '' current['startFrom'] = '' current['endBefore'] = '' current['address'] = '' current['longitude'] = '' current['latitude'] = '' current['owner'] = '' } containers.push(current) containerWasteBuff[key] = current // log.debug(containerWasteBuff) // } else { // previous['count'] += count // current['code'] = '--' // containers.push(current) // containerWasteBuff[key] = current // } } } } } //добираем объекты недвижимости из ПЛООНР, для которых не найдены КП if (position.getWasteProject() != null){ for (ContragentRealEstate cre: position.getWasteProject().getRealEstates()){ if (realEstatesWasteProject.indexOf(cre.getId())>=0){ continue; } realEstateP = [:] realEstateP['realEstateName'] = cre.getRealEstate().getName() realEstateP['cadastralNumber'] = cre.getRealEstate().getCadastralNumber() realEstateP['address'] = cre.getRealEstate().getAddress() realEstateP['n'] = realEstates.size()+1 if (realEstateNums.length()>0){ realEstateNums+=',' } realEstateNums+=realEstateP['n'] realEstates.push(realEstateP) } } if (!isCnC && realEstatePos!=[:] && position.getWasteProject() == null){ realEstatePos['n'] = realEstates.size()+1 realEstates.push(realEstatePos) if (realEstateNums.length()>0){ realEstateNums+=',' } realEstateNums+=realEstatePos['n'] } calculation['n'] = realEstateNums if(isFact){ calculation['unitName'] = 'Вывоз по факту' calculation['norm'] = '--' calculation['amount'] = '--' calculation['calculationAmount'] = '--' // calculation['n'] = calculations.size()+1 // calculations.push(calculation) } if(!isCnC) calculations.push(calculation) } def renters = [] for(item in rentersGroup){ def renter = [ 'rentCategory':item.getValue()['rentCategory'], 'rentArea':item.getValue()['rentArea']/12, 'rentNorm':item.getValue()['rentNorm'], 'rentAmount':item.getValue()['rentAmount'], ] renters.push(renter) } //рассчет итогов BigDecimal amountBaseAll = 0 //for (ContractPosition position: contract.getPositions()){ // amountBaseAll += position.getVolumeYear() //} BigDecimal amountBase = 0 BigDecimal amountBaseNoRent = 0 BigDecimal amountBaseRent = 0 BigDecimal totalSumBaseNoNds = 0 BigDecimal totalSumBase = 0 BigDecimal discount = 0 BigDecimal totalSum = 0 def accruals = [] for (item in accrualsGroup){ amountBase+=item.getValue()['amountBase'] amountBaseNoRent+=item.getValue()['amountBaseNoRent'] amountBaseRent+=item.getValue()['amountBaseRent'] totalSumBaseNoNds = totalSumBaseNoNds + item.getValue()['totalSumBaseNoNds'].setScale(2, RoundingMode.HALF_UP) totalSumBase = totalSumBase + item.getValue()['totalSumBase'].setScale(2, RoundingMode.HALF_UP) discount = discount + item.getValue()['discount'].setScale(2, RoundingMode.HALF_UP) totalSum = totalSum + item.getValue()['totalSum'].setScale(2, RoundingMode.HALF_UP) def accrual =[ 'period' : item.getValue()['period'], 'tariff': getNumber(item.getValue()['tariff']), //a.kotvinskiy /-- //'amountBase': getNumber(item.getValue()['amountBase'], false), 'amountBase': getFormatNum(item.getValue()['amountBase'], 5), 'amountBaseNoRent': getFormatNum(item.getValue()['amountBaseNoRent'], 5), 'amountBaseRent': getFormatNum(item.getValue()['amountBaseRent'], 5), //a.kotvinskiy --/ 'totalSumBaseNoNds': getNumber(item.getValue()['totalSumBaseNoNds']), 'totalSumBase': getNumber(item.getValue()['totalSumBase']), 'discount': getNumber(item.getValue()['discount']), 'totalSum': getNumber(item.getValue()['totalSum']) ] accruals.push(accrual) } //массив итогов def totals = [ //a.kotvinskiy /-- //'amountBaseAll' : getNumber(amountBaseAll, false), //'amountBase' : getNumber(amountBase, false), 'amountBase' : getFormatNum(amountBase, 5), 'amountBaseNoRent' : getFormatNum(amountBaseNoRent, 5), 'amountBaseRent' : getFormatNum(amountBaseRent, 5), //a.kotvinskiy --/ 'totalSumBaseNoNds' : getNumber(totalSumBaseNoNds), 'totalSumBase' : getNumber(totalSumBase), 'discount' : getNumber(discount), 'totalSum' : getNumber(totalSum) ] return [['props':props,'realEstates': realEstates, 'calculations': calculations, 'totals':totals, 'containers': containers, 'accruals': accruals, 'renters': renters]] //получить дату словами def getTextDate(Date date) { def result='' def monthesRP = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'] Calendar cal = Calendar.getInstance() cal.setTime(date); result = cal.get(Calendar.DAY_OF_MONTH).toString() result+=" "+monthesRP[cal.get(Calendar.MONTH)] result+=" "+cal.get(Calendar.YEAR).toString()+" г." return result } //получить период словами def getTextPeriod(Date date) { def result='' def monthesRP = ['январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь'] Calendar cal = Calendar.getInstance() cal.setTime(date); result+=monthesRP[cal.get(Calendar.MONTH)] result+=" "+cal.get(Calendar.YEAR).toString()+" г." return result } //форматирование чисел def getNumber(BigDecimal number, boolean money = true, boolean scale = false) { if (number == null) { return "-" } DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance() symbols.setGroupingSeparator((char) ' ') symbols.setDecimalSeparator((char) ',') if (money){ DecimalFormat formatter = new DecimalFormat('###,###.00', symbols) String result = formatter.format(number); return result.startsWith(",") ? "0" + result : result; } else { //Временное решение чтобы, вывести норматив. 4 знака после запятой if(scale){ DecimalFormat formatter = new DecimalFormat('###,###.####', symbols) return formatter.format(number); }else{ DecimalFormat formatter = new DecimalFormat('###,###.###', symbols) return formatter.format(number); } } } //a.kotvinskiy /-- //Временное решение, по формату отображения нулей после запятой def getFormatNum(BigDecimal number, int s, boolean money = false){ if (number == null) { return "-" } String formatString = ''; DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance() symbols.setGroupingSeparator((char) ' ') symbols.setDecimalSeparator((char) ',') switch(s){ case 1: formatString = '###,###,###.#'; break; case 2: formatString = '###,###,###.##'; break; case 3: formatString = '###,###,###.###'; break; case 4: formatString = '###,###,###.####'; break; case 5: formatString = '###,###,###.######'; break; } DecimalFormat formatter = new DecimalFormat(formatString, symbols); String result = formatter.format(number); return result.startsWith(",") ? "0" + result : result; } //a.kotvinskiy --/ def getShortFio(String fio) { if (fio == null) return "" String pattern = '(\\S+\\s)(\\S{1})\\S+\\s(\\S{1})\\S+' String str = fio.replaceAll(pattern, '$1$2.$3.') return str } def round(BigDecimal sum){ return sum == null ? BigDecimal.ZERO : sum.setScale(2, RoundingMode.HALF_UP); } def getContragentType(Contragent contragent) { String name = contragent.getName(); if (name == null){ name = contragent.getShortName(); } String inn = contragent.getInn(); ContragentType type = contragent.getType(); if (!StringUtils.isEmpty(name)) { name = name.toLowerCase().trim(); if (name.startsWith("ип ") || name.endsWith(" ип") || name.contains(" ип ") || name.contains("инд.предп.") || name.contains("индивидуальный предприниматель")) { type = ContragentType.INDIVIDUAL; } } return type; } def getNN(BigDecimal value) { return value == null ? BigDecimal.ZERO : value; } def isPayLandLord(ContragentRealEstate cre){ List<RealEstateRenter> rr = dataManager.load(RealEstateRenter) .query('select r from rtneo$RealEstateRenter r where r.renterRecord.id = :id and r.payOwner = true') .parameter("id", cre.getId()) .view("_local") .list(); if(rr.size()>0)return true else return false; } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|