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); }
/// <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); }
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); }
/// <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); }