protected void BtnUpdate_Click(object sender, EventArgs e) { if (DataManager.PaymentStatus.SelectById(CurrentUser.Instance.SiteID, ucPaymentStatus.PaymentStatusId).IsLast) { double?total = 0.0; bool isValid = true; if (ucPaymentPass.PaymentPasses != null && ucPaymentPass.PaymentPasses.Count > 0) { foreach (var paymentPass in ucPaymentPass.PaymentPasses) { if (paymentPass.IncomeCFOID == null || paymentPass.IncomePaymentArticleID == null || paymentPass.OutgoCFOID == null || paymentPass.OutgoPaymentArticleID == null) { isValid = false; cvGroupUpdate.ErrorMessage = "Не указан ЦФО или статья"; break; } total += paymentPass.Amount; } if (total != rntxtTotal.Value) { isValid = false; cvGroupUpdate.ErrorMessage = "Сумма проводок не равна сумме оплаты"; } } else { isValid = false; cvGroupUpdate.ErrorMessage = "Не указаны проводки"; } cvGroupUpdate.IsValid = isValid; } if (cvGroupUpdate.IsValid) { paymentData = DataManager.Payment.SelectById(SiteId, _paymentID); var isUpdate = paymentData != null; paymentData = DataManager.Payment.Save( SiteId, paymentData == null ? Guid.Empty : paymentData.ID, txtAssignment.Text, rdpDatePlan.SelectedDate ?? DateTime.Now, rdpDateFact.SelectedDate, int.Parse(ddlPaymentType.SelectedValue), ucPaymentStatus.PaymentStatusId, dcbPayer.SelectedIdNullable, dcbPayerLegalAccount.SelectedIdNullable, dcbRecipient.SelectedIdNullable, dcbRecipientLegalAccount.SelectedIdNullable, dcbCurrency.SelectedId, rntxtCourse.Value ?? 1, rntxtAmount.Value.HasValue ? decimal.Parse(rntxtAmount.Value.ToString()) : 0, rntxtTotal.Value.HasValue ? decimal.Parse(rntxtTotal.Value.ToString()) : 0, dcbOrder.SelectedIdNullable, dcbInvoice.SelectedIdNullable ); var oldPaymentPasses = DataManager.PaymentPass.SelectAll(CurrentUser.Instance.SiteID, paymentData.ID); List <tbl_PaymentPass> ids = new List <tbl_PaymentPass>(); foreach (var old in oldPaymentPasses) { if (ucPaymentPass.PaymentPasses.Where(a => a.ID == old.ID).Select(a => a.ID).SingleOrDefault() == Guid.Empty) { ids.Add(old); } } foreach (var tblPaymentPass in ids) { if (tblPaymentPass.ProcessedByCron) { tblPaymentPass.ProcessedByCron = false; tblPaymentPass.ToDelete = true; DataManager.PaymentPass.Update(tblPaymentPass); //tblPaymentPass.OldCreatedAt = tblPaymentPass.CreatedAt; //tblPaymentPass.OldAmount = tblPaymentPass.Amount; //tblPaymentPass.OldOutgoCFOID = tblPaymentPass.OldOutgoCFOID; //tblPaymentPass.OldOutgoPaymentArticleID = tblPaymentPass.OutgoPaymentArticleID; } else { DataManager.PaymentPass.Delete(tblPaymentPass); } } foreach (var paymentPass in ucPaymentPass.PaymentPasses) { var oldPaymentPass = DataManager.PaymentPass.SelectById(paymentData.ID, paymentPass.ID); if (oldPaymentPass != null) { oldPaymentPass.SiteID = CurrentUser.Instance.SiteID; oldPaymentPass.PaymentID = paymentData.ID; oldPaymentPass.IncomePaymentPassCategoryID = paymentPass.IncomePaymentPassCategoryID; oldPaymentPass.IncomeCFOID = paymentPass.IncomeCFOID; oldPaymentPass.IncomePaymentArticleID = paymentPass.IncomePaymentArticleID; oldPaymentPass.OutgoPaymentPassCategoryID = paymentPass.OutgoPaymentPassCategoryID; if (oldPaymentPass.OutgoCFOID != paymentPass.OutgoCFOID) { oldPaymentPass.OldOutgoCFOID = oldPaymentPass.OutgoCFOID; oldPaymentPass.ProcessedByCron = false; } if (oldPaymentPass.OutgoPaymentArticleID != paymentPass.OutgoPaymentArticleID) { oldPaymentPass.OldOutgoPaymentArticleID = oldPaymentPass.OldOutgoPaymentArticleID; oldPaymentPass.ProcessedByCron = false; } if (rdpDateFact.SelectedDate != null && oldPaymentPass.CreatedAt != rdpDateFact.SelectedDate || rdpDateFact.SelectedDate == null && rdpDatePlan.SelectedDate != null && oldPaymentPass.CreatedAt != rdpDatePlan.SelectedDate) { oldPaymentPass.OldCreatedAt = oldPaymentPass.CreatedAt; oldPaymentPass.ProcessedByCron = false; } if (oldPaymentPass.Amount != paymentPass.Amount) { oldPaymentPass.Amount = oldPaymentPass.Amount; oldPaymentPass.ProcessedByCron = false; } oldPaymentPass.CreatedAt = rdpDateFact.SelectedDate ?? rdpDatePlan.SelectedDate; oldPaymentPass.OutgoCFOID = paymentPass.OutgoCFOID; oldPaymentPass.OutgoPaymentArticleID = paymentPass.OutgoPaymentArticleID; oldPaymentPass.FormulaID = paymentPass.FormulaID; oldPaymentPass.Value = paymentPass.Value; oldPaymentPass.Amount = paymentPass.Amount; if (DataManager.PaymentStatus.SelectById(CurrentUser.Instance.SiteID, ucPaymentStatus.PaymentStatusId).IsLast) { oldPaymentPass.IsFact = true; } DataManager.PaymentPass.Update(oldPaymentPass); } else { DataManager.PaymentPass.Add(new tbl_PaymentPass() { SiteID = CurrentUser.Instance.SiteID, PaymentID = paymentData.ID, CreatedAt = rdpDateFact.SelectedDate ?? rdpDatePlan.SelectedDate, IncomePaymentPassCategoryID = paymentPass.IncomePaymentPassCategoryID, IncomeCFOID = paymentPass.IncomeCFOID, IncomePaymentArticleID = paymentPass.IncomePaymentArticleID, OutgoPaymentPassCategoryID = paymentPass.OutgoPaymentPassCategoryID, OutgoCFOID = paymentPass.OutgoCFOID, OutgoPaymentArticleID = paymentPass.OutgoPaymentArticleID, FormulaID = paymentPass.FormulaID, Value = paymentPass.Value, Amount = paymentPass.Amount }); } } if (!isUpdate) { Response.Redirect(UrlsData.AP_PaymentsEdit(paymentData.ID)); } } }