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