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 com.haulmont.cuba.core.app.*;
import com.haulmont.cuba.core.entity.EntitySnapshot;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
/**/
ViewRepository vRep = AppBeans.get(ViewRepository.NAME)
/**/
/**/
//Реквизиты
def props = [:]
//Объекты для первой таблицы
def realEstates = [];
//контейнерные площадки для второй таблицы
def containers = [];
//Результат
def root = [:]
/**/
/**/
//def contract = dataManager.reload(params['contract'],'contract-print')
def r1 = "392c1eb7-574c-4c5a-86d9-6e353007d9f4"
def r2 = "3200f50c-0e8e-b6af-9327-1fb5ce2dc0b9"
def params = [:]
Contract contract = dataManager.load(Contract.class).id(UUID.fromString(r2)).view('contract-print').optional().orElse(null)
DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
Contragent contragent = contract.getContragent()
//Период действия договора
def (String contractFrom, String contractBefore) = getStartEndDate(contract, df)
/**/
/**/
//Заполнили реквизиты
props = fillRequisites(contract, params, df, contractFrom, contragent)
//Получаем все договора из истории
def cpList = getHistoryCP(contract)
//Удаляем перекрывающиеся договора
cpList = checkContractPeriod(cpList)
if(cpList.size() == 0)return null
//Создаем массив с периодами действия договоров
def itemsCP = getItemsCP(cpList)
for(def item : itemsCP){
// _(item)
// List itemsRE = getItemsRE(itemsCP, startCount++, contract)
// for(def item : itemsRE){
// realEstates.push(item)
// }
//
// List itemsContainer = getItemsContainers(itemsCP, itemsRE, startCount, contract, historyContainers)
}
//Создаем колекцию с позициями и датами в разрезе объектов
def itemsRE = getItemsRE(itemsCP, contract)
//Расставляем признаки изменения позиций
checkChange(itemsRE)
////Удаляем не измененные
//removeNoChanged(itemsRE)
//Нумеруем объекты
itemsRE = parseItemsRE(itemsRE, contract)
//Заполняем массив первой таблицы
realEstates = fillRealEstates(itemsRE)
//Создаем колекцию с позициями и датами в разрезе контейнерных площадок
def itemsCY = getItemsCY(itemsRE)
//Заполняем контейнерные площадки для второй таблицы
containers = fillContainers(itemsCY)
for(def item : realEstates){
_(item)
}
/**/
/*
/fill root
*/
//Заполняем реквизиты
private def fillRequisites(Contract contract, HashMap<Object, Object> params, SimpleDateFormat df, String startFrom, Contragent contragent) {
def companyService = AppBeans.get(CompanyService.NAME)
def bankDataService = AppBeans.get(BankDataSupplierService.NAME)
//Получаем реквизиты компании, действующие на момент даты договора
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) {
}
//заполняем шапку
//документ-основание
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' : 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'] = "Степанова Т.А."
return props
}
//Заполняем объекты для первой таблицы
private def fillRealEstates(def itemsRE){
def realEstates = []
for(def item : itemsRE){
def pos = null
if(item["from"].equals("--")){
pos = createREItem(item["position"], item["n"])
}else{
String code = getCYCodesPosition(item["position"])
String codeKGO = getCYCodesKGOPosition(item["position"])
pos = createREItem(item["position"], code, codeKGO, item["n"], item["from"], item["before"])
}
realEstates.add(pos)
}
return realEstates
}
private def fillContainers(def itemsCY){
def list = []
def itemCY = [:]
for(def item : itemsCY){
_(item)
def pos = null
String code = item.getKey()
// for(def itemRE : item.getValue()){
//
// itemCY = [
// "code":code,
// "n":itemRE["n"],
// "from":itemRE["from"],
// "before":itemRE["before"]
// ]
// list.add(itemCY)
//
// }
for(def itemRE : item.getValue()){
def key = code+itemRE["from"]+itemRE["before"]
itemCY.putIfAbsent(key, ["code":code, "n":"", "from":itemRE["from"],"before":itemRE["before"], "cy":null]);
itemCY[key]["n"] +=itemRE["n"]+"<br/>"
itemCY[key]["cy"] = itemRE["cy"]
}
// pos = createCYItem()
}
for(def item : itemCY){
_(item)
}
}
private def getItemsRE(itemsCP, contract){
def itemRE = [:]
for(def item : itemsCP){
for(def itemCP : item["positions"]){
def cre = [:]
itemRE.putIfAbsent(itemCP.getContragentRealEstate().getId(), []);
cre = [
"cre":itemCP.getContragentRealEstate(),
"n":"",
"from":item["from"],
"before":item["before"],
"changeCY": false,
"changeRE": false,
"position":itemCP
]
itemRE[itemCP.getContragentRealEstate().getId()].add(cre)
}
}
return itemRE
}
private def getItemsCY(def itemsRE){
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy")
def listCY = [:]
for(def item : itemsRE){
if(item["from"].equals("--"))continue
for(def itemCPCY : item["position"].getContainerYards()){
def cre = [:]
listCY.putIfAbsent(itemCPCY.getContainerYard().getCode(), []);
cre = [
"n":item["n"],
"from":item["from"],
"before":df.format(item["before"]),
"cy":itemCPCY.getContainerYard()
]
listCY[itemCPCY.getContainerYard().getCode()].add(cre)
}
}
return listCY
}
/*
/functions
*/
//**************************************************************
//Получить историю позиции договора
//**************************************************************
def getHistoryCP(Contract contract){
DataManager dataManager = AppBeans.get(DataManager.NAME);
EntitySnapshotService entitySnapshotService = AppBeans.get(EntitySnapshotService.NAME);
def listSnapshotHistory = dataManager.load(SnapshotHistory.class)
.query('select s from rtneo$SnapshotHistory s where s.contragent.id = :contragent and s.contract.accepted = true or s.contract.id = :contractId order by s.contract.createTs asc')
.parameter("contragent", contract.getContragent().getId())
.parameter("contractId", contract.getId())
.view("_local")
.list();
def cpH = []
for(def snapshotHistory : listSnapshotHistory){
def cp = [:]
def entitySnapshot = dataManager.load(EntitySnapshot.class).id(snapshotHistory.getSnapshot()).optional().orElse(null)
Contract entity = entitySnapshotService.extractEntity(entitySnapshot)
cp.putIfAbsent(entity.getNumber(), ["contract":entity, "positions":[]]);
for(ContractPosition cpItem : entity.getPositions()){
cp[entity.getNumber()]["positions"].add(cpItem)
}
cpH.add(cp)
}
return cpH;
}
//Удаляем перекрывающиеся договора
private def checkContractPeriod(def cpList){
def sortCPList = []
def prevDate = null
def prevContract = null
for(def item : cpList.reverse()){
if(prevDate != item.values()["contract"].get(0).getFrom() && prevContract != item.values()["contract"].get(0).getNumber())sortCPList.add(item)
prevDate = item.values()["contract"].get(0).getFrom()
prevContract = item.values()["contract"].get(0).getNumber()
}
return sortCPList.reverse()
}
//Создаем колекцию с позициями и датами в разрезе объектов
/* def tmp["cre.id"] = [
// "cre"
// "from"
// "before"
// "changeCY"
// "changeRE"
// "position"
// ]
*/
def getItemsCP(List<ContractPosition> cpList){
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy")
Calendar cal = Calendar.getInstance()
def itemsCP = []
for(def item : cpList){
def cp = [
"contract":item.values()["contract"].get(0),
"from":item.values()["contract"].get(0).getFrom(),
"before":item.values()["contract"].get(0).getBefore(),
"positions":item.values()["positions"].get(0)
]
if(itemsCP.size() != 0){
cal.setTime(item.values()["contract"].get(0).getFrom())
cal.add(Calendar.DATE, -1)
itemsCP[itemsCP.size()-1]["before"] = cal.getTime()
}
itemsCP.add(cp)
}
return itemsCP
}
//Расставляем признаки изменения позиций
private checkChange(def itemsCP){
for(def item : itemsCP){
def prevCP = null
for(def itemCP : item.getValue()){
itemCP["changeCY"] = changeCY(itemCP["position"], prevCP)
itemCP["changeRE"] = changeRE(itemCP["position"], prevCP)
prevCP = itemCP["position"]
}
}
}
//Устанавливаем нумерацию
private def parseItemsRE(itemsRE, contract){
def listRE = []
def n = ""
char nChar = 'А'
def nInt = BigDecimal.valueOf(1.0)
def prev = [
"nChar":null,
"nInt":null
]
for(def item : itemsRE){
for(def itemCP : item.getValue()){
if(!itemCP["changeCY"] && !itemCP["changeRE"]){
listRE.get(listRE.size()-1)['before'] = itemCP["before"]
continue
}
if(itemCP["changeCY"] && !itemCP["changeRE"]){
if(nChar == 'А'){
def tmpCyItem = listRE.get(listRE.size()-1).clone()
listRE.get(listRE.size()-1)['from'] = "--"
listRE.get(listRE.size()-1)['before'] = "--"
listRE.get(listRE.size()-1)['changeRE'] = "--"
listRE.get(listRE.size()-1)['changeCY'] = "--"
// listRE.get(listRE.size()-1)['position'] = "--"
tmpCyItem['n'] = tmpCyItem['n'].toString()+nChar++
listRE.push(tmpCyItem)
}
n = (prev["nInt"].toString())+(nChar++)
}
if(itemCP["changeRE"]){
nChar = 'А'
if(contract.getIsFactCalculation() != null && contract.getIsFactCalculation()) nInt +=0.1
n=nInt
}
itemRE = [
"cre":itemCP["cre"],
"n":n,
"from":itemCP["from"],
"before":itemCP["before"],
"changeCY":itemCP["changeCY"],
"changeRE":itemCP["changeRE"],
"position":itemCP["position"],
]
listRE.add(itemRE)
//Устанавливаем предыдущие значения
prev["nInt"] = nInt
prev["nChar"] = nChar
}
listRE.get(listRE.size()-1)['before'] = contract.getBefore()
}
return listRE
}
//Создание позиции для первой таблицы
private def createREItem(ContractPosition cp, String code, String codeKGO, Object n, Date from, Date before){
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy")
// def kgo = false
//
// for(def container : cpcy.getContainerYard().getContainers()){
// BigDecimal volume = container.getType()?.getVolume() == null ? BigDecimal.ZERO : container.getType().getVolume()
// if(volume >= BigDecimal.valueOf(5.0))kgo = true;
// }
def isNull = false
isNull = cp.getContragentRealEstate() == null?true:false
def pos = [
realEstateName:isNull?'':cp.getContragentRealEstate().getRealEstate().getName(),
cadastralNumber:isNull?'':cp.getContragentRealEstate().getRealEstate().getCadastralNumber(),
address:isNull?'':cp.getContragentRealEstate().getRealEstate().getAddress(),
startFrom:df.format(from),
endBefore:df.format(before),
containerYardNumber:code,
containerYardKGONumber: codeKGO,
n:n
]
return pos
}
private def createREItem(ContractPosition cp, Object n){
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy")
// def kgo = false
//
// for(def container : cpcy.getContainerYard().getContainers()){
// BigDecimal volume = container.getType()?.getVolume() == null ? BigDecimal.ZERO : container.getType().getVolume()
// if(volume >= BigDecimal.valueOf(5.0))kgo = true;
// }
def isNull = false
isNull = cp.getContragentRealEstate() == null?true:false
def pos = [
realEstateName:isNull?'':cp.getContragentRealEstate().getRealEstate().getName(),
cadastralNumber:isNull?'':cp.getContragentRealEstate().getRealEstate().getCadastralNumber(),
address:isNull?'':cp.getContragentRealEstate().getRealEstate().getAddress(),
startFrom:"--",
endBefore:"--",
containerYardNumber:"",
containerYardKGONumber: "",
n:n
]
return pos
}
private def createCYItem(){
}
private void getContainersNew(containerYards, isFact, List containers, String startFrom, String endBefore, def n) {
def containerWasteBuff = [:]
def strCodeCP = getCodeCY(containerYards)
for(def containerYard : containerYards){
containerYard = containerYard.getContainerYard()
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' : n,
'code' : key,
'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) < 6.0)) ? 'ТКО' : 'КГО'
]
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
}
}
}
/*
/utils
*/
//Возвращает период действия договора
private List getStartEndDate(contract, SimpleDateFormat df) {
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())
[startFrom, endBefore]
}
//получить дату словами
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 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 getNN(BigDecimal value) {
return value == null ? BigDecimal.ZERO : value;
}
//Проверяем позиции на изменение контейнерной площадки
private Boolean changeCY(ContractPosition cp, ContractPosition prevCP){
if(prevCP == null) return true
def strCode = ""
def prevStrCode = ""
//Нужно отсортировать КП по номеру, перед конкатенацией
for(def item : cp.getContainerYards()){
strCode = strCode+item.getContainerYard().getCode()
}
for(def item : prevCP.getContainerYards()){
prevStrCode = prevStrCode+item.getContainerYard().getCode()
}
if(!strCode.equals(prevStrCode))return true
//Другие проверки
return false
}
//Проверяем позиции на изменение объекта недвижимости
private Boolean changeRE(ContractPosition cp, ContractPosition prevCP){
if(prevCP == null) return true
//Сравниваем кол-во р/е
if(prevCP.getContragentRealEstate().getCalculationAmount() != cp.getContragentRealEstate().getCalculationAmount())return true
//Сравниваем объемы по начислениям
BigDecimal totalVolumePosition = null
for(Accrual accrual : cp.getAccruals()){
totalVolumePosition=getNN(accrual.getAmountBase())
}
BigDecimal prevTotalVolumePosition = null
for(Accrual accrual : prevCP.getAccruals()){
prevTotalVolumePosition=getNN(accrual.getAmountBase())
}
if(!prevTotalVolumePosition.equals(totalVolumePosition))return true
//Другие проверки
if(prevCP.getIsFactCalculation() != cp.getIsFactCalculation())return true
return false
}
//Определяет тип КП, КГО или ТКО
private Boolean isKGO(ContainerYard cy){
for(def item : cy.getContainers()){
if(item.getCount() == null || item.getCount() == 0.0)continue
if(item.getType().getVolume() > new BigDecimal(6.0))return true
}
return false
}
//Получаем коды КП с КГО и ТКО
private def getCYCodesPosition(ContractPosition cp){
//Определяем код КП
def strCodeCP = ""
for(def cpcy : cp.getContainerYards()){
if(!isKGO(cpcy.getContainerYard()))
{strCodeCP = strCodeCP+cpcy.getContainerYard().getCode()+"/"}
}
if(strCodeCP.endsWith("/")){
strCodeCP = strCodeCP.substring(0, strCodeCP.length() - 1)
}
return strCodeCP
}
private def getCYCodesKGOPosition(ContractPosition cp){
//Определяем код КП
def strCodeCP = ""
for(def cpcy : cp.getContainerYards()){
if(isKGO(cpcy.getContainerYard()))
{strCodeCP = strCodeCP+cpcy.getContainerYard().getCode()+"/"}
}
if(strCodeCP.endsWith("/")){
strCodeCP = strCodeCP.substring(0, strCodeCP.length() - 1)
}
return strCodeCP
}
/*
/log
*/
private _(Object obj, String options = ""){
String op = options
if(options.equals("for")){
for(def item : obj){
log(obj)
}
}
if(options.equals("")){
log(obj)
}
}
private log(Object obj){
log.debug(obj)
}