Exemplo n.º 1
0
        public void Import(IObjectSpace os, String file_name)
        {
            FileHelperEngine <DealDataImport> engine = new FileHelperEngine <DealDataImport>();

            engine.Options.IgnoreFirstLines = 1;
            engine.Options.IgnoreEmptyLines = true;
            //            DealDataImport[] deal_data = engine.ReadStream(reader);
            DealDataImport[]        deal_data      = engine.ReadFile(file_name);
            IList <fmCOrder>        orders         = new List <fmCOrder>();
            IList <crmStage>        stages         = new List <crmStage>();
            IList <crmDeliveryUnit> delivery_units = new List <crmDeliveryUnit>();
            IList <crmDeliveryItem> delivery_items = new List <crmDeliveryItem>();
            IList <crmPaymentUnit>  payment_units  = new List <crmPaymentUnit>();
            IList <crmPaymentItem>  payment_items  = new List <crmPaymentItem>();
            IList <csMaterial>      materials      = os.GetObjects <csMaterial>();

            foreach (DealDataImport record in deal_data)
            {
                fmCOrder        order         = null;
                crmStage        stage         = null;
                crmDeliveryUnit delivery_unit = null;
                crmDeliveryItem delivery_item = null;
                crmPaymentUnit  payment_unit  = null;
                crmPaymentItem  payment_item  = null;
                if (String.IsNullOrEmpty(record.StageCode))
                {
                    throw new ArgumentException("Stage Code is Empty", "StageCode");
                }
                if (record.StageCode.Substring(0, 3) == "Adv")
                {
                    stage = StageStructure.FirstStage;
                }
                else
                {
                    stage = StageStructure.Stages.FirstOrDefault(x => x.Code == record.StageCode);
                    if (stage == null)
                    {
                        stage      = StageStructure.FirstStage.SubStagesCreate();
                        stage.Code = record.StageCode;
                    }
                    if (!stages.Contains(stage))
                    {
                        stage.StageType      = Contract.StageType.FINANCE;
                        stage.DeliveryMethod = DeliveryMethod.UNITS_SHEDULE;
                        stage.PaymentMethod  = PaymentMethod.SCHEDULE;
//                        stage.DateEnd = stage.DateBegin;
//                        stage.DateFinish = stage.DateEnd;
                        stages.Add(stage);
                    }
                }
                if (record.StageCode.Substring(0, 3) != "Adv")
                {
                    if (String.IsNullOrEmpty(record.OrderCode))
                    {
                        throw new ArgumentException("Order Code is Empty", "OrderCode");
                    }
                    order = orders.FirstOrDefault(x => x.Code == record.OrderCode);
                    if (order == null)
                    {
                        order = os.FindObject <fmCOrder>(new BinaryOperator("Code", record.OrderCode, BinaryOperatorType.Equal));
                        if (order == null)
                        {
                            throw new ArgumentException("Order unknow", "OrderCode");
                        }
                        else
                        {
                            orders.Add(order);
                        }
                        stage.Order = order;
                    }
                    if (record.DateContract == null)
                    {
                        throw new ArgumentException("Date Contract is Empty", "DateContract");
                    }
                    delivery_unit = stage.DeliveryPlan.DeliveryUnits.FirstOrDefault(x => x.DatePlane == record.DateContract);
                    if (record.DateContract > stage.DateEnd)
                    {
                        stage.DateEnd = (DateTime)record.DateContract;
                    }
                    if (delivery_unit == null)
                    {
                        delivery_unit           = stage.DeliveryPlan.DeliveryUnitCreate();
                        delivery_unit.DatePlane = (DateTime)record.DateContract;
                    }
                    if (!delivery_units.Contains(delivery_unit))
                    {
                        delivery_units.Add(delivery_unit);
                    }
                    delivery_unit.Order = order;
                    if (record.Count == null)
                    {
                        throw new ArgumentException("Count is Empty", "Count");
                    }
                    if (record.Price == null)
                    {
                        throw new ArgumentException("Price is Empty", "Price");
                    }
                    if (String.IsNullOrEmpty(record.NomenclatureCode))
                    {
                        throw new ArgumentException("Nomenclature Code is Empty", "NomenclatureCode");
                    }
                    if (!record.NomenclatureCode.Contains("*I") && !record.NomenclatureCode.Contains("*E"))
                    {
                        csMaterial material = materials.FirstOrDefault(x => x.CodeTechnical == record.NomenclatureCode);
                        if (material == null)
                        {
                            throw new ArgumentException("Nomenclature unknow", "NomenclatureCode");
                        }
                        delivery_item = delivery_unit.DeliveryItems.FirstOrDefault(x => x.Nomenclature == material);
                        if (delivery_item == null)
                        {
                            delivery_item = delivery_unit.DeliveryItemsCreateMaterial();
                            ((crmDeliveryMaterial)delivery_item).Material = material;
                        }
                        delivery_item.CostCalculateMethod = CostCalculateMethod.CALC_COST;
                        delivery_item.NDSCalculateMethod  = NDSCalculateMethod.FROM_COST;
                        delivery_item.FullCalculateMethod = FullCalculateMethod.CALC_FULL;
                        delivery_item.Price     = (Decimal)record.Price;
                        delivery_item.CountUnit = delivery_item.Nomenclature.BaseUnit;
                        if (delivery_items.Contains(delivery_item))
                        {
                            delivery_item.CountValue += (Decimal)record.Count;
                        }
                        else
                        {
                            delivery_item.CountValue = (Decimal)record.Count;
                            delivery_items.Add(delivery_item);
                        }
                    }
                }
                if (record.DateContract == null)
                {
                    throw new ArgumentException("Date Contract is Empty", "DateContract");
                }
                payment_unit = stage.PaymentPlan.PaymentUnits.FirstOrDefault(x => x.DatePlane == record.DateContract && x is crmPaymentCasheLess);
                if (payment_unit == null)
                {
                    payment_unit           = stage.PaymentPlan.PaymentCasheLessCreate();
                    payment_unit.DatePlane = (DateTime)record.DateContract;
                    if (payment_unit.DatePlane > stage.DateFinish)
                    {
                        stage.DateFinish = payment_unit.DatePlane;
                    }
                }
                if (!payment_units.Contains(payment_unit))
                {
                    ((crmPaymentCasheLess)payment_unit).SummFull = (Decimal)record.SummaPayment;
                    payment_units.Add(payment_unit);
                }
                else
                {
                    ((crmPaymentCasheLess)payment_unit).SummFull += (Decimal)record.SummaPayment;
                }

                //                payment_item = payment_unit.PaymentItems.FirstOrDefault(x => x.Order == order);
                //                if (payment_item == null) {
                //                    payment_item = payment_unit.PaymentItemsCreateMoney();
                //                }
                //if (payment_unit.PaymentItems.Count == 0) {
                //    payment_item = payment_unit.PaymentItemsCreateMoney();
                //}
                //else {
                //    payment_item = payment_unit.PaymentItems[0];
                //}
                //if (payment_items.Contains(payment_item)) {
                //    payment_item.SummFull += (Decimal)record.SummaPayment;
                //    payment_item.AccountSumma += (Decimal)record.SummaPayment;
                //}
                //else {
                //    payment_item.SummFull = (Decimal)record.SummaPayment;
                //    payment_item.AccountSumma = (Decimal)record.SummaPayment;
                //    payment_items.Add(payment_item);
                //}
            }
            IList <crmDeliveryUnit> del_delivery_units = new List <crmDeliveryUnit>();
            IList <crmPaymentUnit>  del_payment_units  = new List <crmPaymentUnit>();

            foreach (crmStage stage in stages)
            {
                foreach (crmDeliveryUnit delivery_unit in stage.DeliveryPlan.DeliveryUnits)
                {
                    if (!delivery_units.Contains(delivery_unit))
                    {
                        del_delivery_units.Add(delivery_unit);
                    }
                }
                foreach (crmPaymentUnit payment_unit in stage.PaymentPlan.PaymentUnits)
                {
                    if (!payment_units.Contains(payment_unit))
                    {
                        del_payment_units.Add(payment_unit);
                    }
                }
            }
            os.Delete(del_delivery_units);
            os.Delete(del_payment_units);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Создание записи регистра План-Факт
        /// </summary>
        /// <param name="scVersion"></param>
        /// <param name="di"></param>
        /// <returns></returns>
        private crmPlaneFactRegister CreatePlaneFactRegister(Session ssn, crmDealWithoutStageVersion scVersion, crmPaymentItem pi)
        {
            crmPlaneFactRegister pfr = new crmPlaneFactRegister(ssn);

            // Используем ((crmDealWithoutStage)scVersion.MainObject).Oid как token (метку для разспознавания набора связанных записей)
            Guid token = ((crmDealWithoutStage)scVersion.MainObject).Oid;

            pfr.Token = token;

            if (scVersion.ContractDeal != null)
            {
                pfr.Contract = scVersion.ContractDeal.Contract;
            }
            pfr.ContractDeal = scVersion.ContractDeal;
            pfr.CostItem     = pi.CostItem;
            pfr.Creditor     = scVersion.Customer.Party;
            pfr.Debitor      = scVersion.Supplier.Party;
            pfr.fmOrder      = pi.Order;
            pfr.Subject      = (pi.Order != null) ? pi.Order.Subject : null;
            pfr.PlaneFact    = PlaneFact.PLAN;

            //!Паша пока без финансовых сделок
            //            if (scVersion.FinancialDeal != null) {
            //                pfr.FinancialDeal = di.FinancialDeal.FinancialDeal;
            //            }

            pfr.Valuta = pi.Valuta;
            pfr.Cost   = pi.SummFull;
            //pfr.CostInRUR = di.Price;  // Надо вычислять с учётом прайса, курса по прайсу и т.п.

            pfr.Nomenclature = pi.Nomenclature;

            return(pfr);
        }
Exemplo n.º 3
0
        private crmCashFlowRegister CreateCFRegister(Session ssn, crmDealWithoutStageVersion scVersion, crmPaymentItem pi)
        {
            crmCashFlowRegister cfr = new crmCashFlowRegister(ssn);

            // Используем ((crmDealWithoutStage)scVersion.MainObject).Oid как token (метку для разспознавания набора связанных записей)
            Guid token = ((crmDealWithoutStage)scVersion.MainObject).Oid;

            cfr.Token = token;

            if (scVersion.ContractDeal != null)
            {
                cfr.Contract = scVersion.ContractDeal.Contract;
            }
            cfr.ContractDeal    = scVersion.ContractDeal;
            cfr.CostItem        = pi.CostItem;
            cfr.PrimaryParty    = scVersion.Customer.Party;
            cfr.ContragentParty = scVersion.Supplier.Party;
            cfr.fmOrder         = pi.Order;
            cfr.Subject         = (pi.Order != null) ? pi.Order.Subject : null;
            //cfr.PlaneFact = PlaneFact.PLAN;
            cfr.Section = CashFlowRegisterSection.CONTRACT_PLAN;

            //!Паша пока без финансовый сделок
            //if (scVersion.FinancialDeal != null) {
            //    cfr.FinancialDeal = pi.FinancialDeal.FinancialDeal;
            //}

            cfr.Valuta = scVersion.Valuta;
            cfr.Cost   = scVersion.Price;
            //cfr.CostInRUR = scVersion.Price;  // Надо вычислять с учётом прайса, курса по прайсу и т.п.

            cfr.PaymentCost   = pi.AccountSumma;
            cfr.PaymentValuta = pi.AccountValuta;

            return(cfr);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Создание записи регистра План-Факт
        /// </summary>
        /// <param name="scVersion"></param>
        /// <param name="di"></param>
        /// <returns></returns>
        private crmPlaneFactRegister CreatePlaneFactCommonRegister(Session ssn, crmDealWithStageVersion scVersion, crmStage stage, crmObligationTransfer obligationItem)
        {
            crmPlaneFactRegister pfr = new crmPlaneFactRegister(ssn);

            // Используем ((crmDealWithoutStage)scVersion.MainObject).Oid как token (метку для разспознавания набора связанных записей)
            Guid token = ((crmDealWithStage)scVersion.MainObject).Oid;

            pfr.Token = token;

            pfr.Contract     = scVersion.ContractDeal.Contract;
            pfr.ContractDeal = scVersion.ContractDeal;
            pfr.CostItem     = scVersion.CostItem;
            pfr.Creditor     = scVersion.Customer.Party;
            pfr.Debitor      = scVersion.Supplier.Party;
            pfr.fmOrder      = scVersion.Order;
            pfr.Subject      = (scVersion.Order != null) ? scVersion.Order.Subject : null;
            pfr.PlaneFact    = PlaneFact.PLAN;
            pfr.Stage        = stage;

            // ??? pfr.CostInRUR = scVersion.;

            //pfr.FinancialDeal - заменяется на финансовый этап
            //!Паша пока без финансовых сделок
            //            if (scVersion.FinancialDeal != null) {
            //                pfr.FinancialDeal = di.FinancialDeal.FinancialDeal;
            //            }

            //pfr.Nomenclature = scVersion.DeliveryUnit.DeliveryItems;   // SHU!!! Не ясно, откуда брать номенклатуру
            //pfr.FinancialDeal = scVersion.FinancialDeal.FinancialDeal;

            //pfr.MeasureUnit = scVersion.Order;
            //pfr.Volume = scVersion.;

            //pfr.Valuta = scVersion.Valuta;
            //pfr.Cost = scVersion.Price;
            //pfr.CostInRUR = scVersion.Price;  // Надо вычислять с учётом прайса, курса по прайсу и т.п.

            pfr.Nomenclature = obligationItem.Nomenclature;

            crmDeliveryItem deliveryItem = obligationItem as crmDeliveryItem;

            if (deliveryItem != null)
            {
                pfr.MeasureUnit = deliveryItem.CountUnit;
                pfr.Volume      = deliveryItem.CountValue;

                pfr.Valuta = deliveryItem.Valuta;
                pfr.Cost   = deliveryItem.Price;
            }

            crmPaymentItem paymentItem = obligationItem as crmPaymentItem;

            if (paymentItem != null)
            {
                pfr.MeasureUnit = null;
                pfr.Volume      = 0;

                pfr.Valuta = paymentItem.Valuta;
                pfr.Cost   = paymentItem.SummFull;
            }

            return(pfr);
        }