public BaseFault UploadContract(API.Interface.DataContracts.Contract contract)
 {
     return(UploadContract(new API.Interface.DataContracts.Contract[] { contract }));
 }
 private void UploadSubcontracts(Budget2DataContext context, Guid budgetVersionId, API.Interface.DataContracts.Contract contract, List <Contract> caList, List <Currency> currencyList, Guid parentContractId)
 {
     foreach (var subcontract in contract.Subcontracts)
     {
         Logger.Log.DebugFormat("Обновляем допсоглашение №{0} {1} (Id={2}).", subcontract.Prefix,
                                subcontract.Number, subcontract.Id);
         var parentContractId1 = CreateContract(context, budgetVersionId, subcontract, caList, currencyList,
                                                parentContractId);
         if (!parentContractId1.HasValue)
         {
             continue;
         }
         UploadPaymentPlan(context, budgetVersionId, subcontract, parentContractId1.Value, contract.PaymentPlan.Where(ppi => ppi.DogId == subcontract.Id));
     }
 }
        private Guid?CreateContract(Budget2DataContext context, Guid budgetVersionId, API.Interface.DataContracts.Contract contract, List <Contract> caList, List <Currency> currencyList, Guid?parentContractUid)
        {
            var currContract =
                (from curr in caList where curr.ExternalId == contract.Id && (!parentContractUid.HasValue || curr.ParentId == parentContractUid.Value) select curr).FirstOrDefault();

            if (currContract != null && currContract.IsProtected)
            {
                return(null);
            }

            if (currContract == null)
            {
                #region Если контрагент не найден, то создаём его в системе

                currContract = new Contract
                {
                    Id              = Guid.NewGuid(),
                    Number          = contract.Prefix,
                    NumberId        = contract.Number,
                    IsDeleted       = false,
                    BudgetVersionId = budgetVersionId,
                    FilialId        = DefaultFilialKey,
                    AuthorId        = Guid.Empty,
                    CreateDate      = DateTime.Now
                };
                context.Contracts.InsertOnSubmit(currContract);

                #endregion

                Logger.Log.DebugFormat("Контракт {0} {1} добавлен. ID={2}.", currContract.Number, currContract.NumberId, currContract.Id);
            }
            currContract.ChangedByID             = Guid.Empty;
            currContract.ChangeDate              = DateTime.Now;
            currContract.Number                  = contract.Prefix;
            currContract.NumberId                = contract.Number;
            currContract.Date                    = contract.Date;
            currContract.DateFrom                = contract.DateFrom;
            currContract.DateTo                  = contract.DateTo;
            currContract.DistributionDate        = contract.CompletionDate;
            currContract.Subject                 = contract.Comment;
            currContract.CurrencySum             = contract.Amount;
            currContract.ConditionPayment        = contract.PaymentTerms;
            currContract.CurrencyRateCBPercents  = (double?)(contract.RateCBRPercents.HasValue ? contract.RateCBRPercents.Value / 100 : (decimal?)null);
            currContract.CurrencyRate            = (double?)contract.Rate;
            currContract.StatusId                = (byte)0;
            currContract.ExternalId              = contract.Id;
            currContract.ExternalCustomerId      = contract.CustomerId;
            currContract.ExternalExecutorId      = contract.ExecutorId;
            currContract.ExternalCustomerDetails = contract.CustomerDetails;
            currContract.ExternalExecutorDetails = contract.ExecutorDetails;
            currContract.ExternalManager         = contract.Manager;
            if (parentContractUid.HasValue)
            {
                currContract.ParentId = parentContractUid.Value;
            }

            currContract.ExecutorCounteragentId =
                (from c in context.Counteragents
                 where c.Number == contract.ExecutorId && c.BudgetVersionId == budgetVersionId && !c.IsDeleted && !c.IsPotential
                 select new Nullable <Guid>(c.Id)).FirstOrDefault();

            currContract.CustomerCounteragentId =
                (from c in context.Counteragents
                 where c.Number == contract.CustomerId && c.BudgetVersionId == budgetVersionId && !c.IsDeleted && !c.IsPotential
                 select new Nullable <Guid>(c.Id)).FirstOrDefault();

            currContract.CurrencyId =
                (from c in currencyList
                 where c.Code == contract.Currency && !c.IsDeleted
                 select new Nullable <Guid>(c.Id)).FirstOrDefault();

            Logger.Log.DebugFormat("Контракт {0} обновлен (Id={1}).", currContract.Name, currContract.Id);

            return(currContract.Id);
        }
        private void UploadPaymentPlan(Budget2DataContext context, Guid budgetVersionId, API.Interface.DataContracts.Contract contract, Guid parentContractId, IEnumerable <PaymentPlanItem> paymentPlan)
        {
            var contractMoneyList =
                context.ContractMoneys.Where(p => p.ContractId == parentContractId).ToList();

            context.ContractMoneys.DeleteAllOnSubmit(contractMoneyList);

            if (paymentPlan != null)
            {
                SavePaymentPlan(context, budgetVersionId, paymentPlan, parentContractId);
            }
        }