public void CreatePaymentSchedule(EntityReference agreementReference) { var agreement = service.Retrieve("nav_agreement", agreementReference.Id, new ColumnSet("nav_name", "nav_agreementid", "nav_creditperiod", "nav_fullcreditamount", "nav_paymentplandate")).ToEntity <nav_agreement>(); if (agreement == null || agreement.nav_name == null || agreement.nav_creditperiod == null || agreement.nav_fullcreditamount == null) { throw new InvalidPluginExecutionException("Одно из полей не заполенено ! "); } // Колличество месяцев, если не целое значение, то + 1 var creditPeriodInMonth = Math.Ceiling((decimal)(agreement.nav_creditperiod * 12)); var loanFeePerMonth = agreement.nav_fullcreditamount.Value / creditPeriodInMonth; for (int i = 0; i < creditPeriodInMonth; i++) { nav_invoice newInvoice = new nav_invoice(); newInvoice.nav_invoiceId = service.Create(newInvoice); newInvoice.nav_name = "Счет на оплату кредита по договору " + agreement.nav_name; newInvoice.nav_type = nav_invoice_nav_type.Avtomaticheskoe_sozdanie; newInvoice.nav_date = DateTime.Now; newInvoice.nav_paydate = DateTime.Now.AddDays(1).AddMonths(i + 1); newInvoice.nav_dogovorid = new EntityReference(nav_agreement.EntityLogicalName, (Guid)agreement.nav_agreementId); newInvoice.nav_fact = false; newInvoice.nav_amount = new Money(loanFeePerMonth); agreement.nav_paymentplandate = DateTime.Now.AddDays(1); service.Update(agreement); service.Update(newInvoice); } }
public void Execute(nav_invoice invoice) { if (invoice.nav_type == null) { invoice.nav_type = nav_invoice_nav_type.Ruchnoe_sozdanie; } }
public void Execute(nav_invoice target) { nav_agreement agreementRecord = new nav_agreement(); traceService.Trace("Заход в Execute"); traceService.Trace("target.nav_dogovorid.Id: " + target.nav_dogovorid.Id.ToString()); agreementRecord = service.Retrieve(nav_agreement.EntityLogicalName, target.nav_dogovorid.Id, new Microsoft.Xrm.Sdk.Query.ColumnSet(nav_agreement.Fields.nav_factsumma, nav_agreement.Fields.nav_summa)).ToEntity <nav_agreement>(); if (agreementRecord.nav_factsumma == null) { traceService.Trace("agreement.nav_factsumma == null"); agreementRecord.nav_factsumma = target.nav_amount; } else { traceService.Trace("agreement.nav_factsumma != null"); agreementRecord.nav_factsumma = new Money(agreementRecord.nav_factsumma.Value + target.nav_amount.Value); } if (agreementRecord.nav_factsumma.Value > agreementRecord.nav_summa.Value) { traceService.Trace("Сумма данного счета превышает сумму договора. agreement.nav_factsumma.Value > agreement.nav_summa.Value"); throw new InvalidPluginExecutionException("Сумма данного счета превышает сумму договора."); } target.nav_paydate = DateTime.Now; if (agreementRecord.nav_factsumma.Value == target.nav_amount.Value) { agreementRecord.nav_fact = true; } traceService.Trace("Попытка service.Update(agreementRecord)"); service.Update(agreementRecord); }