Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.bssys.sbns.dbo.rur.collectionletter
- import com.bssys.sbns.DboConsts
- import com.bssys.sbns.crypto.SignService
- import com.bssys.sbns.dbo.audit.AuditDocumentUtils
- import com.bssys.sbns.dbo.clientadmin.*
- import com.bssys.sbns.dbo.common.*
- import com.bssys.sbns.dbo.common.client.RAccountScroller
- import com.bssys.sbns.dbo.common.correspondent.CorrespondentScroller
- import com.bssys.sbns.dbo.common.officials.Officials
- import com.bssys.sbns.dbo.common.orgselect.OrgSelectUtils
- import com.bssys.sbns.dbo.common.predicates.CurrentUserOrgPredicate
- import com.bssys.sbns.dbo.common.predicates.upc.CurrentUserOrgUPCType
- import com.bssys.sbns.dbo.permission.DBOPermission
- import com.bssys.sbns.dbo.rur.payment.PaymentPurposeScroller
- import com.bssys.sbns.dbo.rur.payment.R030Utils
- import com.bssys.sbns.dbo.rur.payment.R030VatCalculationRule
- import com.bssys.sbns.dbo.security.DBOAccessService
- import com.bssys.sbns.dbo.services.DboConfigService
- import com.bssys.sbns.dbo.utils.AccountByDefaultUtils
- import com.bssys.sbns.dbo.utils.AccountUtils
- import com.bssys.sbns.dbo.utils.CounterUtils
- import com.bssys.sbns.dbo.utils.DocUtils
- import com.bssys.sbns.entity.BIC
- import com.bssys.sbns.entity.Correspondent
- import com.bssys.sbns.entity.PaymentKind
- import com.bssys.sbns.hibernate.HibernateTemplate
- import com.bssys.sbns.licence.LicenceService
- import com.bssys.sbns.metadata.Const
- import com.bssys.sbns.metadata.MetaDataService
- import com.bssys.sbns.metadata.common.ColumnType
- import com.bssys.sbns.metadata.form.FormBaseScript
- import com.bssys.sbns.security.SessionManager
- import com.bssys.sbns.security.access.UPCFormValueContext
- import com.bssys.sbns.services.CounterService
- import com.bssys.sbns.services.DigestService
- import com.bssys.sbns.services.WidgetCreator
- import com.bssys.sbns.state.FormFieldState
- import com.bssys.sbns.state.GridRowData
- import com.bssys.sbns.statemachine.StateMachineService
- import com.bssys.sbns.userexit.*
- import com.bssys.sbns.utils.*
- import com.bssys.sbns.validation.ValidationError
- import com.bssys.sbns.validation.ValidationResult
- import org.apache.commons.lang.StringUtils
- import org.hibernate.criterion.DetachedCriteria
- import org.hibernate.criterion.Restrictions
- import java.util.regex.Pattern
- import static com.bssys.sbns.dbo.clientadmin.OrgCopyService.Fields.*
- import static com.bssys.sbns.localization.I18n.i18n
- import static com.bssys.sbns.userexit.BeanContextDbo.lawChangeConfigService
- import static com.bssys.sbns.userexit.BeanContextDbo.orgCopyService
- class R050EditForm extends FormBaseScript {
- public static BigDecimal DEFAULT_VAT = 18
- public static final BigDecimal VAT20 = 20
- public static BigDecimal MIN_SUM_WITH_ADDRESS = 15000
- public static String MIN_SUM_ACCOUNT = "30111"
- protected static String PARAM_COPY_ORG_NAME = "copyOrgName"
- protected static String PARAM_COPY_ORG_DEF_VAL = "copy"
- public static INN_IGNORE_DRAWER_STATUSES = ["03", "05", "19", "20", "22", "26"]
- public static List<String> getInnIgnoreDrawerStatus() {
- return ["03", "05", "19", "20", "22", "26"]
- }
- static final String SAVE_ACCOUNT_AS_DEFAULT = "_saveAccountAsDefault"
- @Override
- def config() {
- form title: "Инкассовое поручение",
- enhancedSecurity: true,
- permissionTitle: "Инкассовое поручение (клиент)",
- restId: 'client/rur/collectionLetters',
- helpTopic: "appCorreqts.winCollectionLetter.html",
- width: 75,
- documentTypeDesc: R050Desc.name,
- toolbar: {
- toolbarButton DboConsts.SYS_ACTION_SAVE, DboConsts.SYS_ACTION_SAVE_NO_CLOSE, DboConsts.SYS_ACTION_SAVE_CREATE
- toolbarButton DboConsts.SYS_ACTION_CHECK
- DocUtils.defineSaveAndSignButton(this, R050Desc, R050NotificationDigest)
- DocUtils.definePrintButtonEditForm(this, R050Report)
- toolbarButton DboConsts.SYS_ACTION_HELP, DboConsts.SYS_ACTION_CLOSE
- },
- extraFields: ["orgName", "orgId", "orgType", "accountId", "receiverBankName", "taxPeriodDay",
- "payerBankName", "payerBankCity", "payerBankSettlementType", "receiverBankCity", "receiverBankSettlementType",
- "branch"],
- fields: {
- tab id: "mainTab",
- label: "Основные поля",
- fields: {
- standardLayout id: "mainLayout", fields: {
- textField id: "docNumber",
- label: "Номер",
- width: 8,
- disabled: false,
- maxLength: 7,
- tooltip: "Номер инкассового поручения"
- dateField id: "docDate",
- disabled: false,
- label: "Дата",
- attachFlag: true,
- tooltip: "Дата составления инкассового поручения"
- label id: "blankLabel",
- label: ""
- selectField id: "paymentKind",
- label: " Вид платежа",
- refScroller: PaymentKindScroller,
- refField: "kind",
- width: 8,
- tooltip: "Способ отправки документа",
- defValue: "электронно",
- onChange: { FormFieldSubmitContext ctx ->
- if (ctx.isFormChanged()) {
- updatePaymentCode(ctx)
- }
- }
- deck id: "paymentCodeDeck",
- fields: {
- deckPane id: "isPaymentCode",
- fields: {
- textField id: "paymentCode",
- width: 2,
- disabled: true,
- tooltip: "Код вида платежа"
- }
- }
- selectField id: "drawerStatus",
- label: "Пок. статуса",
- tooltip: "Показатель статуса (101)",
- refScroller: PaymentTaxStatusCScroller,
- refField: "code",
- width: 17,
- onChange: { FormFieldSubmitContext ctx, BankUtils bankUtils ->
- onRequireTaxFieldsEnablingDisabling(ctx)
- if (ctx.isFormChanged()) {
- onSetEnabledINN(ctx);
- onRequireTaxFieldsChange(ctx.fields, true)
- receiverDataOnDrawerStatusChange(ctx, bankUtils)
- onRequirePayerNameEnable(ctx, bankUtils)
- }
- }
- }
- tableLayout resizableColumns: [1],
- fields: {
- label ""
- label label: "",
- newCell: true
- label label: "Сумма"
- moneyField id: "documentSum",
- width: 17,
- newCell: true,
- tooltip: "Сумма платежа",
- maxLength: 18,
- scale: 2,
- onChange: { FormFieldSubmitContext ctx, BankUtils bankUtils ->
- if (ctx.isFormChanged()) {
- onRequireVatRecount(ctx)
- }
- }
- label label: "",
- newCell: true,
- newLine: true
- label label: "",
- newCell: true
- label "НДС"
- moneyField id: "vatSum",
- disabled: true,
- width: 17,
- newCell: true,
- maxLength: 18,
- scale: 2,
- tooltip: "Величина НДС",
- onChange: { FormFieldSubmitContext ctx, BankUtils bankUtils ->
- if (ctx.isFormChanged()) {
- onRequireVatRecount(ctx)
- }
- }
- label label: "",
- newCell: true,
- newLine: true
- label label: "",
- newCell: true
- numericField id: "vatRate",
- secondaryLabel: "%",
- width: 4,
- maxLength: 6,
- newCell: true,
- scale: 2,
- tooltip: "Ставка НДС в процентах",
- onChange: { FormFieldSubmitContext ctx, BankUtils bankUtils ->
- if (ctx.isFormChanged()) {
- onRequireVatRecount(ctx)
- }
- }
- selectField id: "vatCalculationRule",
- items: {
- // Отфильтровываем синтетическое значение, нужное только для рассчетов
- R030VatCalculationRule.values().findAll({ rule ->
- !rule.equals(R030VatCalculationRule.VatAddNoChange)
- }).each { rule ->
- item id: rule.name(), label: rule.name
- }
- },
- width: 11,
- tooltip: "Способ расчета НДС",
- onChange: { FormFieldSubmitContext ctx, BankUtils bankUtils ->
- if (ctx.isFormChanged()) {
- onRequireVatRecount(ctx)
- }
- }
- }
- separator "Плательщик"
- tableLayout id: "payerTable", resizableColumns: [1],
- fields: {
- textField id: "payerINN",
- label: "ИНН/КИО",
- tooltip: "ИНН или КИО плательщика",
- refField: "inn",
- refScroller: CorrespondentScroller,
- refSearch: true,
- attachFlag: true,
- onRefSelect: { FormRefSelectContext ctx, BankUtils bankUtils ->
- onCorrespondentSelect(ctx.currentRow, ctx.fields, ctx.hibernateTemplate, bankUtils)
- fillPayerReq(ctx.fields, ctx.entity, bankUtils)
- onRequirePayerNameEnable(ctx, bankUtils)
- },
- maxLength: 12,
- width: 12,
- allowedChars: Const.ONLY_DIGITS
- newLine: true
- miniButton icon: "ref_add.png",
- tooltip: "Добавить в справочник корреспондентов",
- attachFlag: true,
- onChange: addNewOfficials
- textField id: "payerKPP",
- label: "КПП",
- tooltip: "КПП плательщика (102) или '0'",
- maxLength: 9,
- width: 9
- textField id: "payerName",
- tooltip: "Наименование плательщика. В начале обязательно должно содержать наименование по умолчанию. После него может содержать информацию об адресе плательщика.",
- width: 40,
- height: 4,
- rowSpan: 2,
- newLine: true,
- maxLength: 160
- label id: "afterPayerName", label: "",
- newLine: true
- label "Сч. №"
- textField id: "payerAccount",
- refField: "account",
- tooltip: "Счет плательщика",
- refScroller: CorrespondentScroller,
- refSearch: true,
- width: 17,
- overwriteInput: true,
- mask: "#####.###.#.###########",
- newCell: true,
- onRefInit: { FormRefInitContext<R050> ctx ->
- ctx.softFilter = ["org.id=:orgId", [orgId: ctx.entity.orgId]]
- },
- onRefSelect: { FormRefSelectContext ctx, BankUtils bankUtils ->
- onCorrespondentSelect(ctx.currentRow, ctx.fields, ctx.hibernateTemplate, bankUtils)
- fillPayerReq(ctx.fields, ctx.entity, bankUtils)
- onRequirePayerNameEnable(ctx, bankUtils)
- }
- label label: "Банк плательщика",
- newLine: true
- textField id: "payerBankName",
- tooltip: "Наименование и местонахождение Банка плательщика",
- disabled: true,
- width: 40,
- height: 4,
- rowSpan: 2,
- field: null,
- newLine: true
- label label: "",
- newCell: true
- label label: "БИК"
- textField id: "payerBankBic",
- tooltip: "БИК Банка плательщика",
- refField: "bic",
- refScroller: BICScroller,
- refSearch: true,
- disabled: false,
- width: 10,
- newCell: true,
- attachFlag: true,
- onRefSelect: { FormRefSelectContext ctx, BankUtils bankUtils ->
- if (ctx.currentRow) {
- BIC bic = ctx.hibernateTemplate.get(BIC, ctx.currentRow)
- fillPayerReq(ctx.fields, ctx.entity, bankUtils)
- ctx.fields.payerBankCorrAccount.value = bic.corrAccount
- }
- }
- label label: "",
- newCell: true,
- newLine: true
- label label: "Сч. №"
- textField id: "payerBankCorrAccount",
- tooltip: "Корсчет Банка плательщика",
- disabled: true,
- width: 17,
- overwriteInput: true,
- mask: "#####.###.#.###########",
- newCell: true
- }
- separator "Получатель"
- tableLayout resizableColumns: [1],
- fields: {
- label label: "",
- newLine: true
- textField id: "receiverINN",
- label: "ИНН/КИО",
- tooltip: "ИНН/КИО получателя",
- disabled: true,
- attachFlag: true,
- maxLength: 12,
- width: 12
- selectField id: "receiverKPP",
- label: "КПП",
- tooltip: "КПП получателя (102) или '0'",
- maxLength: 9,
- strict: false,
- width: 9,
- items: {},
- onChange: { FormFieldSubmitContext ctx ->
- if (ctx.isFormChanged()) {
- //При изменении КПП добавляем поле не из списка в список
- //Иначе при сабмите формы оно пропадает
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- fillReceiverKppList(ctx.fields, org)
- }
- }
- label label: "", newCell: true
- label "УИП "
- textField id: "code",
- tooltip: "УИП",
- maxLength: 25,
- width: 17,
- newCell: true
- textField id: "receiverName",
- tooltip: "Наименование получателя",
- width: 40,
- height: 4,
- rowSpan: 2,
- maxLength: 160,
- newLine: true
- label label: "",
- newCell: true
- label "Сч. №"
- textField id: "receiverAccount",
- refField: "account",
- tooltip: "Счет получателя",
- refScroller: RAccountScroller,
- refSearch: true,
- onRefInit: { FormRefInitContext<R050> ctx ->
- ctx.softFilter << ["org.id=:orgId and accountState=:accountState",
- [orgId: ctx.entity.orgId, accountState: "OPEN"]]
- ctx.softFilter << ["accountType.shortName like 'р/с'"]
- // Передадим имя услуги, чтобы можно было выбрать только счета,
- // по которым предоставляется данная услуга.
- ctx.refParams.serviceName = R050Desc.name
- },
- width: 17,
- overwriteInput: true,
- mask: "#####.###.#.###########",
- newCell: true,
- onRefSelect: { FormRefSelectContext<R050> ctx, BankUtils bankUtils ->
- if (ctx.currentRow) {
- ctx.formChangedByField = false
- Account account = ctx.hibernateTemplate.get(Account, ctx.currentRow)
- if (account) {
- ctx.entity.accountId = account.id
- }
- onRequirePayerBankChange(ctx.fields as Map, ctx.entity, bankUtils,
- ctx.hibernateTemplate, ctx.currentRow, ctx as Map)
- }
- },
- onChange: { FormFieldSubmitContext<R050> ctx, BankUtils bankUtils ->
- if (ctx.formChangedByField) {
- onRequirePayerBankChange(ctx.fields as Map, ctx.entity, bankUtils,
- ctx.hibernateTemplate, null, ctx as Map)
- }
- }
- miniButton id: SAVE_ACCOUNT_AS_DEFAULT,
- icon: 'gear_add.png',
- tooltip: 'Сохранить как счет по умолчанию',
- attachFlag: true,
- onChange: { FormFieldSubmitContext<R050> ctx,
- MetaDataService metaDataService ->
- if (ctx.isFormChanged()) {
- if (ctx.entity.orgId) {
- def docDesc = metaDataService.findDesc(DocumentTypeDesc, R050Desc.name)
- String accId = StringUtils.isBlank(ctx.fields.payerAccount.value) ? null : ctx.entity.accountId
- ctx.execute AccountByDefaultUtils.updateDefaultAccount.curry(
- ctx.entity.orgId,
- R050Desc.name,
- accId
- )
- def msg = accId == null ? i18n('Счет по умолчанию для документа "#1#" сброшен', docDesc.getName()) :
- i18n('Счет "#1#" сохранен в качестве счета по умолчанию для документа "#2#"',
- (ctx.hibernateTemplate.get(Account, accId) as Account).account,
- docDesc.getName()
- )
- ctx.widgetCreator.showInformMessage(
- msg,
- i18n('Счет по умолчанию')
- )
- }
- }
- }
- label label: "",
- newLine: true
- label "Вид оп."
- textField id: "operationType",
- tooltip: "Вид операции",
- width: 3,
- newCell: true,
- disabled: true
- textField id: "paymentPriority",
- label: "Очер. пл.",
- tooltip: "Очередность платежа",
- disabled: false,
- refScroller: PaymentPriorityCScroller,
- refField: "code",
- width: 5,
- maxLength: 2
- label label: "Банк получателя",
- id: "recBankLabel",
- newLine: true
- textField id: "receiverBankName",
- tooltip: "Наименование и местонахождение Банка получателя",
- disabled: true,
- width: 40,
- newLine: true,
- height: 4,
- rowSpan: 2,
- field: null
- label label: "",
- newCell: true
- label "БИК"
- textField id: "receiverBankBic",
- tooltip: "БИК Банка получателя",
- disabled: true,
- maxLength: 9,
- width: 12,
- newCell: true
- label label: "",
- newCell: true,
- newLine: true
- label "Сч. №"
- textField id: "receiverBankCorrAccount",
- tooltip: "Корсчет Банка получателя",
- disabled: true,
- width: 17,
- overwriteInput: true,
- mask: "#####.###.#.###########",
- newCell: true
- }
- separator "Назначение платежа"
- standardLayout fields: {
- textField id: "paymentPurpose",
- tooltip: "Назначение платежа",
- maxLength: 210,
- height: 4,
- refScroller: PaymentPurposeScroller,
- refField: "purpose",
- onRefInit: { FormRefInitContext<R050> ctx ->
- ctx.softFilter = ["org.id=:orgId", [orgId: ctx.entity.orgId]]
- }
- }
- separator id: "budgetpayment",
- label: "Бюджетный платеж"
- tableLayout fields: {
- label label: "КБК",
- refLinkFor: "cbc"
- label label: "ОКТМО",
- newCell: true
- label label: "Осн. плт.",
- newCell: true
- selectField id: "taxOrCustoms",
- items: {
- item id: "Налог. период"
- item id: "Код тамож. органа"
- },
- tooltip: "Основание платежа",
- width: 12,
- newCell: true,
- onChange: { FormFieldSubmitContext ctx ->
- if (ctx.isFormChanged()) {
- ctx.fields.taxPeriodDeck.value = isTaxPeriod(ctx) ? "taxPeriodPanel1" : "taxPeriodPanel2"
- }
- }
- label label: "Ном. док.",
- newCell: true
- label label: "Дата док.",
- newCell: true
- label label: "Тип плт.",
- newCell: true
- textField id: "cbc",
- refField: "code",
- tooltip: "Код бюджетной классификации (1012212112) или '0'",
- refScroller: CBCScroller,
- width: 14,
- maxLength: 20,
- allowedChars: Const.ONLY_DIGITS,
- newLine: true
- textField id: "ocato",
- tooltip: "Указание кода ОКТМО обязательно при платежах на счета 40101. Для таможенных платежей допустимо указание значения \"0\"",
- width: 7,
- newCell: true,
- maxLength: 11
- selectField id: "payReason",
- tooltip: "Показатель основания платежа (106) или '0'",
- refScroller: PaymentReasonCScroller,
- refField: "code",
- width: 4,
- newCell: true
- deck id: "taxPeriodDeck",
- newCell: true,
- fields: {
- deckPane id: "taxPeriodPanel1",
- fields: {
- selectField id: "taxPeriodDay1",
- field: null,
- tooltip: "Показатель налогового периода (107): код или число даты или '0'",
- refScroller: TaxPeriodCScroller,
- refField: "code",
- width: 4,
- strict: false,
- maxLength: 2
- textField id: "taxPeriodMonth",
- tooltip: "Показатель налогового периода (107): код или месяц даты",
- width: 3,
- maxLength: 2
- textField id: "taxPeriodYear",
- tooltip: "Показатель налогового периода (107): год даты",
- width: 4,
- maxLength: 4,
- attachFlag: true
- }
- deckPane id: "taxPeriodPanel2",
- fields: {
- textField id: "taxPeriodDay2",
- tooltip: "Код таможенного органа",
- field: null,
- width: 10,
- maxLength: 8
- }
- }
- textField id: "taxDocNumber",
- tooltip: "Показатель номера документа (108) или '0'",
- width: 8,
- newCell: true,
- maxLength: 15
- textField id: "docDateDay",
- tooltip: "Показатель даты документа (109): число даты или '0'",
- width: 3,
- newCell: true,
- maxLength: 2
- textField id: "docDateMonth",
- tooltip: "Показатель даты документа (109): месяц даты",
- width: 3,
- attachFlag: true,
- maxLength: 2
- textField id: "docDateYear",
- tooltip: "Показатель даты документа (109): год даты",
- width: 4,
- attachFlag: true,
- maxLength: 4
- label ""
- selectField id: "chargeType",
- tooltip: "Показатель типа платежа (110) или '0'",
- refScroller: PaymentTypeCScroller,
- refField: "code",
- width: 10,
- newCell: true
- }
- }
- tab id: "infoTab",
- label: "Информация из банка",
- fields: {
- standardLayout fields: {
- dateField id: "bankAcceptDate",
- label: "Дата принятия/отказа",
- tooltip: "Дата принятия/отказа",
- disabled: true,
- newLine: true
- dateField id: "operationDate",
- label: "Списано со счета плательщика",
- tooltip: "Дата списания со счета плательщика",
- disabled: true
- dateField id: "deliveredTime",
- label: "Поступило в Банк плательщика",
- tooltip: "Дата поступления в банк плательщика",
- disabled: true,
- newLine: true
- dateField id: "queueDate",
- label: "Дата помещения в картотеку",
- tooltip: "Дата помещения в картотеку",
- disabled: true
- textField id: "bankMessageAuthor",
- label: "Исполнитель",
- tooltip: "Исполнитель",
- newLine: true,
- disabled: true
- }
- separator "Частичные платежи"
- label id: "partPaymentsBlankLabel",
- label: "",
- newLine: true
- grid id: "partPayments",
- columns: {
- column id: "strNum",
- label: "№ част. платежа",
- type: ColumnType.NUMERIC,
- width: 10
- column id: "orderNumber",
- label: "Номер платежного ордера",
- type: ColumnType.NUMERIC,
- width: 15
- column id: "orderDate",
- label: "Дата платежного ордера",
- type: ColumnType.DATE,
- width: 15
- column id: "partPaymentSum",
- label: "Сумма частичного платежа",
- type: ColumnType.MONEY,
- width: 15
- column id: "paymentBalance",
- label: "Сумма остатка платежа",
- type: ColumnType.MONEY,
- width: 15
- }
- label id: "bankMessageBlankLabel",
- label: "",
- newLine: true
- textField id: "bankMessage",
- vertical: true,
- label: "Сообщение из банка",
- tooltip: "Отметки Банка плательщика",
- disabled: true,
- height: 10,
- newLine: true
- }
- },
- init: { FormInitContext<R050> ctx, DboConfigService configService ->
- ctx.entity.printed = false
- if (!DocUtils.isSavedForm(ctx)) {
- ctx.buttons[DboConsts.SYS_ACTION_PRINT].visible = false
- }
- ctx.fields.paymentCodeDeck.value = "isPaymentCode";
- updatePaymentCode(ctx);
- def defaultAccountEnabled = configService.getEffectiveConfiguration(R050Service.R050_DEFAULT_ACCOUNT_ENABLED)
- ctx.fields[SAVE_ACCOUNT_AS_DEFAULT].disabled =
- ctx.operation == WidgetCreator.FormOperation.SHOW ||
- !defaultAccountEnabled || ctx.fields.payerAccount.disabled
- ctx.execute DocUtils.disableSaveAndSignButton.curry(R050Desc)
- appendStateToTitle(ctx)
- },
- createAfter: { FormAfterContext ctx, BankUtils bankUtils, SignService signService, DBOAccessService accessService,
- LicenceService licenceService ->
- if (licenceService.checkLicenceFeature(R050LicenceFeature.COLLECTION_LETTER_COUNT)) {
- ctx.addCriticalError i18n("Произошла ошибка лицензирования, невозможно сохранить документ. Код причины: 0891. Обратитесь к администратору")
- }
- R050 doc = (R050) ctx.entity;
- List<Account> accounts = accessService.getAvailableAccounts()
- for (Account account : accounts) {
- if ((account.account == doc.payerAccount) && (account.bankBic == doc.payerBankBic)) {
- doc.accountId = account.id
- break;
- }
- }
- doc.signCollection = signService.createSignCollection(R050SignDigest.name)
- ctx.execute CounterUtils.updateYearCurrent.curry(DboConsts.R050_COUNTER_NAME, doc.orgId, doc.docNumber)
- },
- createBefore: { FormInitContext ctx, BankUtils bankUtils, DBOAccessService accessService ->
- Org org = ctx.execute(OrgSelectUtils.callOrgTypedServicedSelectForm.curry(OrganisationType.JURIDICAL, R050Desc.name)) as Org
- R050 doc = (R050) ctx.entity;
- doc.orgId = org.id
- doc.orgType = org.organisationType
- doc.orgName = org.name
- ctx.fields.docNumber.value = ctx.execute CounterUtils.generateYearNext.curry(DboConsts.R050_COUNTER_NAME, org.id)
- Branch branch = bankUtils.getBranchByOrgServices(org, null)
- ctx.fields.docDate.value = bankUtils.getBranchCurrentDate(branch)
- doc.branch = branch
- if (ctx.fields.paymentKind.items.rowId.contains("электронно")) {
- ctx.fields.paymentKind.value = "электронно"
- updatePaymentCode(ctx)
- }
- ctx.fields.receiverName.value = org.name
- ctx.fields.receiverINN.value = org.inn
- ctx.fields.receiverKPP.value = org.defaultKpp?.kpp
- ctx.fields.vatRate.value = lawChangeConfigService.isVAT2019(R030Utils.getTimeZoneByOrg(ctx.entity.orgId, ctx.hibernateTemplate)) ?
- VAT20 : DEFAULT_VAT
- ctx.fields.vatCalculationRule.value = R030VatCalculationRule.Vat1.name()
- ctx.fields.operationType.value = "06"
- initReceiverAccount(accessService, doc, ctx, bankUtils)
- onRequireTaxFieldsEnablingDisabling(ctx)
- onRequireTaxFieldsChange(ctx.fields)
- fillReceiverKppList(ctx.fields, org)
- onRequireVatEnable(ctx)
- },
- editBefore: { FormInitContext<R050> ctx, BankUtils bankUtils ->
- if (isTaxPeriod(ctx)) {
- ctx.fields.taxPeriodDay1.value = ctx.entity.taxPeriodDay
- ctx.fields.taxPeriodDeck.value = "taxPeriodPanel1"
- } else {
- ctx.fields.taxPeriodDay2.value = ctx.entity.taxPeriodDay
- ctx.fields.taxPeriodDeck.value = "taxPeriodPanel2"
- }
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- if (ctx.operation != WidgetCreator.FormOperation.SHOW && !isBudgetInn(ctx) && (org != null && !org.federalTreasuryBody) && !(ctx.fields.drawerStatus.value in getInnIgnoreDrawerStatus())) {
- ctx.fields.receiverINN.value = org?.inn
- }
- String payerBankBic = ctx.fields.payerBankBic.value
- if (payerBankBic) {
- def payerBankInfo = bankUtils.getBankInfo(payerBankBic)
- if (payerBankInfo) {
- ctx.fields.payerBankName.value = bankUtils.getBankFullName(
- ctx.entity.payerBankName ?: payerBankInfo.get(BankUtils.BANK_NAME),
- ctx.entity.payerBankSettlementType ?: payerBankInfo.get(BankUtils.BANK_TNP),
- ctx.entity.payerBankCity ?: payerBankInfo.get(BankUtils.BANK_CITYORIG),
- )
- }
- }
- fillReceiverKppList(ctx.fields, org)
- String receiverBankBic = ctx.fields.receiverBankBic.value
- if (receiverBankBic) {
- def receiverBankInfo = bankUtils.getBankInfo(receiverBankBic)
- if (receiverBankInfo) {
- ctx.fields.receiverBankCorrAccount.value = receiverBankInfo.get(BankUtils.BANK_CORRACCOUNT)
- ctx.fields.receiverBankName.value = receiverBankInfo.get(BankUtils.BANK_FULLNAME)
- ctx.fields.receiverBankName.value = bankUtils.getBankFullName(
- ctx.entity.receiverBankName ?: receiverBankInfo.get(BankUtils.BANK_NAME),
- ctx.entity.receiverBankSettlementType ?: receiverBankInfo.get(BankUtils.BANK_TNP),
- ctx.entity.receiverBankCity ?: receiverBankInfo.get(BankUtils.BANK_CITYORIG),
- )
- } else {
- ctx.fields.receiverBankCorrAccount.value = null
- ctx.fields.receiverBankName.value = null
- }
- }
- onSetEnabledINN(ctx)
- onRequirePayerNameEnable(ctx, bankUtils)
- if (ctx.operation != WidgetCreator.FormOperation.SHOW) {
- def defaultVatRate = lawChangeConfigService.isVAT2019(R030Utils.getTimeZoneByOrg(ctx.entity.orgId, ctx.hibernateTemplate)) ?
- VAT20 : DEFAULT_VAT
- if (ctx.fields.vatRate.value != defaultVatRate) {
- onRequireVatRecount(ctx, defaultVatRate, false)
- } else {
- onRequireVatEnable(ctx)
- }
- }
- },
- copyBefore: { FormInitContext<R050> ctx, BankUtils bankUtils, DboConfigService configService ->
- orgCopyService.copyValues(ctx.entity, ctx.fields, this.mapping)
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- fillReceiverKppList(ctx.fields, org)
- if (!org.orgKpp.find { OrgKpp kpp -> kpp.kpp == ctx.entity.receiverKPP }) {
- ctx.fields.receiverKPP.value = null
- }
- ctx.entity.orgName = org.name
- def branch = bankUtils.getBranchByOrgServices(org, null)
- ctx.fields.docDate.value = bankUtils.getBranchCurrentDate(branch)
- ctx.fields.docNumber.value = ctx.execute CounterUtils.generateYearNext.curry(DboConsts.R050_COUNTER_NAME, org.id)
- ctx.fields.paymentCodeDeck.value = "isPaymentCode"
- updatePaymentCode(ctx)
- if (org) {
- ctx.fields.receiverName.value = org.name
- ctx.fields.receiverINN.value = org.inn
- }
- if (isTaxPeriod(ctx)) {
- ctx.fields.taxPeriodDay1.value = ctx.entity.taxPeriodDay
- ctx.fields.taxPeriodDeck.value = "taxPeriodPanel1"
- } else {
- ctx.fields.taxPeriodDay2.value = ctx.entity.taxPeriodDay
- ctx.fields.taxPeriodDeck.value = "taxPeriodPanel2"
- }
- // найдем по БИК текущее наименования банка
- String payerBankBic = ctx.fields.payerBankBic.value
- if (payerBankBic) {
- def payerBankInfo = bankUtils.getBankInfo(payerBankBic)
- if (payerBankInfo) {
- ctx.fields.payerBankName.value = bankUtils.getBankFullName(
- ctx.entity.payerBankName ?: payerBankInfo.get(BankUtils.BANK_NAME),
- ctx.entity.payerBankSettlementType ?: payerBankInfo.get(BankUtils.BANK_TNP),
- ctx.entity.payerBankCity ?: payerBankInfo.get(BankUtils.BANK_CITYORIG),
- )
- } else {
- ctx.fields.payerBankName.value = ctx.entity.payerBankName
- }
- }
- // Заполним руками, т.к. там стоит "field: null"
- ctx.fields.receiverBankName.value = ctx.entity.receiverBankName
- //МПК. Работает только для сценария замена БИКа (без создания нового подразделения) и
- // без создания новых счетов (ключевание не меняется)
- DocUtils.changeBranchToCurrentAccountBranch(ctx, 'payerAccount', [
- ["dst": "payerBankBic", "src": "branch", "fields": "bic"],
- ["dst": "payerBankName", "src": "bic", "fields": BankUtils.BANK_FULLNAME],
- ["dst": "payerBankCorrAccount", "src": "bic", "fields": BankUtils.BANK_CORRACCOUNT],
- ["dst": "payerBankCity", "src": "bic", "fields": BankUtils.BANK_CITYORIG],
- ["dst": "payerBankSettlementType", "src": "bic", "fields": BankUtils.BANK_TNP]
- ], null, org, false, bankUtils)
- DocUtils.changeBranchToCurrentAccountBranch(ctx, 'receiverAccount', [
- ["dst": "receiverBankBic", "src": "branch", "fields": "bic"],
- ["dst": "receiverBankName", "src": "bic", "fields": BankUtils.BANK_FULLNAME],
- ["dst": "receiverBankCorrAccount", "src": "bic", "fields": BankUtils.BANK_CORRACCOUNT],
- ["dst": "receiverBankCity", "src": "bic", "fields": BankUtils.BANK_CITYORIG],
- ["dst": "receiverBankSettlementType", "src": "bic", "fields": BankUtils.BANK_TNP]
- ], null, org, true, bankUtils)
- ctx.fields.bankAcceptDate.value = null
- ctx.fields.operationDate.value = null
- ctx.fields.bankMessage.value = null
- ctx.fields.bankMessageAuthor.value = null
- ctx.fields.deliveredTime.value = null
- R050 doc = (R050) ctx.entity
- doc.partPayments.clear()
- onRequirePayerBankChange(ctx.fields, ctx.entity, bankUtils, ctx.hibernateTemplate, null, ctx.params, false)
- onSetEnabledINN(ctx)
- onRequirePayerNameEnable(ctx, bankUtils)
- def defaultVatRate = lawChangeConfigService.isVAT2019(R030Utils.getTimeZoneByOrg(ctx.entity.orgId, ctx.hibernateTemplate)) ?
- VAT20 : DEFAULT_VAT
- if (ctx.fields.vatRate.value != defaultVatRate) {
- onRequireVatRecount(ctx, defaultVatRate, false)
- } else {
- onRequireVatEnable(ctx)
- }
- },
- complete: { FormAfterContext<R050> ctx, StateMachineService stateMachineService, BankUtils bankUtils, DBOAccessService accessService,
- MetaDataService metaDataService, DigestService digestService,
- CounterService counterService, ServiceUtils serviceUtils, SessionManager sessionManager ->
- R050 doc = (R050) ctx.entity;
- doc.lastModifyDate = DateUtils.getCurrentTime()
- doc.taxPeriodDay = isTaxPeriod(ctx) ? ctx.fields.taxPeriodDay1.value : ctx.fields.taxPeriodDay2.value
- ctx.execute DocUtils.updateStatus.curry(R050StateMachine)
- if (doc.bankMessage != ctx.fields.bankMessage.value) {
- ctx.fields.bankMessage.value = doc.bankMessage
- }
- // запоминаем последний выбранный счет и организацию
- if (ctx.entity.orgId) {
- ctx.execute AccountByDefaultUtils.updateLastAccount.curry(
- ctx.entity.orgId,
- R050Desc.name,
- ctx.entity.accountId,
- R050Service.R050_LAST_ACCOUNT_ENABLED
- )
- }
- ctx.execute AuditDocumentUtils.auditDocumentSave.curry(R050Desc)
- },
- upcTypes: [CurrentUserOrgUPCType.name],
- upc: { UPCFormValueContext<R050> ctx ->
- ctx.setUpcValue(CurrentUserOrgUPCType.name, ctx.entity.orgId)
- },
- roles: {
- role id: [DBOPermission.BANK_CLIENT, DBOPermission.OFFLINE_CLIENT],
- predicates: CurrentUserOrgPredicate.name,
- actions: [Const.SYS_ALL_ACTIONS]
- }
- }
- protected def onRequireTaxFieldsEnablingDisabling(FormContext ctx) {
- if (ctx.operation != WidgetCreator.FormOperation.SHOW && ctx.fields.drawerStatus.value) {
- ctx.fields.cbc.disabled = false
- ctx.fields.taxOrCustoms.disabled = false
- ctx.fields.ocato.disabled = false
- ctx.fields.payReason.disabled = false
- ctx.fields.taxPeriodDay1.disabled = false
- ctx.fields.taxPeriodMonth.disabled = false
- ctx.fields.taxPeriodYear.disabled = false
- ctx.fields.taxPeriodDay2.disabled = false
- ctx.fields.taxDocNumber.disabled = false
- ctx.fields.docDateDay.disabled = false
- ctx.fields.docDateMonth.disabled = false
- ctx.fields.docDateYear.disabled = false
- ctx.fields.chargeType.disabled = false
- } else {
- ctx.fields.cbc.disabled = true
- ctx.fields.taxOrCustoms.disabled = true
- ctx.fields.ocato.disabled = true
- ctx.fields.payReason.disabled = true
- ctx.fields.taxPeriodDay1.disabled = true
- ctx.fields.taxPeriodMonth.disabled = true
- ctx.fields.taxPeriodYear.disabled = true
- ctx.fields.taxPeriodDay2.disabled = true
- ctx.fields.taxDocNumber.disabled = true
- ctx.fields.docDateDay.disabled = true
- ctx.fields.docDateMonth.disabled = true
- ctx.fields.docDateYear.disabled = true
- ctx.fields.chargeType.disabled = true
- }
- }
- protected def onRequireTaxFieldsChange(Map<String, FormFieldState> fields, boolean resetAll = false) {
- if (fields.drawerStatus.value) {
- fields.taxOrCustoms.value = fields.taxOrCustoms.value ?: "Налог. период"
- } else {
- fields.cbc.value = ""
- fields.taxOrCustoms.value = ""
- fields.ocato.value = ""
- fields.taxPeriodMonth.value = ""
- fields.taxPeriodYear.value = ""
- fields.taxPeriodDay2.value = ""
- fields.docDateDay.value = ""
- fields.docDateMonth.value = ""
- fields.docDateYear.value = ""
- if (resetAll) {
- fields.payReason.value = ""
- fields.taxPeriodDay1.value = ""
- fields.chargeType.value = ""
- fields.taxDocNumber.value = ""
- }
- }
- }
- protected def onSetEnabledINN(def ctx) {
- def disabled = !(ctx.fields.drawerStatus.value in getInnIgnoreDrawerStatus()) && !isBudgetInn(ctx)
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity?.orgId)
- if (disabled) {
- disabled = !org?.federalTreasuryBody
- }
- ctx.fields.receiverINN.disabled = disabled || ctx.operation == WidgetCreator.FormOperation.SHOW
- if (disabled) {
- ctx.fields.receiverINN.value = ctx.operation == WidgetCreator.FormOperation.COPY ? org?.inn : ctx.entity.receiverINN
- }
- }
- private static final def BUDGET_SYSTEM_ACCOUNTS = ["40101810[0-9]{12}", "40105810[0-9]{12}", "40201810[0-9]{12}",
- "40204810[0-9]{12}", "40302810[0-9]{12}", "40312810[0-9]{12}", "404[0-9]{2}810[0-9]{12}",
- "40501810[0-9]{5}2[0-9]{6}", "40503810[0-9]{5}4[0-9]{6}", "40601810[0-9]{5}1[0-9]{6}", "40601810[0-9]{5}3[0-9]{6}",
- "40501810[0-9]{5}2[0-9]{6}", "40503810[0-9]{5}4[0-9]{6}", "40601810[0-9]{5}1[0-9]{6}", "40601810[0-9]{5}3[0-9]{6}",
- "40603810[0-9]{5}4[0-9]{6}", "40701810[0-9]{5}1[0-9]{6}", "40701810[0-9]{5}3[0-9]{6}", "40703810[0-9]{5}4[0-9]{6}"]
- protected def isBudgetInn(def ctx) {
- return ctx.fields.drawerStatus?.value &&
- (ctx.fields.drawerStatus.value == '26' || ctx.fields.drawerStatus.value == '20' || ctx.fields.drawerStatus.value == '22') &&
- isBudgetSystemAccount(ctx.fields.receiverAccount?.value)
- }
- public static boolean isBudgetSystemAccount(String account) {
- if (!AccountUtils.isValidAccount(account)) {
- return false
- }
- return BUDGET_SYSTEM_ACCOUNTS.any { account ==~ it }
- }
- protected void initReceiverAccount(DBOAccessService accessService, R050 doc, FormInitContext ctx,
- BankUtils bankUtils) {
- String orgId = doc.orgId
- List<Account> accounts = accessService.getAvailableAccounts()
- def rAccounts = accounts.findAll({
- it.currencyCode == '810' &&
- it.org?.id == orgId &&
- it.accountState == 'OPEN' &&
- it.accountType?.shortName?.equalsIgnoreCase('р/с')
- })
- rAccounts = rAccounts.unique(true, { Account it -> it.id })
- // получаем счёт по умолчанию или последний выбранный счет
- Account defaultAccount = ctx.execute(
- AccountByDefaultUtils.defOrLastAccount.curry(orgId, R050Desc.name, rAccounts,
- R050Service.R050_DEFAULT_ACCOUNT_ENABLED, R050Service.R050_LAST_ACCOUNT_ENABLED
- )
- )
- if (!defaultAccount && rAccounts.size() == 1) {
- // если счета по умолчанию нет и рублевый счет один - при создании указываем его на форме
- defaultAccount = rAccounts.get(0)
- }
- if (defaultAccount) {
- def rAccountId = defaultAccount.id
- doc.accountId = rAccountId
- ctx.fields.receiverAccount.value = defaultAccount.account
- onRequirePayerBankChange(ctx.fields, doc, bankUtils, ctx.hibernateTemplate, rAccountId, null)
- }
- }
- protected def onRequirePayerBankChange(Map<String, FormFieldState> fields, R050 entity, BankUtils bankUtils,
- HibernateTemplate hibernateTemplate,
- Serializable accountId, Map<String, Serializable> contextParams,
- boolean rewriteNotEmpty = true) {
- Account account
- if (accountId) {
- account = hibernateTemplate.get(Account, accountId)
- } else {
- def val = fields.receiverAccount.value as String
- def accounts = val ? bankUtils.findAccounts(val) : null
- account = accounts ? (accounts.size() == 1 ? accounts.get(0) : accounts.find {
- entity.orgId?.equals(it.org?.id)
- }) : null
- }
- if (account) {
- entity.accountId = account.id
- def payerBankInfo = bankUtils.getBankInfo(account.bankBic)
- if (payerBankInfo) {
- fields.receiverBankBic.value = account.bankBic
- fields.receiverBankName.value = payerBankInfo.get(BankUtils.BANK_FULLNAME);
- fields.receiverBankCorrAccount.value = payerBankInfo.get(BankUtils.BANK_CORRACCOUNT);
- entity.receiverBankName = payerBankInfo.get(BankUtils.BANK_NAME);
- entity.receiverBankCity = payerBankInfo.get(BankUtils.BANK_CITYORIG)
- entity.receiverBankSettlementType = payerBankInfo.get(BankUtils.BANK_TNP)
- } else {
- clearReceiverBank(fields, entity)
- }
- Org org = hibernateTemplate.get(Org, entity.orgId)
- if (org) {
- fillReceiverKppList(fields, org)
- }
- checkSameBank(fields)
- } else {
- clearReceiverBank(fields, entity)
- entity.accountId = null
- }
- }
- protected void clearReceiverBank(Map<String, FormFieldState> fields, R050 entity) {
- fields.receiverBankBic.value = null
- fields.receiverBankName.value = null
- fields.receiverBankCorrAccount.value = null
- entity.receiverBankName = null
- entity.receiverBankCity = null
- entity.receiverBankSettlementType = null
- }
- protected def receiverDataOnDrawerStatusChange(def ctx, BankUtils bankUtils) {
- if (!(ctx.fields.drawerStatus.value in getInnIgnoreDrawerStatus())) {
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- Account account = bankUtils.findAccount(ctx.fields.payerAccount.value, ctx.fields.payerBankBic.value)
- if (!account?.trustManagement) {
- ctx.fields.receiverName.value = org.name
- }
- if (!isBudgetInn(ctx) && !org.federalTreasuryBody) {
- ctx.fields.receiverINN.value = org.inn
- }
- ctx.fields.receiverKPP.value = org.defaultKpp?.kpp
- fillReceiverKppList(ctx.fields, org)
- }
- }
- protected def fillReceiverKppList(Map<String, FormFieldState> fields, Org org) {
- Object curPayKpp = fields.receiverKPP.value;
- boolean containCurKpp = false;
- def kppList = new ArrayList<GridRowData>()
- org.orgKpp.each { OrgKpp kpp ->
- if (!containCurKpp && curPayKpp != null && curPayKpp.equals(kpp.kpp)) {
- containCurKpp = true
- };
- kppList << new GridRowData(kpp.kpp, [kpp.kpp])
- }
- if (!containCurKpp && curPayKpp != null) {
- kppList << new GridRowData(curPayKpp, [curPayKpp])
- }
- fields.receiverKPP.items = kppList.sort()
- }
- protected
- def onCorrespondentSelect(Serializable id, Map<String, FormFieldState> fields, HibernateTemplate hibernateTemplate, BankUtils bankUtils) {
- if (id) {
- Correspondent correspondent = hibernateTemplate.get(Correspondent, id)
- if (correspondent) {
- fields.payerINN.value = correspondent.inn
- fields.payerKPP.value = correspondent.kpp
- fields.payerAccount.value = correspondent.account
- fields.payerName.value = correspondent.name
- fields.payerBankBic.value = correspondent.bic
- }
- }
- }
- protected def createVatInfo(Map<String, FormFieldState> fields) {
- SumFormatter sf = new SumFormatter();
- BigDecimal vatRate = fields.vatRate.value
- BigDecimal vatSum = fields.vatSum.value
- BigDecimal documentSum = fields.documentSum.value
- def rule = R030VatCalculationRule.valueOf(fields.vatCalculationRule.value)
- return rule.getPurpose(documentSum, vatRate, vatSum, sf)
- }
- protected def fillPayerReq(Map<String, FormFieldState> fields, Object entity, BankUtils bankUtils) {
- String payerBankBic = fields.payerBankBic.value
- if (payerBankBic) {
- def payerBankInfo = bankUtils.getBankInfo(payerBankBic)
- if (payerBankInfo) {
- fields.payerBankName.value = payerBankInfo.get(BankUtils.BANK_FULLNAME)
- fields.payerBankCorrAccount.value = payerBankInfo.get(BankUtils.BANK_CORRACCOUNT)
- entity.payerBankName = payerBankInfo.get(BankUtils.BANK_NAME)
- entity.payerBankCity = payerBankInfo.get(BankUtils.BANK_CITYORIG)
- entity.payerBankSettlementType = payerBankInfo.get(BankUtils.BANK_TNP)
- } else {
- clearPayerReq(fields, entity)
- }
- } else {
- clearPayerReq(fields, entity)
- }
- checkSameBank(fields)
- }
- protected def clearPayerReq(Map<String, FormFieldState> fields, entity) {
- fields.payerBankName.value = null
- fields.payerBankCorrAccount.value = null
- entity.payerBankName = null
- entity.payerBankCity = null
- entity.payerBankSettlementType = null
- }
- protected def checkSameBank(Map<String, FormFieldState> fields) {
- String payerBic = fields.payerBankBic.value
- String recBic = fields.receiverBankBic.value
- if (payerBic && recBic && payerBic.equals(recBic)) {
- fields.paymentKind.value = null
- fields.paymentCode.value = "0"
- }
- }
- protected def onRequirePayerNameEnable(FormContext ctx, BankUtils bankUtils) {
- if (ctx.operation == WidgetCreator.FormOperation.SHOW) {
- return
- }
- if (checkPayerNameConditionEnabling(ctx)) {
- ctx.fields.receiverName.disabled = false
- } else {
- ctx.fields.receiverName.disabled = true
- if (ctx.entity.orgId) {
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- ctx.fields.receiverName.value = org?.name
- }
- onRequirePayerNameChange(ctx, bankUtils)
- }
- }
- protected boolean checkPayerNameConditionEnabling(FormContext ctx) {
- return true
- }
- protected static String makeNotNullElement(String text) {
- return text ?: "";
- }
- protected def buildPayerFullAddress(def address) {
- if (!address) {
- return null
- }
- if (address.getFullAddress()) {
- return address.getFullAddress();
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append(makeNotNullElement(address.getZipcode())).append(", ");
- sb.append(makeNotNullElement(address.getCity())).append(", ");
- sb.append(makeNotNullElement(address.getStreet())).append(", ");
- sb.append(makeNotNullElement(address.getHouse())).append(", ");
- sb.append(makeNotNullElement(address.getBuilding())).append(", ");
- sb.append(makeNotNullElement(address.getFlat()));
- return sb.toString();
- }
- }
- protected def onRequirePayerNameChange(def ctx, BankUtils bankUtils) {
- String receiverAccount = ctx.fields.receiverAccount.value
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- def orgName = org.name
- List<String> nonResidentAccounts = ctx.hibernateTemplate.find("select balanceAccount from NonResidentBankAccount")
- StringBuilder name = new StringBuilder().append(orgName)
- def summa = ctx.fields.documentSum.value ?: 0
- Account account = bankUtils.findAccount(ctx.fields.payerAccount.value, ctx.fields.payerBankBic.value)
- if (account?.trustManagement) {
- ctx.fields.payerName.value = account.accountName
- } else if (nonResidentAccounts.find {
- receiverAccount?.substring(0, it.length()) == it
- } && summa > MIN_SUM_WITH_ADDRESS) {
- def payerAddress
- StringBuilder nameAddress = new StringBuilder().append(orgName)
- def payerActualAddress = org.addressCollection.addresses.find {
- it.addressType.systemName == AddressType.JURIDICAL
- }
- if (!payerActualAddress) {
- payerActualAddress = org.addressCollection.addresses.find {
- it.addressType.systemName == AddressType.ACTUAL
- }
- }
- if (payerActualAddress) {
- def fullActualAddress = payerActualAddress.fullAddress
- payerAddress = fullActualAddress ? fullActualAddress : buildPayerFullAddress(payerActualAddress)
- nameAddress.append("//").append(payerAddress).append("//")
- } else {
- ctx.widgetCreator.showInformMessage(i18n("Фактический адрес организации-плательщика не найден в справочнике"),
- i18n("«Плательщик»"))
- }
- if (nameAddress.length() > 160) {
- ctx.widgetCreator.showInformMessage(i18n("Автоматическая подстановка адреса места нахождения невозможна из-за превышения максимально допустимой длины поля «Плательщик» (160 символов). ")
- + i18n("Вам необходимо указать адрес вручную, выделив его знаками #1# начинающими и заканчивающими указание адреса ", " // ")
- + i18n("(при указании адреса допускается использовать сокращения, позволяющие определенно установить информацию о плательщике)")
- , i18n("«Плательщик»"))
- } else {
- ctx.fields.payerName.value = nameAddress.toString()
- }
- } else {
- if (name.length() > 160) {
- ctx.fields.payerName.value = name.toString().substring(0, 160)
- } else {
- ctx.fields.payerName.value = name.toString()
- }
- }
- }
- protected def onRequireVatEnable(FormContext ctx) {
- def rule = R030VatCalculationRule.valueOf(ctx.fields.vatCalculationRule.value)
- ctx.fields.vatRate.disabled = !rule.canEditVatRate
- ctx.fields.vatSum.disabled = !rule.canEditVatSum
- }
- protected
- def onRequireVatRecount(FormContext ctx, BigDecimal defaultVatRate = null, boolean showConfirmMessage = true) {
- Map<String, FormFieldState> fields = ctx.fields
- WidgetCreator widgetCreator = ctx.widgetCreator
- def rule = R030VatCalculationRule.valueOf(fields.vatCalculationRule.value)
- onRequireVatEnable(ctx)
- if (fields.vatRate.disabled) {
- fields.vatRate.value = defaultVatRate ?: lawChangeConfigService.isVAT2019(R030Utils.getTimeZoneByOrg(ctx.entity.orgId,
- ctx.hibernateTemplate)) ? VAT20 : DEFAULT_VAT
- }
- def vatRate = rule.getVatRate(fields.documentSum.value, fields.vatRate.value, fields.vatSum.value)
- def vatSum = rule.getVatSum(fields.documentSum.value, fields.vatRate.value, fields.vatSum.value)
- def docSum = rule.getDocSum(fields.documentSum.value, fields.vatRate.value, fields.vatSum.value)
- if (docSum && docSum != fields.documentSum.value) {
- if (showConfirmMessage) {
- SumFormatter sf = new SumFormatter();
- if (widgetCreator.showConfirmMessage(i18n("Сумма платежа: ") + sf.format(docSum) + i18n(" руб.\n") +
- i18n("Величина НДС: ") + sf.format(vatSum) + i18n(" руб.\nИзменить?"), i18n("Изменение суммы платежа"), "changeDocSum")) {
- fields.documentSum.value = docSum
- } else {
- fields.vatCalculationRule.value = R030VatCalculationRule.VatAddNoChange.name()
- rule = R030VatCalculationRule.valueOf(fields.vatCalculationRule.value)
- vatSum = rule.getVatSum(fields.documentSum.value, fields.vatRate.value, fields.vatSum.value)
- }
- } else {
- fields.documentSum.value = docSum
- }
- }
- fields.vatRate.value = vatRate
- fields.vatSum.value = vatSum;
- onRequireChangeVatInfo(fields)
- revertVatAddIfNeeded(fields)
- }
- // Возвращаем значение которое должно отображаться в дропдауне вместо синтетического, использованного для рассчетов
- protected def revertVatAddIfNeeded(Map<String, FormFieldState> fields) {
- if (fields.vatCalculationRule.value.equals(R030VatCalculationRule.VatAddNoChange.name())) {
- fields.vatCalculationRule.value = R030VatCalculationRule.VatAdd.name()
- }
- }
- protected def onRequireChangeVatInfo(Map<String, FormFieldState> fields) {
- String vatInfo = createVatInfo(fields)
- if (vatInfo) {
- String paymentPurpose = (fields.paymentPurpose.value as String ?: "").trim()
- if (paymentPurpose) {
- def replaced = false;
- for (String regExp : R030VatCalculationRule.vatMentions) {
- if (paymentPurpose =~ "${regExp}") {
- paymentPurpose = paymentPurpose.replaceAll(regExp, vatInfo)
- replaced = true
- break
- }
- }
- if (!replaced) {
- def matcher = ppCurrencyTypeMatcher paymentPurpose
- paymentPurpose = (matcher.matches() ?
- matcher[0][1] + matcher[0][2] + " " + vatInfo + "." + matcher[0][3] :
- paymentPurpose + "\r\n" + vatInfo + ".")
- }
- } else {
- paymentPurpose = vatInfo
- }
- fields.paymentPurpose.value = paymentPurpose
- }
- }
- public static def ppCurrencyTypeMatcher(String paymentPurpose) {
- return Pattern.compile(/^(.*?)(\{VO[^\}]*?\})(.*?)$/, Pattern.DOTALL).matcher(paymentPurpose)
- }
- protected void updatePaymentCode(FormContext ctx) {
- String paymentKind = ctx.fields.paymentKind.value;
- DetachedCriteria c = DetachedCriteria.forClass(PaymentKind);
- c.add(paymentKind ? Restrictions.eq("kind", paymentKind) : Restrictions.isNull("kind"));
- List<PaymentKind> paymentKinds = ctx.hibernateTemplate.findByCriteria(c);
- if (paymentKinds.size() > 0) {
- ctx.fields.paymentCode.value = paymentKinds.get(0).code
- } else {
- ctx.fields.paymentCode.value = ""
- }
- }
- protected def isTaxPeriod(def ctx) {
- return ctx.fields.taxOrCustoms.value != "Код тамож. органа"
- }
- def addNewOfficials = { FormFieldSubmitContext<R050> ctx ->
- if (ctx.isFormChanged()) {
- Correspondent correspondent = ctx.entityFactory.newEntity(Correspondent)
- Org org = ctx.hibernateTemplate.get(Org, ctx.entity.orgId)
- correspondent.name = ctx.fields.payerName.value
- correspondent.inn = ctx.entity.payerINN
- correspondent.org = org
- correspondent.kpp = ctx.entity.payerKPP
- correspondent.account = ctx.entity.payerAccount
- correspondent.bic = ctx.entity.payerBankBic
- List<ValidationResult> errors = []
- if (!correspondent.name) {
- errors << new ValidationError(i18n("Поле 'Наименование' не заполнено"))
- }
- if (!correspondent.kpp) {
- errors << new ValidationError(i18n("Поле 'КПП' не заполнено"))
- }
- if (!correspondent.account) {
- errors << new ValidationError(i18n("Поле 'Счет' не заполнено"))
- }
- if (!correspondent.bic) {
- errors << new ValidationError(i18n("Поле 'БИК' не заполнено"))
- }
- if (!correspondent.inn) {
- errors << new ValidationError(i18n("Поле 'ИНН' не заполнено"))
- }
- if (errors.size() > 0) {
- ctx.widgetCreator.showErrorsForm(errors)
- return
- } else {
- DetachedCriteria criteria = DetachedCriteria.forClass(Correspondent)
- criteria.add(Restrictions.eq("name", correspondent.name))
- criteria.add(Restrictions.eq("org.id", correspondent.org.id))
- criteria.add(Restrictions.eq("kpp", correspondent.kpp))
- criteria.add(Restrictions.eq("inn", correspondent.bic))
- List<Officials> officialsList = ctx.hibernateTemplate.findByCriteria(criteria)
- if (officialsList.size() > 0) {
- errors << new ValidationError(i18n("Ответственное лицо '") + correspondent.name + i18n("' уже есть в справочнике"))
- ctx.widgetCreator.showErrorsForm(errors)
- return
- }
- ctx.hibernateTemplate.save(correspondent)
- ctx.widgetCreator.showInformMessage(i18n("Ответственное лицо добавлено в справочник корреспондентов"), i18n("Информация"))
- }
- }
- }
- protected void appendStateToTitle(FormInitContext<R050> ctx) {
- ctx.execute DocUtils.appendStateToTitle.curry(null, ctx.entity.state, StateType.CLIENT)
- }
- protected List<OrgCopyService.MappingEntry> getMapping() {
- return [
- new OrgCopyService.MappingEntry(ORG_ID, "orgId"),
- new OrgCopyService.MappingEntry(ORG_NAME, "receiverName"),
- new OrgCopyService.MappingEntry(ORG_INN, "receiverINN"),
- new OrgCopyService.MappingEntry(ORG_KPP, "receiverKPP")
- ]
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement