public PaymentDocument GetPaymentDocumentById(Guid paymentDocId) { PaymentDocument paymentDocument = _context.PaymentDocuments.SingleOrDefault(p => p.PaymentDocId == paymentDocId); return(paymentDocument); }
/// <summary> /// Work out the changes when a Payment is edited /// </summary> protected override void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding) { PaymentHeader document = json.header; PaymentHeader original = getDocument(document); changeInDocumentAmount = document.DocumentAmount - original.DocumentAmount; changeInOutstanding = original.DocumentOutstanding + changeInDocumentAmount - amount; Utils.Check(document.DocumentOutstanding == document.Remaining, "Remaining {0:0.00} does not agree with outstanding {1:0.00}", document.Remaining, document.DocumentOutstanding); }
protected override void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding) { PaymentHeader document = json.header; PaymentHeader original = getDocument(document); changeInDocumentAmount = -(document.DocumentAmount - original.DocumentAmount); changeInOutstanding = 0; Utils.Check(-changeInDocumentAmount == amount, "Change in document amount {0:0.00} does not agree with payments {1:0.00}", -changeInDocumentAmount, amount); }
/// <summary> /// Retrieve a payment for editing /// </summary> public void Payment(int id) { PaymentDocument document = getPayment(id); JObject record = document.ToJObject(); nextPreviousDocument(record, "WHERE DocumentTypeId = " + (int)PaymentDoc); record.Add("BankAccounts", SelectBankAccounts()); record.Add("Names", SelectNames(NameType)); Record = record; }
/// <summary> /// Work out the changes when a Payment is edited /// </summary> protected override void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding) { PaymentHeader document = json.header; PaymentHeader original = getDocument(document); changeInDocumentAmount = document.DocumentAmount - original.DocumentAmount; changeInOutstanding = document.DocumentOutstanding - original.DocumentOutstanding; Utils.Check(document.DocumentOutstanding == document.Remaining, "Remaining {0:0.00} does not agree with outstanding {1:0.00}", document.Remaining, document.DocumentOutstanding); }
public bool AddPaymentDoc(PaymentDocument paymentDocument) { if (paymentDocument == null) { return(false); } _context.PaymentDocuments.Add(paymentDocument); return(true); }
public bool DeleteFileFromPaymentDoc(PaymentDocument paymentDocument) { if (paymentDocument != null) { _context.PaymentDocuments.Remove(paymentDocument); SaveChanges(); return(true); } return(false); }
private PaymentDocument MockPaymentDoc() { var paymentDoc = new PaymentDocument { PaymentDocId = Guid.Parse("21fbb2ce-75fd-42b9-9ec4-3b28b85e84c3"), PaymentFileName = "Food Company", PaymentLastModified = new DateTime(2017, 12, 4, 3, 06, 30), Extension = ".pdf", }; return(paymentDoc); }
public ActionResult UploadFilePaymentDoc(PaymentDocument paymentDocument) { DateTime dateTime = DateTime.UtcNow; var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time"); var convertedTime = TimeZoneInfo.ConvertTime(dateTime, timeZoneInfo); if (ModelState.IsValid) { List <PaymentDocument> paymentDocuments = new List <PaymentDocument>(); for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); PaymentDocument payment = new PaymentDocument { PaymentFileName = fileName, Extension = Path.GetExtension(fileName), PaymentDocId = Guid.NewGuid(), PaymentLastModified = convertedTime }; if (payment.Extension == ".pdf") { paymentDocuments.Add(payment); payment.PaymentDocuments = paymentDocuments; var path = Path.Combine(Server.MapPath("~/App_Data/PaymentDoc/"), payment.PaymentDocId + payment.Extension); file.SaveAs(path); bool addPaymentDoc = _paymentDocRepository.AddPaymentDoc(payment); if (addPaymentDoc.Equals(true)) { _paymentDocRepository.SaveChanges(); return(RedirectToAction("ListAllPaymentDocs")); } } ViewBag.Message = "Please, upload PDF File Only"; return(View("UploadFilePaymentDocView", payment)); } } } return(View("UploadFilePaymentDocView", paymentDocument)); }
/// <summary> /// Retrieve a payment, or prepare a new one /// </summary> PaymentDocument getPayment(int?id) { PaymentHeader header = getDocument <PaymentHeader>(id); if (header.idDocument == null) { header.DocumentTypeId = (int)PaymentDoc; header.DocumentDate = Utils.Today; header.DocumentName = ""; header.DocumentIdentifier = "Payment"; if (GetParameters["acct"].IsInteger()) { header.DocumentAccountId = int.Parse(GetParameters["acct"]); } else if (Settings.DefaultBankAccount > 0) { header.DocumentAccountId = (int)Settings.DefaultBankAccount; } if (GetParameters["name"].IsInteger()) { JObject name = Database.QueryOne("*", "WHERE idNameAddress = " + GetParameters["name"], "NameAddress"); if (name != null) { checkNameType(name.AsString("Type"), NameType); header.DocumentNameAddressId = name.AsInt("idNameAddress"); header.DocumentAddress = name.AsString("Address"); header.DocumentName = name.AsString("Name"); } } } else { checkDocType(header.DocumentTypeId, PaymentDoc); checkNameType(header.DocumentNameAddressId, NameType); } PaymentDocument previous = new PaymentDocument() { header = header, detail = PaymentListing(header.idDocument, header.DocumentNameAddressId).ToList() }; return(previous); }
private bool InsertDoc(PaymentDocument test) { foreach (PaymentDocument pDocument in _paymentDocuments) { if (pDocument.AccountCode == test.AccountCode && pDocument.DocumentDate == test.DocumentDate && pDocument.DocumentDate == test.DocumentDate && pDocument.Firm._id == test.Firm._id) { return(false); } } if (DbFactory.PaymentDocumentCRUD.Insert(test)) { _paymentDocuments.Add(test); return(true); } else { return(false); } }
private IEnumerable <PaymentDocument> MockListPaymentDocs() { var listPaymentDoc = new PaymentDocument[] { new PaymentDocument { PaymentDocId = Guid.Parse("21fbb2ce-75fd-42b9-9ec4-3b28b85e84c3"), PaymentFileName = "Food Company", PaymentLastModified = new DateTime(2017, 12, 4, 3, 06, 30), Extension = ".pdf", }, new PaymentDocument { PaymentDocId = Guid.Parse("1e74ebcc-5084-4054-bd70-ae1beb1dcbb3"), PaymentFileName = "A Company", PaymentLastModified = new DateTime(2017, 12, 5, 14, 06, 30), Extension = ".pdf", } }; return(listPaymentDoc); }
public AjaxReturn PaymentPost(PaymentDocument json) { decimal amount = 0; Database.BeginTransaction(); PaymentHeader document = json.header; checkDocType(document.DocumentTypeId, PaymentDoc); checkNameType(document.DocumentNameAddressId, NameType); checkAccountIsAcctType(document.DocumentAccountId, AcctType.Bank, AcctType.CreditCard); if (document.idDocument == null) allocateDocumentIdentifier(document); PaymentDocument oldDoc = getPayment(document.idDocument); int sign = -SignFor(PaymentDoc); // Update the outstanding on the paid documents foreach (PaymentLine payment in json.detail) { decimal a = payment.AmountPaid; PaymentLine old = oldDoc.PaymentFor(payment.idDocument); if (old != null) a -= old.AmountPaid; // reduce update by the amount paid last time it was saved int? docId = payment.idDocument; if (a != 0) { Database.Execute("UPDATE Journal SET Outstanding = Outstanding - " + sign * a + " WHERE DocumentId = " + Database.Quote(docId) + " AND AccountId = " + (int)LedgerAccount); amount += a; } } json.detail = json.detail.Where(l => l.AmountPaid != 0).ToList(); decimal changeInDocumentAmount; decimal changeInOutstanding; // Virtual method, as calculation is different for customers and suppliers calculatePaymentChanges(json, amount, out changeInDocumentAmount, out changeInOutstanding); document.DocumentTypeId = (int)PaymentDoc; Database.Update(document); // Now delete the old cross reference records, and replace with new Database.Execute("DELETE FROM Payments WHERE idPayment = " + document.idDocument); foreach (PaymentLine payment in json.detail) { if (payment.AmountPaid != 0) { Database.Execute("INSERT INTO Payments (idPayment, idPaid, PaymentAmount) VALUES(" + document.idDocument + ", " + payment.idDocument + ", " + payment.AmountPaid + ")"); } } // Journal between bank account and sales/purchase ledger Journal journal = Database.Get(new Journal() { DocumentId = (int)document.Id, JournalNum = 1 }); journal.DocumentId = (int)document.idDocument; journal.JournalNum = 1; journal.NameAddressId = document.DocumentNameAddressId; journal.Memo = document.DocumentMemo; journal.AccountId = document.DocumentAccountId; journal.Amount += changeInDocumentAmount; journal.Outstanding += changeInOutstanding; Database.Update(journal); journal = Database.Get(new Journal() { DocumentId = (int)document.Id, JournalNum = 2 }); journal.DocumentId = (int)document.idDocument; journal.JournalNum = 2; journal.NameAddressId = document.DocumentNameAddressId; journal.Memo = document.DocumentMemo; journal.AccountId = (int)LedgerAccount; journal.Amount -= changeInDocumentAmount; journal.Outstanding -= changeInOutstanding; Database.Update(journal); Line line = Database.Get(new Line() { idLine = journal.idJournal }); line.idLine = journal.idJournal; line.LineAmount += PaymentDoc == DocType.BillPayment ? -changeInDocumentAmount : changeInDocumentAmount; Database.Update(line); oldDoc = PaymentGetAudit(document.idDocument); Database.AuditUpdate("Payment", document.idDocument, oldDoc == null ? null : oldDoc.ToJObject(), json.ToJObject()); Database.Commit(); return new AjaxReturn() { message = "Payment saved", id = document.idDocument }; }
public ActualPaymentEventEntity(PaymentDocument paymentDocument, IEnumerable <SalesUnit> salesUnits) { PaymentDocument = paymentDocument; SalesUnits = salesUnits; }
private void GenSalesUnits() { var random = new Random(); var products = new List <Product> { ProductBreakersDrivePprk, ProductVeb110, ProductZng110, ProductZip1 }; var facilityOwners = new List <Company> { CompanyFsk, CompanyMrsk }; var contracts = new List <Contract> { ContractFsk, ContractMrsk, ContractPmk }; var managers = new List <User> { UserIvanov, UserKosolapov, UserGazizov, UserBrehov, UserKolesnik, UserRybin }; var paymentConditionSets = new List <PaymentConditionSet> { PaymentConditionSet50Na50, PaymentConditionSet30Na70 }; for (int projectNum = 0; projectNum < 20; projectNum++) { var manager = managers[random.Next(0, managers.Count)]; var project = new Project { Name = $"Реконструкция ПС №{projectNum}", ProjectType = ProjectTypeReconstruction, Manager = manager }; Projects.Add(project); for (int pr = 0; pr < random.Next(1, 5); pr++) { var product = products[random.Next(0, products.Count)]; var facilityOwner = facilityOwners[random.Next(0, facilityOwners.Count)]; var facility = new Facility { Name = $"Подстанция №{projectNum}", Type = FacilityTypeSubStation, OwnerCompany = facilityOwner, Address = new Address { Locality = LocalityMoscow, Description = "123" } }; int year = random.Next(DateTime.Today.Year - 1, DateTime.Today.Year + 2); int month = random.Next(1, 13); int day = random.Next(1, DateTime.DaysInMonth(year, month) + 1); var deliveryDateExpected = new DateTime(year, month, day); var cost = random.Next(1000, 5000001); var paymentConditionSet = paymentConditionSets[random.Next(0, paymentConditionSets.Count)]; DateTime? signalToStartProduction = null; DateTime? signalToStartProductionDone = null; Order order = null; Company producer = null; string sn = null; Specification specification = null; PriceCalculation priceCalculation = null; PaymentDocument paymentDocument = null; if (deliveryDateExpected < DateTime.Today.AddDays(100)) { if (random.Next(100) < 60) { producer = CompanyUetm; signalToStartProduction = deliveryDateExpected.AddDays(-120); signalToStartProductionDone = deliveryDateExpected.AddDays(-118); order = new Order { DateOpen = signalToStartProductionDone.Value, Number = $"{projectNum}-{pr}" }; specification = new Specification { Number = $"{projectNum+10}", Vat = 20, Contract = contracts[random.Next(0, contracts.Count)], Date = signalToStartProduction.Value }; sn = $"sn-{pr}-{projectNum}"; paymentDocument = new PaymentDocument { Number = $"pd-{pr}-{projectNum}", Vat = 20 }; } else if (random.Next(100) < 60) { producer = random.Next(100) < 70 ? CompanyZeto : CompanyApparat; } priceCalculation = new PriceCalculation { Initiator = UserKosolapov }; priceCalculation.History.Add(new PriceCalculationHistoryItem() { Moment = deliveryDateExpected.AddDays(-140), Type = PriceCalculationHistoryItemType.Start }); priceCalculation.History.Add(new PriceCalculationHistoryItem() { Moment = deliveryDateExpected.AddDays(-130), Type = PriceCalculationHistoryItemType.Finish }); } var salesUnits = new List <SalesUnit>(); for (int salesUnitNum = 0; salesUnitNum < random.Next(1, 100); salesUnitNum++) { var salesUnit = new SalesUnit { Project = project, Product = product, Cost = cost, DeliveryDateExpected = deliveryDateExpected, Facility = facility, PaymentConditionSet = paymentConditionSet, SignalToStartProduction = signalToStartProduction, SignalToStartProductionDone = signalToStartProductionDone, Order = order, OrderPosition = order == null ? null : $"{salesUnitNum + 1}", Producer = producer, PickingDate = signalToStartProductionDone?.Date.AddDays(110), EndProductionDate = signalToStartProductionDone?.Date.AddDays(120), RealizationDate = signalToStartProductionDone?.Date.AddDays(121), ShipmentDate = signalToStartProductionDone?.Date.AddDays(121), DeliveryDate = signalToStartProductionDone?.Date.AddDays(123), StartProductionDate = signalToStartProduction?.Date, EndProductionPlanDate = signalToStartProductionDone?.Date.AddDays(100), SerialNumber = sn == null ? null : $"{sn}-{salesUnitNum}", Specification = specification }; SalesUnits.Add(salesUnit); salesUnits.Add(salesUnit); } if (paymentDocument != null) { PaymentDocuments.Add(paymentDocument); var date = signalToStartProduction.Value.AddDays(7); var sum = cost * random.Next(0, 75) / 100; foreach (var salesUnit in salesUnits) { salesUnit.PaymentsActual.Add(new PaymentActual { Date = date, Sum = sum }); } var payments = salesUnits.SelectMany(x => x.PaymentsActual); paymentDocument.Payments.AddRange(payments); } if (priceCalculation != null) { var salesUnit = salesUnits.First(); var priceCalculationItem = new PriceCalculationItem { RealizationDate = deliveryDateExpected.AddDays(-2), PaymentConditionSet = salesUnit.PaymentConditionSet, OrderInTakeDate = deliveryDateExpected.AddDays(-130) }; priceCalculationItem.SalesUnits.AddRange(salesUnits); priceCalculationItem.StructureCosts.Add(new StructureCost { AmountNumerator = 1, Comment = $"structureCostName-{projectNum}", Number = $"structureCostNumber-{projectNum}", UnitPrice = salesUnit.Cost * random.Next(4, 7) / 10 }); priceCalculation.PriceCalculationItems.Add(priceCalculationItem); PriceCalculations.Add(priceCalculation); } } } }
private PaymentDocument AssignValues(int i) { var pD = new PaymentDocument { //Creator = MainPage.CurrentUser todo }; if (_valuesExcel[i, 5] != null) { pD.DocumentNo = _valuesExcel[i, 5].ToString(); } else { return(null); } if (_valuesExcel[i, 1] != null) { pD.AccountCode = _valuesExcel[i, 1].ToString(); } if (_valuesExcel[i, 4] != null) { var dateString = (_valuesExcel[i, 4].ToString()); var testDate = DateTime.Parse(dateString); pD.DocumentDate = testDate; } if (_valuesExcel[i, 8] != null) { pD.Description = _valuesExcel[i, 8].ToString(); } if (_valuesExcel[i, 9] != null) { pD.Debt = double.Parse(_valuesExcel[i, 9].ToString()); } if (_valuesExcel[i, 10] != null) { pD.Credit = double.Parse(_valuesExcel[i, 10].ToString()); } if (_valuesExcel[i, 11] != null) { pD.Balance = double.Parse(_valuesExcel[i, 11].ToString()); } if (_valuesExcel[i, 2] != null) { var firmName = _valuesExcel[i, 2].ToString(); var firm = DbFactory.CompanyCRUD.GetOne("Name", firmName); if (firm._id == null) { firm = new Company { Name = firmName, AccountCode = pD.AccountCode }; DbFactory.CompanyCRUD.Insert(firm); } pD.Firm = firm; } return(pD); }
/// <summary> /// Retrieve a payment, or prepare a new one /// </summary> PaymentDocument getPayment(int? id) { PaymentHeader header = getDocument<PaymentHeader>(id); if (header.idDocument == null) { header.DocumentTypeId = (int)PaymentDoc; header.DocumentDate = Utils.Today; header.DocumentName = ""; header.DocumentIdentifier = "Payment"; if(Settings.DefaultBankAccount != null) header.DocumentAccountId = (int)Settings.DefaultBankAccount; if (GetParameters["name"].IsInteger()) { JObject name = Database.QueryOne("*", "WHERE idNameAddress = " + GetParameters["name"], "NameAddress"); if (name != null) { checkNameType(name.AsString("Type"), NameType); header.DocumentNameAddressId = name.AsInt("idNameAddress"); header.DocumentAddress = name.AsString("Address"); header.DocumentName = name.AsString("Name"); } } } else { checkDocType(header.DocumentTypeId, PaymentDoc); checkNameType(header.DocumentNameAddressId, NameType); } PaymentDocument previous = new PaymentDocument(); previous.header = header; previous.detail = PaymentListing(header.idDocument, header.DocumentNameAddressId).ToList(); return previous; }
protected abstract void calculatePaymentChanges(PaymentDocument json, decimal amount, out decimal changeInDocumentAmount, out decimal changeInOutstanding);
public AjaxReturn PaymentSave(PaymentDocument json) { decimal amount = 0; Database.BeginTransaction(); PaymentHeader document = json.header; checkDocType(document.DocumentTypeId, PaymentDoc); checkNameType(document.DocumentNameAddressId, NameType); checkAccountIsAcctType(document.DocumentAccountId, AcctType.Bank, AcctType.CreditCard); if (document.idDocument == null) { allocateDocumentIdentifier(document); } PaymentDocument oldDoc = getPayment(document.idDocument); int sign = -SignFor(PaymentDoc); // Update the outstanding on the paid documents foreach (PaymentLine payment in json.detail) { Utils.Check(!SecurityOn || !Settings.RequireAuthorisation || Authorise || NameType != "S" || payment.Authorised > 0, "Cannot pay unauthorised document"); decimal a = payment.AmountPaid; PaymentLine old = oldDoc.PaymentFor(payment.idDocument); if (old != null) { a -= old.AmountPaid; // reduce update by the amount paid last time it was saved } int?docId = payment.idDocument; if (a != 0) { Database.Execute("UPDATE Journal SET Outstanding = Outstanding - " + sign * a + " WHERE DocumentId = " + Database.Quote(docId) + " AND AccountId = " + (int)LedgerAccount); amount += a; } } json.detail = json.detail.Where(l => l.AmountPaid != 0).ToList(); document.DocumentOutstanding = json.header.Remaining; decimal changeInDocumentAmount; decimal changeInOutstanding; // Virtual method, as calculation is different for customers and suppliers calculatePaymentChanges(json, amount, out changeInDocumentAmount, out changeInOutstanding); document.DocumentTypeId = (int)PaymentDoc; Database.Update(document); // Now delete the old cross reference records, and replace with new Database.Execute("DELETE FROM Payments WHERE idPayment = " + document.idDocument); foreach (PaymentLine payment in json.detail) { if (payment.AmountPaid != 0) { Database.Execute("INSERT INTO Payments (idPayment, idPaid, PaymentAmount) VALUES(" + document.idDocument + ", " + payment.idDocument + ", " + payment.AmountPaid + ")"); } } // Journal between bank account and sales/purchase ledger Journal journal = Database.Get(new Journal() { DocumentId = (int)document.Id, JournalNum = 1 }); journal.DocumentId = (int)document.idDocument; journal.JournalNum = 1; journal.NameAddressId = document.DocumentNameAddressId; journal.Memo = document.DocumentMemo; journal.AccountId = document.DocumentAccountId; journal.Amount += changeInDocumentAmount; journal.Outstanding += changeInOutstanding; Database.Update(journal); journal = Database.Get(new Journal() { DocumentId = (int)document.Id, JournalNum = 2 }); journal.DocumentId = (int)document.idDocument; journal.JournalNum = 2; journal.NameAddressId = document.DocumentNameAddressId; journal.Memo = document.DocumentMemo; journal.AccountId = (int)LedgerAccount; journal.Amount -= changeInDocumentAmount; journal.Outstanding -= changeInOutstanding; Database.Update(journal); Line line = Database.Get(new Line() { idLine = journal.idJournal }); line.idLine = journal.idJournal; line.LineAmount += PaymentDoc == DocType.BillPayment ? -changeInDocumentAmount : changeInDocumentAmount; Database.Update(line); oldDoc = PaymentGetAudit(document.idDocument); Database.AuditUpdate("Payment", document.idDocument, oldDoc == null ? null : oldDoc.ToJObject(), json.ToJObject()); Database.Commit(); return(new AjaxReturn() { message = "Payment saved", id = document.idDocument }); }
public SalesUnitPayment(SalesUnit salesUnit, PaymentActual payment, PaymentDocument paymentDocument) { SalesUnit = salesUnit; Payment = payment; PaymentDocument = paymentDocument; }