Ejemplo n.º 1
0
        /// <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);
 }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        /// <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));
        }
Ejemplo n.º 5
0
        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();
     }
 }
Ejemplo n.º 7
0
 public SalesUnitSummary(SalesUnit salesUnit)
 {
     Id              = salesUnit.Id;
     Name            = salesUnit.Name;
     Country         = salesUnit.Country;
     Currency        = salesUnit.Currency;
     BookingPriceSum = salesUnit.CalculateBookingSummary();
 }
Ejemplo n.º 8
0
        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));
            }
        }
Ejemplo n.º 9
0
        public int?DeliveryTerm(SalesUnit salesUnit)
        {
            if (salesUnit.Facility == null)
            {
                return(null);
            }

            //адрес доставки
            var locality = salesUnit.AddressDeliveryCalculated.Locality;

            return(locality == null
                ? null
                : _shippingDaysDictionary[locality.Id]);
        }
Ejemplo n.º 10
0
        private string GetStatus(SalesUnit salesUnit)
        {
            if (salesUnit.IsLoosen)
            {
                return("Проиграно");
            }

            if (salesUnit.IsWon)
            {
                return("Выиграно");
            }

            return("");
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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;
        }
Ejemplo n.º 13
0
 public SupervisionWr(SalesUnit product, SalesUnit productSupervision) : this(new Model.POCOs.Supervision {
     SalesUnit = product, SupervisionUnit = productSupervision
 })
 {
     IsNew = true;
 }
Ejemplo n.º 14
0
 public PlanPayment(SalesUnit salesUnit, PaymentPlanned paymentPlanned)
 {
     SalesUnit      = salesUnit;
     PaymentPlanned = paymentPlanned;
 }
Ejemplo n.º 15
0
 protected override bool CanBeShown(SalesUnit salesUnit)
 {
     return(Filter != null && Filter.Id == salesUnit.Project.Id);
 }
Ejemplo n.º 16
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 17
0
 public CommonInfoUnit(SalesUnit salesUnit, IUnitOfWork unitOfWork)
 {
     SalesUnit   = salesUnit;
     _unitOfWork = unitOfWork;
 }
 public ProductStructureViewModel(SalesUnit salesUnit)
 {
     ProductStructures = ProductStructure.GenerateProductStructures(salesUnit).ToList();
 }
Ejemplo n.º 19
0
 public static bool ContainsSalesUnit(this IEnumerable <PriceCalculationItem> items, SalesUnit salesUnit)
 {
     return(items.SelectMany(priceCalculationItem => priceCalculationItem.SalesUnits).ContainsById(salesUnit));
 }
Ejemplo n.º 20
0
        public static string GetDeliveryAddressString(this SalesUnit salesUnit)
        {
            Address address = salesUnit.AddressDeliveryCalculated;

            return(address == null ? "Адрес не определен." : address.ToString());
        }
Ejemplo n.º 21
0
 public SalesUnitPayment(SalesUnit salesUnit, PaymentActual payment, PaymentDocument paymentDocument)
 {
     SalesUnit       = salesUnit;
     Payment         = payment;
     PaymentDocument = paymentDocument;
 }