MyTetra Share
Делитесь знаниями!
История КП доп
Время создания: 05.02.2020 09:07
Раздел: INFO - JOB - rtneo - Работа над задачами - Отчеты
Запись: wwwlir/Tetra/master/base/1576474412wyoqtlg1kr/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)

ViewRepository vRep = AppBeans.get(ViewRepository.NAME)


//View contractView = vRep.getView(Contract.class, 'contract-print')


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),

'startFrom' : startFrom

]


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<>();


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

//заполняем позиции

def n = 0

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())

// if(accrualsGroup.values()[nMouth]) calculation['calculationAmount'] = getFormatNum(accrualsGroup.values()[nMouth]['calculationAmount'], 5)

def calculationAmount = 0

if(position.getCalculationAmount() == null || position.getCalculationAmount() == 0){

if(position.getContragentRealEstate() == null){

calculationAmount = "--"

}else{

calculationAmount = getFormatNum(dataManager.reload(position.getContragentRealEstate(), "_local").getCalculationAmount(), 5)

}

}else{

calculationAmount = getFormatNum(position.getCalculationAmount(), 5)

}

calculation['calculationAmount'] = calculationAmount

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);

if(position.getContragentRealEstate() == null) calculation['calculationAmountPay'] = "--"

//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'] = ++n

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)

volume = volume.replaceAll(',', '.')

Integer count = container.getCount() == null ? 0 : container.getCount();


String typeVal = type + volume

String key = containerYard.getCode()

String typeExport = isFact?'Исходя из количества и объема контейнеров':'Исходя из нормативов накопления'

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(),

'typeExport':typeExport,

'owner': containerYard.getOwner(),

'type': type,

'volume': volume,

'count': count,

'typeWaste': ((volume != '') && (new BigDecimal(volume) < 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()){

cre = dataManager.reload(cre, "contragentRealEstate-categorization")

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'] = ++n

if (realEstateNums.length()>0){

realEstateNums+=','

}

realEstateNums+=realEstateP['n']

realEstates.push(realEstateP)

}

}

if (!isCnC && realEstatePos!=[:] && position.getWasteProject() == null){

realEstatePos['n'] = ++n

realEstates.push(realEstatePos)

////////////////////////////////////////////////////////////

def his = getHistoryCY(contragent, position)

for(def itemHis : his){

realEstates.push(itemHis)

}

////////////////////////////////////////////////////////////

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;

}


def getHistoryCY(Contragent contragent, ContractPosition contractPosition){

DataManager dataManager = AppBeans.get(DataManager.NAME);


DateFormat df = new SimpleDateFormat("dd.MM.yyyy");

Calendar cal = Calendar.getInstance();






def cpcy = ''


def list = dataManager.loadValues('select c.number, cp.contragentRealEstate, cy.contragentRealEstate.realEstate.name, cy.contragentRealEstate.realEstate.address, cy.contragentRealEstate.category.name , cy.containerYard.code, c.from, c.before from rtneo$Contract c join c.positions cp join cp.containerYards cy where cp.contragentRealEstate.id = :cre and c.contragent.id = :contragent order by c.createTs, cp.contragentRealEstate')

.properties("contract", "cp", "realEstateName", "realEstateAddress", "category", "containerYardCode", "from", "before")

.parameter("contragent", contragent.getId())

.parameter("cre", contractPosition.getContragentRealEstate())

.list()


def h = [:]


for(def item : list){


def cy = []


cal.setTime(item.getValue("from"));

def from = df.format(cal.getTime())

cal.setTime(item.getValue("before"));

def before = df.format(cal.getTime())

cy.push([

"realEstateName":item.getValue("realEstateName"),

"realEstateAddress":item.getValue("realEstateAddress"),

"from":from,

"before":before,

"category":item.getValue("category"),

"containerYardCode":item.getValue("containerYardCode")])

if(h[item.getValue("contract")] == null){

h[item.getValue("contract")] = [(item.getValue("cp").toString()):cy]

}else{

if(h[item.getValue("contract")][item.getValue("cp").toString()]==null){

h[item.getValue("contract")][item.getValue("cp").toString()] = cy

}else{

h[item.getValue("contract")][item.getValue("cp").toString()] += cy

}

}

}


def currentNumberContract = contractPosition.getContract().getNumber()

def currentContract = h[currentNumberContract];

h.remove(currentNumberContract)



def resHistory = []

for(def currentCY : currentContract){

def prevCode = null;

def startDate = currentCY.getValue()['from'].get(0)

def endDate = currentCY.getValue()['before'].get(0)

for(def contracts : h){


if(contracts.getValue().get(currentCY.getKey()) != null){

// log.debug(contracts.getKey())

// log.debug(currentCY.getValue())

// log.debug(contracts.getValue().get(currentCY.getKey()))

// log.debug( currentCY.getValue().equals( contracts.getValue().get( currentCY.getKey() ) ) )

if(!currentCY.getValue().equals( contracts.getValue().get( currentCY.getKey() ) )){

def item = contracts.getValue()[currentCY.getKey()]

if(prevCode.equals(item["containerYardCode"].get(0))){

continue

}else{

prevCode = item["containerYardCode"].get(0)

}

def pos = [:]

// log.debug(item['realEstateName'].get(0))

pos = [

realEstateName:item['realEstateName'].get(0),

cadastralNumber:' -- ',

address:item['realEstateAddress'].get(0),

startFrom:item['from'].get(0),

endBefore:item['before'].get(0),

containerYardNumber:item["containerYardCode"].get(0),

n:'а'

]

if(resHistory.size() == 0){

pos['endBefore'] = startDate

}else{

resHistory.get(resHistory.size()-1)['endBefore'] = item['from'].get(0)

}

def cont = false

for(def itRes : resHistory){

if(itRes['startFrom'] == startDate || itRes['startFrom'] == itRes['endBefore'])cont = true

}

if(pos['startFrom'] == startDate || pos['startFrom'] == pos['endBefore'])cont = true

if(cont)continue

resHistory.push(pos)

}

}


}

}



return resHistory;

}

 
MyTetra Share v.0.65
Яндекс индекс цитирования