/// <summary>
        /// Пересчет показателей возвратов от клиентов при отмене приемки накладной возврата от клиента
        /// </summary>
        public void ReturnFromClientWaybillFinalizationCancelled(ReturnFromClientWaybill waybill)
        {
            var receiptedIndicators = new List <ReceiptedReturnFromClientIndicator>();

            foreach (var row in waybill.Rows)
            {
                ValidationUtils.Assert(row.SaleWaybillRow.SaleWaybill.Is <ExpenditureWaybill>(),
                                       "Расчет показателя для данного типа накладной реализации еще не реализован.");

                var saleWaybillRow = row.SaleWaybillRow.As <ExpenditureWaybillRow>();

                ValidationUtils.Assert(saleWaybillRow.ReceiptedReturnCount >= row.ReturnCount,
                                       String.Format("Недостаточно возвращенного товара «{0}» для отмены приемки возврата.", row.Article.FullName));

                saleWaybillRow.SetReturnCounts(saleWaybillRow.AcceptedReturnCount + row.ReturnCount,
                                               saleWaybillRow.ReceiptedReturnCount - row.ReturnCount);

                // уменьшаем точное возвращенное от клиента кол-во
                var receiptedIndicator = CreateReceiptedReturnFromClientIndicator(waybill.ReceiptDate.Value, row, -1);
                receiptedIndicators.Add(receiptedIndicator);
            }

            receiptedReturnFromClientIndicatorService.Update(waybill.ReceiptDate.Value, waybill.Deal.Id, waybill.Curator.Id,
                                                             returnFromClientWaybillRepository.GetArticleBatchesSubquery(waybill.Id), receiptedIndicators);
        }
Esempio n. 2
0
        public Guid Save(ReturnFromClientWaybill returnFromClientWaybill)
        {
            // если номер генерируется автоматически
            if (returnFromClientWaybill.Number == "")
            {
                var lastDocumentNumbers = returnFromClientWaybill.Recipient.GetLastDocumentNumbers(returnFromClientWaybill.Date.Year);
                var number = lastDocumentNumbers.ReturnFromClientWaybillLastNumber + 1;

                // пока не найдем уникальный номер
                while (!IsNumberUnique(number.ToString(), Guid.Empty, returnFromClientWaybill.Date, returnFromClientWaybill.Recipient))
                {
                    number = number + 1;
                }

                returnFromClientWaybill.Number = number.ToString();
                lastDocumentNumbers.ReturnFromClientWaybillLastNumber = number;
            }
            else
            {
                ValidationUtils.Assert(IsNumberUnique(returnFromClientWaybill.Number, returnFromClientWaybill.Id, returnFromClientWaybill.Date, returnFromClientWaybill.Recipient),
                                       String.Format("Накладная с номером {0} уже существует. Укажите другой номер.", returnFromClientWaybill.Number));
            }

            //Проверяем имеет ли указанная команда реализации в указанной сделке
            var teamList = dealRepository.GetTeamListFromSales(returnFromClientWaybill.Deal.Id);

            ValidationUtils.Assert(teamList.Contains(returnFromClientWaybill.Team),
                                   String.Format("Команда «{0}» не имеет реализаций в сделке «{1}».", returnFromClientWaybill.Team.Name, returnFromClientWaybill.Deal.Name));

            returnFromClientWaybillRepository.Save(returnFromClientWaybill);

            return(returnFromClientWaybill.Id);
        }
Esempio n. 3
0
        /// <summary>
        /// Проводка
        /// </summary>
        /// <returns>true - дата начала действия была автоматически изменена на текущую</returns>
        public virtual bool Accept(DateTime currentDateTime)
        {
            CheckPossibilityToAccept();

            bool dateChanged = CheckAndCorrectDates(currentDateTime);

            State          = AccountingPriceListState.Accepted;
            AcceptanceDate = currentDateTime;

            foreach (var articlePrice in ArticlePrices) // "забываем", что не получилось использовать заданные правила расчета учетной цены
            {
                articlePrice.ErrorLastDigitCalculation       = false;
                articlePrice.ErrorAccountingPriceCalculation = false;
            }

            // если дата начала действия РЦ меньше даты проводки - устанавливаем дату начала действия равной дате проводке
            if (StartDate < AcceptanceDate)
            {
                StartDate = AcceptanceDate.Value;
            }

            ValidationUtils.Assert(EndDate == null || EndDate > StartDate, "Дата окончания действия реестра цен должна быть больше текущей даты.");

            return(dateChanged);
        }
Esempio n. 4
0
        public virtual void CheckPossibilityToDelete()
        {
            ValidationUtils.Assert(MovementWaybill.IsDraft,
                                   String.Format("Невозможно удалить позицию из накладной со статусом «{0}».", MovementWaybill.State.GetDisplayName()));

            ValidationUtils.Assert(!AreOutgoingWaybills, "Невозможно удалить позицию, так как по ней уже создана позиция другой исходящей накладной.");
        }
Esempio n. 5
0
        public void CheckPossibilityToPrintFormInPurchaseCosts(ReturnFromClientWaybill waybill, User user)
        {
            CheckPossibilityToPrintForms(waybill, user);

            ValidationUtils.Assert(user.HasPermission(Permission.PurchaseCost_View_ForEverywhere),
                                   "Недостаточно прав для просмотра закупочных цен.");
        }
        private void PopulateSchemaId(ValidationError error)
        {
            ValidationUtils.Assert(Schema != null);

            if (error.SchemaId != null)
            {
                return;
            }

            Uri?schemaId = null;

            for (int i = 0; i < Schema.KnownSchemas.Count; i++)
            {
                KnownSchema s = Schema.KnownSchemas[i];
                if (s.Schema == error.Schema)
                {
                    schemaId = s.Id;
                    break;
                }
            }

            error.SchemaId = schemaId;

            // property getter will lazy create a new list
            // don't create child error list unneeded
            if (error._childErrors != null)
            {
                for (int i = 0; i < error._childErrors.Count; i++)
                {
                    ValidationError validationError = error._childErrors[i];
                    PopulateSchemaId(validationError);
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Добавление квоты по сделке
        /// </summary>
        /// <param name="quota">Квота по сделке</param>
        public virtual void AddQuota(DealQuota quota)
        {
            CheckPossibilityToAddQuota();

            ValidationUtils.Assert(quota.IsActive, "Невозможно добавить недействующую квоту.");
            quotas.Add(quota);
        }
Esempio n. 8
0
        /// <summary>
        /// Окончательное согласование накладной. Принимает (при необходимости переустановить учетные цены для строчек расхождений) коллекцию учетных цен.
        /// </summary>
        /// <param name="totalApproveSum">Согласованная сумма накладной</param>
        /// <param name="articleAccountingPriceList">Коллекция учетных цен. Необязательный параметр. При передаче - установи данные цены на строчки с расхождениями.</param>
        /// <param name="approvementDate">Дата согласования. Необязательный параметр. При передаче - установит дату согласования накладной.</param>
        public virtual void Approve(decimal totalApproveSum, User approvedBy, DateTime approvementDate, IEnumerable <ArticleAccountingPrice> accountingPrices = null)
        {
            CheckPossibilityToApprove();
            ValidationUtils.Assert(totalApproveSum >= 0, "Согласованная сумма накладной не может быть меньше 0.");
            ValidationUtils.CheckDecimalScale(totalApproveSum, 2, "Согласованная сумма накладной должна иметь не более 2 знаков после запятой.");
            ValidationUtils.Assert(totalApproveSum == ApprovedSumByRows, "Сумма накладной не сходится с суммой по позициям.");

            ApprovedSum     = totalApproveSum;
            ApprovementDate = approvementDate;
            ApprovedBy      = approvedBy;

            foreach (var row in Rows.Where(x => x.AreDivergencesAfterReceipt))
            {
                // копируем закупочные цены, указанные при согласовании, в текущие
                row.PurchaseCost = row.ApprovedPurchaseCost.Value;

                if (row.PendingCount == 0)
                {   // Доустановим учетные цены для товаров, добавленных при согласовании
                    ValidationUtils.NotNull(accountingPrices, "Невозможно выполнить согласование, так как не удалось получить учетную цену.");
                    var articleAccountingPrice = accountingPrices.FirstOrDefault(x => x.Article == row.Article);
                    ValidationUtils.NotNull(articleAccountingPrice, String.Format("Невозможно выполнить согласование, так как на товар «{0}» не установлена учетная цена.",
                                                                                  row.Article.FullName));
                    row.RecipientArticleAccountingPrice = articleAccountingPrice;
                }

                // переводим кол-во по позиции в доступное для резервирования
                row.AvailableToReserveCount = row.ApprovedCount.Value;
            }

            State = ReceiptWaybillState.ApprovedFinallyAfterDivergences; // TODO почему так? Надо как-то передавать сюда обстоятельства и выставлять правильный State
        }
Esempio n. 9
0
        public ProductionOrderBatchRow(Article article, Currency currency, decimal productionOrderBatchRowCostInCurrency,
                                       decimal count, decimal packWeight, Country producerCountry, Manufacturer manufacturer)
        {
            ValidationUtils.Assert(count > 0, "Количество производимого товара должно быть положительным числом.");
            ValidationUtils.Assert(packWeight > 0, "Вес упаковки должен быть положительным числом.");
            ValidationUtils.Assert(productionOrderBatchRowCostInCurrency >= 0, "Невозможно создать позицию партии заказа с отрицательной суммой.");

            CreationDate = DateTime.Now;
            Article      = article;

            Currency = currency;
            ProductionOrderBatchRowCostInCurrency = productionOrderBatchRowCostInCurrency;
            Count = count;

            ProductionCountry = producerCountry;
            this.manufacturer = manufacturer;

            // По умолчанию размеры берутся из товара
            PackLength = article.PackLength;
            PackHeight = article.PackHeight;
            PackWidth  = article.PackWidth;
            PackVolume = article.PackVolume;

            PackWeight = packWeight;

            OrdinalNumber = int.MaxValue;
        }
Esempio n. 10
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="task">Задача</param>
        /// <param name="executionState">Статус задачи</param>
        /// <param name="completionPercentage">% выполнения</param>
        /// <param name="createdBy">Пользователь, создавший исполение</param>
        /// <param name="creationDate">Дата создания</param>
        /// <param name="date">Дата исполнения</param>
        public TaskExecutionItem(Task task, TaskType taskType, TaskExecutionState executionState, byte completionPercentage, User createdBy, bool isCreatedByUser, DateTime creationDate, DateTime date)
        {
            ValidationUtils.NotNull(task, "Необходимо указать задачу, к которой относится исполнение.");
            ValidationUtils.NotNull(createdBy, "Необходимо указать пользователя, создавшего исполнение.");
            ValidationUtils.Assert(taskType.States.Contains(executionState), String.Format("Статус исполнения «{0}» не допустим для типа задачи «{1}».", executionState.Name, taskType.Name));

            history           = new HashedSet <TaskExecutionHistoryItem>();
            resultDescription = "";
            spentTime         = 0;

            task.AddExecutionItem(this);    //Добавляем исполнение в задачу

            Task = task;

            this.taskType       = taskType;
            this.executionState = executionState;

            CreatedBy    = createdBy;
            CreationDate = creationDate;

            this.completionPercentage = completionPercentage;

            IsCreatedByUser = isCreatedByUser;
            this.date       = date;

            isDateChanged         = isDeletionDateChanged = isResultDescriptionChanged = isSpentTimeChanged = isCompletionPercentageChanged = isExecutionStateChanged =
                isTaskTypeChanged = true;

            Task.UpdateByLastExecution();
            Task.UpdateTaskExecutionState(this);
            Task.UpdateCompletionPercentage(this);
            Task.FactualSpentTime += spentTime;
        }
Esempio n. 11
0
 public virtual void CheckPossibilityToEdit()
 {
     ValidationUtils.Assert(!IsCreatedFromProductionOrderBatch, "Невозможно изменить накладную, созданную по партии заказа.");
     ValidationUtils.Assert(!IsApproved, "Невозможно изменить окончательно согласованную накладную.");
     ValidationUtils.Assert(!IsReceipted, "Невозможно изменить принятую на склад накладную.");
     ValidationUtils.Assert(!IsAccepted, "Невозможно изменить проведенную накладную.");
 }
        public ProductionOrderCustomsDeclaration(string name, DateTime date, decimal importCustomsDutiesSum, decimal exportCustomsDutiesSum, decimal valueAddedTaxSum,
                                                 decimal exciseSum, decimal customsFeesSum, decimal customsValueCorrection)
        {
            CreationDate = DateTime.Now;

            ValidationUtils.Assert(!String.IsNullOrEmpty(name), "Название не указано.");
            ValidationUtils.Assert(importCustomsDutiesSum >= 0, "Ввозные таможенные пошлины не могут быть отрицательной величиной.");
            ValidationUtils.Assert(exportCustomsDutiesSum >= 0, "Вывозные таможенные пошлины не могут быть отрицательной величиной.");
            ValidationUtils.Assert(exciseSum >= 0, "Акциз не может быть отрицательной величиной.");
            ValidationUtils.Assert(customsFeesSum >= 0, "Таможенные сборы не могут быть отрицательной величиной.");
            ValidationUtils.Assert(!(importCustomsDutiesSum == 0 && exportCustomsDutiesSum == 0 && valueAddedTaxSum == 0 && exciseSum == 0 && customsFeesSum == 0 &&
                                     customsValueCorrection == 0), "Все суммы не могут быть равны 0.");

            Name      = name;
            this.date = date;
            ImportCustomsDutiesSum = importCustomsDutiesSum;
            ExportCustomsDutiesSum = exportCustomsDutiesSum;
            ValueAddedTaxSum       = valueAddedTaxSum;
            ExciseSum              = exciseSum;
            CustomsFeesSum         = customsFeesSum;
            CustomsValueCorrection = customsValueCorrection;
            Comment = String.Empty;
            CustomsDeclarationNumber = String.Empty;

            payments = new HashedSet <ProductionOrderCustomsDeclarationPayment>();
        }
Esempio n. 13
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="topic">Тема задачи</param>
        /// <param name="type">Тип задачи</param>
        /// <param name="priority">Приоритет задачи</param>
        /// <param name="state">Стастус задачи</param>
        /// <param name="createdBy">Пользователь, создавший задачу</param>
        public Task(string topic, TaskType type, TaskPriority priority, TaskExecutionState state, DateTime creationDate, User createdBy)
        {
            ValidationUtils.Assert(!String.IsNullOrEmpty(topic), "Необходимо указать тему задачи.");
            ValidationUtils.NotNull(type, "Необходимо указать тип задачи.");
            ValidationUtils.NotNull(priority, "Необходимо указать приоритет задачи.");
            ValidationUtils.NotNull(state, "Необходимо указать статус задачи.");
            ValidationUtils.NotNull(createdBy, "Необходимо указать пользователя, создавшего задачу.");
            ValidationUtils.Assert(type.States.Contains(state), String.Format("Статус исполнения задачи «{0}» не допустим для типа задачи «{1}».", state.Name, type.Name));

            Topic          = topic;
            Type           = type;
            ExecutionState = state;
            Priority       = priority;
            CreatedBy      = createdBy;
            CreationDate   = creationDate;
            Description    = "";

            history          = new HashedSet <TaskHistoryItem>();
            executionHistory = new HashedSet <TaskExecutionItem>();

            // Устанавливаем признак изменения полей (чтобы они все попали как первое изменение задачи в историю)
            isContractorChanged = isDeadLineChanged = isDealChanged = isDeletionDateChanged = isDescriptionChanged = isExecutedByChanged =
                isFactualCompletionDateChanged = isFactualSpentTimeChanged = isFactualStartDateChanged = isPriorityChanged = isProductionOrderChanged =
                    isStartDateChanged         = isTopicChanged = isTypeChanged = true;
        }
Esempio n. 14
0
        /// <summary>
        /// Добавление пользователя в аккаунт клиента
        /// </summary>
        /// <param name="clientUser"></param>
        public virtual void AddUser(ClientUser clientUser)
        {
            ValidationUtils.Assert(!Users.Any(x => x.Login == clientUser.Login), "Пользователь с данным логином уже принадлежит аккаунту клиента.");

            users.Add(clientUser);
            clientUser.Client = this;
        }
Esempio n. 15
0
        /// <summary>
        /// Проверка, видна ли накладная куратору
        /// </summary>
        /// <param name="writeoffWaybill">Накладная</param>
        /// <param name="curator">Куратор</param>
        public override void CheckPossibilityToViewDetailsByUser(WriteoffWaybill writeoffWaybill, User curator)
        {
            var storages = curator.Teams.SelectMany(x => x.Storages);
            var result   = false;

            switch (curator.GetPermissionDistributionType(Permission.WriteoffWaybill_List_Details))
            {
            case PermissionDistributionType.None:
                result = false;
                break;

            case PermissionDistributionType.Personal:
                result = storages.Contains(writeoffWaybill.SenderStorage) && writeoffWaybill.Curator == curator;
                break;

            case PermissionDistributionType.Teams:
                result = storages.Contains(writeoffWaybill.SenderStorage);
                break;

            case PermissionDistributionType.All:
                result = true;
                break;
            }
            ValidationUtils.Assert(result, "Куратор накладной должен имееть право на ее просмотр.");
        }
Esempio n. 16
0
        /// <summary>
        /// Конструктор для копирования при разделении партии заказа
        /// </summary>
        public ProductionOrderBatchRow(ProductionOrderBatchRow productionOrderBatchRow, decimal productionOrderBatchRowCostInCurrency,
                                       decimal count, int ordinalNumber)
        {
            ValidationUtils.Assert(count > 0, "Количество производимого товара должно быть положительным числом.");
            ValidationUtils.Assert(productionOrderBatchRowCostInCurrency >= 0, "Невозможно создать позицию партии заказа с отрицательной суммой.");

            CreationDate = DateTime.Now;
            article      = productionOrderBatchRow.Article;

            this.ArticleMeasureUnitScale = productionOrderBatchRow.ArticleMeasureUnitScale;
            this.PackSize = productionOrderBatchRow.PackSize;

            this.Count = count;
            this.ProductionOrderBatchRowCostInCurrency = productionOrderBatchRowCostInCurrency;

            this.Currency          = productionOrderBatchRow.Currency;
            this.Manufacturer      = productionOrderBatchRow.Manufacturer;
            this.PackHeight        = productionOrderBatchRow.PackHeight;
            this.PackLength        = productionOrderBatchRow.PackLength;
            this.PackWeight        = productionOrderBatchRow.PackWeight;
            this.PackWidth         = productionOrderBatchRow.PackWidth;
            this.ProductionCountry = productionOrderBatchRow.ProductionCountry;

            OrdinalNumber = ordinalNumber;
        }
Esempio n. 17
0
        public void Save(WriteoffWaybill waybill)
        {
            // если номер генерируется автоматически
            if (waybill.Number == "")
            {
                var lastDocumentNumbers = waybill.Sender.GetLastDocumentNumbers(waybill.Date.Year);
                var number = lastDocumentNumbers.WriteoffWaybillLastNumber + 1;

                // пока не найдем уникальный номер
                while (!IsNumberUnique(number.ToString(), Guid.Empty, waybill.Date, waybill.Sender))
                {
                    number = number + 1;
                }

                waybill.Number = number.ToString();
                lastDocumentNumbers.WriteoffWaybillLastNumber = number;
            }
            else
            {
                ValidationUtils.Assert(IsNumberUnique(waybill.Number, waybill.Id, waybill.Date, waybill.Sender),
                                       String.Format("Накладная с номером {0} уже существует. Укажите другой номер.", waybill.Number));
            }

            writeoffWaybillRepository.Save(waybill);
        }
Esempio n. 18
0
        public void CheckPossibilityToEditOrganization(Provider provider, ProviderContract contract, User user)
        {
            // права
            CheckPermissionToPerformOperation(provider, user, Permission.Provider_ProviderContract_Edit);

            ValidationUtils.Assert(!providerContractRepository.AnyReceipts(contract), "Невозможно редактировать организации в договоре, по которому уже есть приходы.");
        }
        public void RaiseError(ValidationError error)
        {
            // shared cache information that could be read/populated from multiple threads
            // lock to ensure that only one thread writes known schemas
            if (!_knownSchemasPopulated)
            {
                ValidationUtils.Assert(Schema != null);
                lock (Schema.KnownSchemas)
                {
                    if (!_knownSchemasPopulated)
                    {
                        if (Schema.KnownSchemas.Count == 0)
                        {
                            JSchemaDiscovery discovery = new JSchemaDiscovery(Schema, Schema.KnownSchemas, KnownSchemaState.External);
                            discovery.Discover(Schema, null);
                        }

                        _knownSchemasPopulated = true;
                    }
                }
            }

            PopulateSchemaId(error);

            SchemaValidationEventHandler?handler = ValidationEventHandler;

            if (handler != null)
            {
                handler(_publicValidator, new SchemaValidationEventArgs(error));
            }
            else
            {
                throw JSchemaValidationException.Create(error);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Проверка возможности удаления договора
        /// </summary>
        /// <param name="providerContract">код договора</param>
        /// <param name="provider">код поставщика, которому принадлежит договор</param>
        public void CheckPossibilityToDeleteContract(Provider provider, ProviderContract providerContract, User user)
        {
            // права
            CheckPermissionToPerformOperation(provider, user, Permission.Provider_ProviderContract_Delete);

            ValidationUtils.Assert(!providerContractRepository.AnyReceipts(providerContract), "Невозможно удалить договор, так как по нему существуют приходные накладные.");
        }
Esempio n. 21
0
 /// <summary>
 /// Проверка разрешения на редактирование договора по сделке
 /// </summary>
 public virtual void CheckPossibilityToChangeContract()
 {
     ValidationUtils.NotNull(Contract, "Договор по данной сделке еще не создан.");
     ValidationUtils.Assert(
         Stage.ContainsIn(DealStage.ClientInvestigation, DealStage.CommercialProposalPreparation, DealStage.Negotiations, DealStage.ContractSigning), 
         String.Format("Невозможно отредактировать договор по сделке со статусом «{0}».", Stage.GetDisplayName()));
 }
Esempio n. 22
0
        /// <summary>
        /// Проверка возможности отгрузки товара по накладной
        /// </summary>
        public virtual void CheckPossibilityToShip()
        {
            ValidationUtils.Assert(State == ExpenditureWaybillState.ReadyToShip,
                                   String.Format("Невозможно отгрузить товар по накладной из состояния «{0}».", State.GetDisplayName()));

            ValidationUtils.Assert(!IsPrepayment || IsFullyPaid, "Невозможно отгрузить неоплаченную накладную с предоплатой.");
        }
Esempio n. 23
0
        public void CheckPossibilityToPrintFormInSalePrices(ReturnFromClientWaybill waybill, User user)
        {
            CheckPossibilityToPrintForms(waybill, user);

            ValidationUtils.Assert(user.HasPermissionToViewStorageAccountingPrices(waybill.RecipientStorage),
                                   "Недостаточно прав для просмотра отпускных цен.");
        }
Esempio n. 24
0
        /// <summary>
        /// Удаление курса валюты
        /// </summary>
        /// <param name="rate">Курс валюты</param>
        public virtual void RemoveRate(CurrencyRate rate)
        {
            ValidationUtils.NotNull(rate, String.Format("Указан недопустимый курс для валюты «{0}».", Name));
            ValidationUtils.Assert(rates.Contains(rate), String.Format("Указанный курс не принадлежит валюте «{0}».", Name));

            rates.Remove(rate);
        }
Esempio n. 25
0
        /// <summary>
        /// Проверка, видна ли накладная куратору
        /// </summary>
        /// <param name="returnFromClientWaybill">Накладная</param>
        /// <param name="curator">Куратор</param>
        public override void CheckPossibilityToViewDetailsByUser(ReturnFromClientWaybill returnFromClientWaybill, User curator)
        {
            var deals  = curator.Teams.SelectMany(x => x.Deals);
            var result = false;

            switch (curator.GetPermissionDistributionType(Permission.ReturnFromClientWaybill_List_Details))
            {
            case PermissionDistributionType.None:
                result = false;
                break;

            case PermissionDistributionType.Personal:
                result = deals.Contains(returnFromClientWaybill.Deal) && returnFromClientWaybill.Curator == curator;
                break;

            case PermissionDistributionType.Teams:
                result = deals.Contains(returnFromClientWaybill.Deal);
                break;

            case PermissionDistributionType.All:
                result = true;
                break;
            }
            ValidationUtils.Assert(result, "Куратор накладной должен имееть право на ее просмотр.");
        }
Esempio n. 26
0
        public void CheckPossibilityToPrintFormInRecipientAccountingPrices(MovementWaybill waybill, User user)
        {
            CheckPossibilityToPrintForms(waybill, user);

            ValidationUtils.Assert(user.HasPermissionToViewStorageAccountingPrices(waybill.RecipientStorage),
                                   "Недостаточно прав для просмотра учетных цен получателя.");
        }
Esempio n. 27
0
        /// <summary>
        /// Получить предполагаемую дату конца этапа (с учетом всего), только дата (без времени)
        /// </summary>
        /// <param name="currentDate">Текущая дата</param>
        public virtual DateTime CalculateSupposedEndDate(DateTime currentDate)
        {
            // Если этап уже завершен, возвращаем реальную дату конца
            if (ActualEndDate.HasValue)
            {
                return(ActualEndDate.Value.Date);
            }

            ValidationUtils.Assert(!Batch.IsClosed || Batch.IsClosedSuccessfully,
                                   "Невозможно рассчитать предполагаемую дату конца незавершенного этапа для неуспешно закрытой партии заказа.");

            // Значит, текущий этап - это данный (или текущий идет раньше данного)
            // Вычисляем предполагаемую дату конца текущего этапа, а потом прибавляем к ней планируемые длительности этапов после него до данного этапа
            short    currentStageOrdinalNumber   = Batch.CurrentStage.OrdinalNumber;
            DateTime currentStageSupposedEndDate = Batch.CurrentStage.ExpectedEndDate.Value;

            // Если текущий этап просрочен, считаем, что он завершится сегодня
            if (currentDate.Date > currentStageSupposedEndDate)
            {
                currentStageSupposedEndDate = currentDate.Date;
            }

            foreach (var stage in Batch.Stages.Where(x => x.OrdinalNumber > currentStageOrdinalNumber &&
                                                     x.OrdinalNumber <= OrdinalNumber && x.PlannedDuration.HasValue).OrderBy(x => x.OrdinalNumber))
            {
                currentStageSupposedEndDate = stage.AddDays(currentStageSupposedEndDate, stage.PlannedDuration.Value);
            }

            return(currentStageSupposedEndDate);
        }
Esempio n. 28
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">Приоритет</param>
        /// <param name="ordinalNumber">Порядковый номер (для сортировки)</param>
        public TaskPriority(string name, short ordinalNumber)
        {
            ValidationUtils.Assert(!String.IsNullOrEmpty(name), "Необходимо указать название приоритета задачи.");

            Name          = name;
            OrdinalNumber = ordinalNumber;
        }
        /// <summary>
        /// Проверка на возможность удаления
        /// </summary>
        /// <param name="organization"></param>
        /// <returns></returns>
        private void CheckPossibilityToDelete(AccountOrganization organizationToDelete, User user)
        {
            userService.CheckPermission(user, Permission.AccountOrganization_Delete);

            var receiptWaybillList = receiptWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(receiptWaybillList, 3, "приходной накладной", "и еще в {0} приходных накладных");

            var movementWaybillList = movementWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(movementWaybillList, 3, "накладной перемещения", "и еще в {0} накладных перемещения");

            var changeOwnerWaybillList = changeOwnerWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(changeOwnerWaybillList, 3, "накладной смены собственника", "и еще в {0} накладных смены собственника");

            var writeoffWaybillList = writeoffWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(writeoffWaybillList, 3, "накладной списания", "и еще в {0} накладных списания");

            var expenditureWaybillList = expenditureWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(expenditureWaybillList, 3, "накладной реализации", "и еще в {0} накладных реализации");

            var returnFromClientWaybillList = returnFromClientWaybillRepository.GetList(organizationToDelete);

            GetExceptionString(returnFromClientWaybillList, 3, "накладной возврата от клиента", "и еще в {0} накладных возврата от клиента");

            // Проверяем наличие договоров с участием организации
            ValidationUtils.Assert(!contractRepository.AnyContracts(organizationToDelete), "Невозможно удалить организацию, так как она используется в договорах.");
        }
Esempio n. 30
0
        /// <summary>
        /// Подсчет количества строк c отложенным исполнением запроса
        /// </summary>
        /// <param name="LazyExecution">Признак необходимости отложенного исполнения</param>
        /// <remarks>ВАЖНО: Если отложенное исполнение не требуется, необходимо использовать другую перегрузку метода!</remarks>
        public ICriteria <T> Count(bool LazyExecution = true)
        {
            ValidationUtils.Assert(LazyExecution, "Если отложенное исполнение не требуется, необходимо использовать другую перегрузку метода Count.");
            extraCondition = ExtraCondition.Count;

            return(this);
        }