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)
ViewRepository vRep = AppBeans.get(ViewRepository.NAME)
//View contractView = vRep.getView(Contract.class, 'contract-print')
//def contract = dataManager.reload(params['contract'],'contract-print')
def r1 = "be725ce9-f41a-9058-4e84-d94f0e91b546"
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)
def contragent = contract.getContragent()
DateFormat df = 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())
props = getProps(contract)
//позиции по договору
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("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;
}
}
def isFact = dataManager.loadValue('select cp.isFactCalculation from rtneo$ContractPosition cp where cp.id = :id', Boolean.class).parameter("id", position.getId()).optional().orElse(false);
//////////////////////
//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
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();
}
}
}
//////////////////////////////////////////
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)
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
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);
ViewRepository vRep = AppBeans.get(ViewRepository.NAME)
//===============================================================================
View cpcyView = vRep.getView(ContractPositionContainerYard.class, "_local");
cpcyView.addProperty("contractPosition", vRep.getView(ContractPosition.class, "contractPosition-calc").addProperty("contract", vRep.getView(Contract.class, "_local")))
cpcyView.addProperty("containerYard", vRep.getView(ContainerYard.class, "_local"))
View contractView = vRep.getView(Contract.class, "_minimal");
contractView.addProperty("createTs")
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
Calendar cal = Calendar.getInstance();
//log.debug("contract - ${contractPosition.getContract().getId()}, cp - ${contractPosition.getId()}, cre - ${contractPosition.getContragentRealEstate().getId()}")
def createTs = dataManager.reload(contractPosition.getContract(), contractView).getCreateTs()
def oldCpcy = dataManager.load(ContractPositionContainerYard.class)
.query('select cpcy from rtneo$ContractPositionContainerYard cpcy where cpcy.contragentRealEstate.id = :cre and not cpcy.createTs>:createTs order by cpcy.contractPosition.contract.createTs desc')
.parameter("createTs", createTs)
.parameter("cre", contractPosition.getContragentRealEstate().getId())
.view(cpcyView)
.list()
def h = [:]
//log.debug(oldCpcy)
def cy = []
Character lit = 'А'
def prevFromDate = null
def prevCode = null
for(def itemOldCpcy : oldCpcy){
def contractOld = itemOldCpcy.getContractPosition().getContract();
//if(contractPosition.getIsFactCalculation()){
//}else{
//continue
//}
if(contractOld.getId() == contractPosition.getContract().getId()){
prevCode = itemOldCpcy.getContainerYard().getCode()
prevFromDate = contractOld.getFrom();
continue
}
if(prevCode.equals(itemOldCpcy.getContainerYard().getCode())){
continue
}else{
prevCode = itemOldCpcy.getContainerYard().getCode()
}
def start = null
if(contractOld.getFrom() != null){
cal.setTime(contractOld.getFrom())
start = df.format(cal.getTime())
}
def end = null
if(prevFromDate != null){
cal.setTime(prevFromDate)
end = df.format(cal.getTime())
}
if(start.equals(end)){
continue
}
def pos = [
realEstateName:itemOldCpcy.getContractPosition().getContragentRealEstate().getRealEstate().getName(),
cadastralNumber:' -- ',
address:itemOldCpcy.getContractPosition().getContragentRealEstate().getRealEstate().getAddress(),
startFrom:start,
endBefore:end,
containerYardNumber:itemOldCpcy.getContainerYard().getCode(),
n:lit++
]
cy.push(pos)
prevCode = itemOldCpcy.getContainerYard().getCode()
prevFromDate = contractOld.getFrom();
}
return cy;
}
//***************************************
//Заполняем шапку
//***************************************
def getProps(Contract contract){
def params = [:]
def bankDataService = AppBeans.get(BankDataSupplierService.NAME)
def companyService = AppBeans.get(CompanyService.NAME)
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
//Получаем реквизиты компании, действующие на момент даты договора
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': df.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' : df.format(contract.getFrom())
]
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'
}
}