/// <summary> /// Актуальный расчет ПЗ /// </summary> /// <param name="salesUnit"></param> /// <param name="calculationsAll"></param> /// <returns></returns> public static PriceCalculationItem ActualPriceCalculationItem(this SalesUnit salesUnit, IEnumerable <PriceCalculation> calculationsAll) { var calculations = calculationsAll .Where(priceCalculation => priceCalculation.PriceCalculationItems.ContainsSalesUnit(salesUnit)) .ToList(); //позже всех запущено на расчет var result = calculations .Where(priceCalculation => priceCalculation.TaskOpenMoment.HasValue) .OrderByDescending(priceCalculation => priceCalculation.TaskOpenMoment.Value) .FirstOrDefault(priceCalculation => priceCalculation.PriceCalculationItems.ContainsSalesUnit(salesUnit)) ?.PriceCalculationItems.Single(priceCalculationItem => priceCalculationItem.SalesUnits.ContainsById(salesUnit)); if (result != null) { return(result); } //позже всех дата ОИТ result = calculations .SelectMany(priceCalculation => priceCalculation.PriceCalculationItems) .OrderByDescending(priceCalculationItem => priceCalculationItem.OrderInTakeDate) .FirstOrDefault(priceCalculationItem => priceCalculationItem.SalesUnits.ContainsById(salesUnit)); return(result); }
protected override bool CanBeShown(SalesUnit salesUnit) { return (Filter != null && salesUnit.Specification != null && Filter.Id == salesUnit.Specification.Id); }
public async Task <IActionResult> Create([FromBody] CreateViewModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } SalesUnit modelo = new SalesUnit { Description = model.Description, CompanyId = model.CompanyId, Enabled = true }; _context.SalesUnits.Add(modelo); try { await _context.SaveChangesAsync(); } catch { return(BadRequest()); } return(Ok()); }
/// <summary> /// Актуальный расчет ПЗ /// </summary> /// <param name="unit"></param> /// <param name="unitOfWork"></param> /// <returns></returns> public static PriceCalculationItem ActualPriceCalculationItem(this SalesUnit unit, IUnitOfWork unitOfWork) { var salesUnit = unitOfWork.Repository <SalesUnit>().GetById(unit.Id); var calculations = unitOfWork.Repository <PriceCalculation>().Find(priceCalculation => priceCalculation.PriceCalculationItems.ContainsSalesUnit(salesUnit)); return(salesUnit.ActualPriceCalculationItem(calculations)); }
private void SetPaymentsConditions( SalesUnit salesUnit, PaymentConditionPointEnum point, ref int?daysTo, ref double?payment, ref DateTime?date, ref string paymentType) { var conditions = salesUnit.PaymentConditionSet.PaymentConditions .Where(x => x.PaymentConditionPoint.PaymentConditionPointEnum == point) .OrderBy(x => x.DaysToPoint) .ToList(); if (conditions.Any()) { daysTo = conditions.First().DaysToPoint; payment = SumWithVat * conditions.Sum(x => x.Part); date = salesUnit.GetPaymentDate(conditions.First()); var realization = salesUnit.RealizationDateCalculated; if (date <= realization && date.Value.Year == realization.Year && date.Value.Month == realization.Month) { paymentType = "ТП"; } else { paymentType = date < realization ? "АВ" : "ДЗ"; } } }
/// <summary> /// –еакци¤ на удаление строки проекта /// </summary> /// <param name="salesUnit"></param> protected override void OnAfterRemoveItemEvent(SalesUnit salesUnit) { base.OnAfterRemoveItemEvent(salesUnit); if (CanBeShown(salesUnit)) { RefreshGroups(); } }
public SalesUnitSummary(SalesUnit salesUnit) { Id = salesUnit.Id; Name = salesUnit.Name; Country = salesUnit.Country; Currency = salesUnit.Currency; BookingPriceSum = salesUnit.CalculateBookingSummary(); }
public static IEnumerable <ProductStructure> GenerateProductStructures(SalesUnit salesUnit) { yield return(new ProductStructure(salesUnit.Product)); foreach (var productIncluded in salesUnit.ProductsIncluded) { yield return(new ProductStructure(productIncluded.Product, productIncluded.Amount)); } }
public int?DeliveryTerm(SalesUnit salesUnit) { if (salesUnit.Facility == null) { return(null); } //адрес доставки var locality = salesUnit.AddressDeliveryCalculated.Locality; return(locality == null ? null : _shippingDaysDictionary[locality.Id]); }
private string GetStatus(SalesUnit salesUnit) { if (salesUnit.IsLoosen) { return("Проиграно"); } if (salesUnit.IsWon) { return("Выиграно"); } return(""); }
public void PaymentToStartProductionTest() { SalesUnit salesUnit = new SalesUnit(); SalesUnitWrapper suw = new SalesUnitWrapper(salesUnit); Assert.AreEqual(suw.SumToStartProduction, 0.0); //вносим условие - оплатить до запуска производства double part1 = 25; PaymentCondition paymentCondition1 = new PaymentCondition { Part = part1, DaysToPoint = -7, PaymentConditionPoint = PaymentConditionPoint.ProductionStart }; suw.PaymentsConditions.Add(new PaymentConditionWrapper(paymentCondition1)); Assert.AreEqual(suw.SumToStartProduction, part1 * salesUnit.Cost); //вносим условие - оплатить после запуска производства PaymentCondition paymentCondition2 = new PaymentCondition { Part = part1, DaysToPoint = 10, PaymentConditionPoint = PaymentConditionPoint.ProductionStart }; suw.PaymentsConditions.Add(new PaymentConditionWrapper(paymentCondition2)); Assert.AreEqual(suw.SumToStartProduction, part1 * salesUnit.Cost); //вносим условие - оплатить до окончания производства PaymentCondition paymentCondition3 = new PaymentCondition { Part = part1, DaysToPoint = -5, PaymentConditionPoint = PaymentConditionPoint.ProductionEnd }; suw.PaymentsConditions.Add(new PaymentConditionWrapper(paymentCondition3)); Assert.AreEqual(suw.SumToStartProduction, part1 * salesUnit.Cost); //вносим условие - оплатить до запуска производства double part2 = 20; PaymentCondition paymentCondition4 = new PaymentCondition { Part = part2, DaysToPoint = 0, PaymentConditionPoint = PaymentConditionPoint.ProductionStart }; suw.PaymentsConditions.Add(new PaymentConditionWrapper(paymentCondition4)); Assert.AreEqual(suw.SumToStartProduction, (part1 + part2) * salesUnit.Cost); }
public void InitialMethod() { Product product = new Product { Part = new Part() }; product.Part.Prices.Add(new CostOnDate { Date = DateTime.Today, Cost = 50 }); var salesUnit = new SalesUnit { ProductionUnit = new ProductionUnit { Product = product }, OfferUnit = new OfferUnit(), Cost = 100, ShipmentUnit = new ShipmentUnit { ExpectedDeliveryPeriod = 5 }, Specification = new Specification { Date = DateTime.Today, Vat = 0.2 } }; salesUnit.PaymentsConditions.Add(new PaymentCondition { Part = 0.30, DaysToPoint = -2, PaymentConditionPoint = PaymentConditionPoint.ProductionStart }); salesUnit.PaymentsConditions.Add(new PaymentCondition { Part = 0.10, DaysToPoint = 10, PaymentConditionPoint = PaymentConditionPoint.ProductionStart }); salesUnit.PaymentsConditions.Add(new PaymentCondition { Part = 0.20, DaysToPoint = 20, PaymentConditionPoint = PaymentConditionPoint.ProductionEnd }); salesUnit.PaymentsConditions.Add(new PaymentCondition { Part = 0.15, DaysToPoint = -3, PaymentConditionPoint = PaymentConditionPoint.Shipment }); salesUnit.PaymentsConditions.Add(new PaymentCondition { Part = 0.25, DaysToPoint = 25, PaymentConditionPoint = PaymentConditionPoint.Delivery }); _salesUnit = new SalesUnitWrapper(salesUnit); _salesUnit.ProductionUnit.SalesUnit = _salesUnit; _salesUnit.ShipmentUnit.SalesUnit = _salesUnit; }
public SupervisionWr(SalesUnit product, SalesUnit productSupervision) : this(new Model.POCOs.Supervision { SalesUnit = product, SupervisionUnit = productSupervision }) { IsNew = true; }
public PlanPayment(SalesUnit salesUnit, PaymentPlanned paymentPlanned) { SalesUnit = salesUnit; PaymentPlanned = paymentPlanned; }
protected override bool CanBeShown(SalesUnit salesUnit) { return(Filter != null && Filter.Id == salesUnit.Project.Id); }
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); } } } }
public CommonInfoUnit(SalesUnit salesUnit, IUnitOfWork unitOfWork) { SalesUnit = salesUnit; _unitOfWork = unitOfWork; }
public ProductStructureViewModel(SalesUnit salesUnit) { ProductStructures = ProductStructure.GenerateProductStructures(salesUnit).ToList(); }
public static bool ContainsSalesUnit(this IEnumerable <PriceCalculationItem> items, SalesUnit salesUnit) { return(items.SelectMany(priceCalculationItem => priceCalculationItem.SalesUnits).ContainsById(salesUnit)); }
public static string GetDeliveryAddressString(this SalesUnit salesUnit) { Address address = salesUnit.AddressDeliveryCalculated; return(address == null ? "Адрес не определен." : address.ToString()); }
public SalesUnitPayment(SalesUnit salesUnit, PaymentActual payment, PaymentDocument paymentDocument) { SalesUnit = salesUnit; Payment = payment; PaymentDocument = paymentDocument; }