/// <summary>
        /// Смена собственника (отгрузка)
        /// </summary>
        /// <param name="waybill"></param>
        private void ChangeOwner(ChangeOwnerWaybill waybill, DateTime currentDateTime)
        {
            // регулярная проверка - появились ли РЦ для переоценки
            articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime);

            // За текущую дату принимаем максимальную из переданной даты и даты проводки.
            // Необходимо, т.к. при приемке прихода задним числом сюда приходит дата приемки прихода.
            // А она может быть меньше даты проводки накладной смены собственника.
            currentDateTime = currentDateTime > waybill.AcceptanceDate ? currentDateTime : waybill.AcceptanceDate.Value;

            waybill.ChangeOwner(currentDateTime);

            changeOwnerWaybillRepository.Save(waybill);

            articleMovementService.FinallyMoveAcceptedArticles(waybill);

            //Пересчет показателей точного наличия и проведенного наличия
            articleAvailabilityService.ChangeOwnerWaybillOwnerChanged(waybill,
                                                                      articleMovementService.GetOutgoingWaybillRows(changeOwnerWaybillRepository.GetRowsSubQuery(waybill.Id)));

            // TODO: добавить пересчет финансовых показателей и счетчиков операций

            // расчет переоценок по принятым позициям
            articleRevaluationService.ChangeOwnerWaybillFinalized(waybill);

            changeOwnerWaybillRepository.Save(waybill);

            articleMovementService.UpdateOutgoingWaybillsStates(waybill, waybill.ChangeOwnerDate);
        }
Пример #2
0
        /// <summary>
        /// Отмена приемки
        /// </summary>
        public virtual void CancelReceipt(MovementWaybill waybill, User user, DateTime currentDateTime)
        {
            // регулярная проверка - не появились ли РЦ для переоценки
            articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime);

            CheckPossibilityToCancelReceipt(waybill, user);

            // Пересчет показателей точного и проведенного наличия
            articleAvailabilityService.MovementWaybillReceiptCanceled(waybill,
                                                                      articleMovementService.GetOutgoingWaybillRows(movementWaybillRepository.GetRowsSubQuery(waybill.Id)));

            // пересчет показателей переоценки
            articleRevaluationService.MovementWaybillReceiptCancelled(waybill);

            // пересчет финансовых показателей
            factualFinancialArticleMovementService.MovementWaybillReceiptCancelled(waybill);

            //Пересчитываем счетчики количеств операций
            articleMovementOperationCountService.WaybillFinalizationCancelled(waybill);

            waybill.CancelReceipt();

            articleMovementService.CancelArticleFinalMoving(waybill);

            movementWaybillRepository.Save(waybill);

            articleMovementService.UpdateOutgoingWaybillsStates(waybill, waybill.ReceiptDate);
        }
Пример #3
0
        /// <summary>
        /// Отмена приемки накладной
        /// </summary>
        /// <param name="waybill">Накладная</param>
        public void CancelReceipt(ReturnFromClientWaybill waybill, User user, DateTime currentDateTime)
        {
            // регулярная проверка - появились ли РЦ для переоценки
            articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime);

            CheckPossibilityToCancelReceipt(waybill, user);

            // Пересчет показателей входящего проведенного и точного наличия
            articleAvailabilityService.ReturnFromClientWaybillReceiptCanceled(waybill,
                                                                              articleMovementService.GetOutgoingWaybillRows(returnFromClientWaybillRepository.GetRowsSubQuery(waybill.Id)));

            // пересчет показателей возвратов от клиента
            returnFromClientService.ReturnFromClientWaybillFinalizationCancelled(waybill);

            // пересчет показателей переоценки
            articleRevaluationService.ReturnFromClientWaybillReceiptCancelled(waybill);

            // пересчет финансового показателя
            factualFinancialArticleMovementService.ReturnFromClientWaybillReceiptCancelled(waybill);

            // Пересчитываем счетчики количеств операций
            articleMovementOperationCountService.WaybillFinalizationCancelled(waybill);

            var receiptDate = waybill.ReceiptDate.Value;    //Сохраняем дату принятия для индикаторов

            waybill.CancelReceipt();

            returnFromClientWaybillRepository.Save(waybill);

            // Отменяем возврат оплаты по возвращенным позициям
            dealPaymentDocumentDistributionService.CancelPaymentReturnToSales(waybill, receiptDate);

            returnFromClientWaybillRepository.Save(waybill);    //для того, чтобы сохранились изменения в оплатах

            // Обновляем признак полной оплаты для реализаций
            UpdateFullyPaidPropertyForSales(waybill);

            returnFromClientWaybillRepository.Save(waybill);

            articleMovementService.UpdateOutgoingWaybillsStates(waybill, waybill.ReceiptDate);
        }