public ShipmentOperation AssertDocumentsIncome(ExampleShipment shipment) { DateTime date = ShipmentDateShipment; var builder = this.GenerateBuilder(shipment, date, shipment.Summ, "DocumentsIncome"); var operation = builder.Build("DocumentsIncome", date, shipment.Summ) as ShipmentOperation; Assert.AreEqual(shipment.Summ, operation.Summ.Value); Assert.AreEqual(date, operation.Date); Assert.AreEqual("DocumentsIncome", operation.Type); //не должно быть комисии Assert.AreEqual(0, operation.Commission.Total); Assert.AreEqual(new Money(shipment.Summ * ((shipment.StatusFinancing) ? shipment.MITComFin : shipment.MITComNoFin)).NotLess(shipment.MITComMin), operation.Commission.MIT); Assert.AreEqual(0, operation.Commission.Body); Assert.AreEqual(0, operation.Commission.Increased); Assert.AreEqual(0, operation.ToCustomer.Summ); Assert.AreEqual(0, operation.ToCustomer.Netting.Summ); Assert.AreEqual(shipment.StatusRegress ? 3 : 2, operation.Postings.Count); Assert.IsTrue(operation.Postings.All(p => p.Summ == shipment.Summ)); Assert.IsTrue(operation.Postings.All(p => p.Date == date)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("478 03") && p.Cred.Number.StartsWith("474 01"))); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("914 18") && p.Cred.Number.StartsWith("999 99") && p.Summ == shipment.Summ)); if (shipment.StatusRegress) Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("914 14") && p.Cred.Number.StartsWith("999 99") && p.Summ == shipment.Summ)); return operation; }
public ExampleShipmentParamsProvider(ExampleShipment shipment, DateTime date, double summ, string type = "") { _shipment = shipment; // _date = date; // _summ = summ; // _type = type; _cacheValues = new Dictionary<CachePack, Value>(); _cacheRates = new Dictionary<CachePack, RateCommission>(); _cacheAccounts = new Dictionary<string, Account>(); }
public ShipmentOperation AssertCustomerFinancing(ExampleShipment shipment) { DateTime date = ShipmentDateShipment; Money summ = shipment.Summ; Money financing = Math.Round(shipment.Summ * shipment.RateFinancing, 2); var builder = this.GenerateBuilder(shipment, date, financing, "CustomerFinansing"); var operation = builder.Build("CustomerFinancing", date, shipment.Summ * shipment.RateFinancing) as ShipmentOperation; Assert.AreEqual(financing, operation.Summ.Value); Assert.AreEqual(date, operation.Date); Assert.AreEqual("CustomerFinansing", operation.Type); //не должно быть комисии Assert.AreEqual(Math.Round(shipment.PrepayCommission * Math.Max(shipment.Summ * shipment.RateCommission, shipment.RateCommissionMin), 2), operation.Commission.Total.Value); Assert.AreEqual(0, operation.Commission.MIT); Assert.AreEqual(0, operation.Commission.Body); Assert.AreEqual(0, operation.Commission.Increased); Assert.AreEqual(shipment.IsAccountCommission407 ? financing : financing - operation.Commission.Total, operation.ToCustomer.Summ); Assert.AreEqual(0, operation.ToCustomer.Netting.Summ); Assert.AreEqual((operation.ToCustomer.Netting.Summ > 0 ? 2 : 1) + (shipment.PrepayCommission > 0 ? (shipment.IsAccountCommission407 ? 3 : 5) : 0), operation.Postings.Count); //Assert.IsTrue(operation.Postings.All(p => p.Summ == shipment.Summ)); //Assert.IsTrue(operation.Postings.All(p => p.Date.Date == date.Date)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 01") && p.Cred.Number.StartsWith("40") && p.Summ == (shipment.IsAccountCommission407 ? financing : financing - operation.Commission.Total))); if (shipment.PrepayCommission > 0) { if (shipment.IsAccountCommission407) Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("40") && p.Cred.Number.StartsWith("474 23"))); else Assert.IsTrue(operation.Postings.Count(p => p.Debt.Number.StartsWith("474 01") && p.Cred.Number.StartsWith("474 23")) == 3); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 23") && p.Cred.Number.StartsWith("603") && p.Summ == operation.Commission.TotalNDS)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 23") && p.Cred.Number.StartsWith("706") && p.Summ == operation.Commission.TotalClear)); } return operation; }
public ShipmentOperation AssertPayment(ExampleShipment shipment, DateTime date) { var builder = this.GenerateBuilder(shipment, date, shipment.Summ, "PaymentDebtor"); var operation = builder.Build("Payment Debtor", date, shipment.Summ) as ShipmentOperation; Assert.AreEqual(shipment.Summ, operation.Summ.Value); Assert.AreEqual(date, operation.Date); Assert.AreEqual("Payment Debtor", operation.Type); //не должно быть комисии Assert.IsTrue(operation.Commission.Total > 0); Assert.AreEqual(0, operation.Commission.MIT); Assert.AreEqual(shipment.DutyCustomer, operation.Commission.Body.Value); Assert.AreEqual(0, operation.Commission.Increased); Assert.AreEqual(shipment.Summ - shipment.DutyCustomer - operation.Commission.Total, operation.ToCustomer.Summ.Value); Assert.AreEqual(0, operation.ToCustomer.Netting.Summ); Assert.AreEqual(shipment.StatusRegress ? 9 : 8, operation.Postings.Count); //Assert.IsTrue(operation.Postings.All(p => p.Summ == shipment.Summ)); Assert.IsTrue(operation.Postings.All(p => p.Date.Date == date.Date)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("612 12") && p.Cred.Number.StartsWith("478 03") && p.Summ == shipment.Summ)); Assert.IsTrue(operation.Postings.Count(p => p.Debt.Number.StartsWith("474 01") && p.Cred.Number.StartsWith("474 23")) == 3); Assert.IsTrue(operation.Postings.Sum(p => (p.Debt.Number.StartsWith("474 01") && p.Cred.Number.StartsWith("474 23")) ? p.Summ : 0) == operation.Commission.Total); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 23") && p.Cred.Number.StartsWith("603") && p.Summ == operation.Commission.TotalNDS)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 23") && p.Cred.Number.StartsWith("706") && p.Summ == operation.Commission.TotalClear)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("474 01") && p.Cred.Number.StartsWith("40") && p.Summ == operation.ToCustomer.Send)); Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("999 99") && p.Cred.Number.StartsWith("914 18") && p.Summ == shipment.Summ)); if (shipment.StatusRegress) Assert.IsTrue(operation.Postings.Any(p => p.Debt.Number.StartsWith("999 99") && p.Cred.Number.StartsWith("914 14") && p.Summ == shipment.Summ)); return operation; //test change }
protected ShipmentOperationBuilder GenerateBuilder(ExampleShipment shipment, DateTime date, double summ, string type="") { var provider = new ExampleShipmentParamsProvider(shipment, date, summ, type); return new ShipmentOperationBuilder(provider); }