/// <summary> /// Принять /// </summary> public virtual void Receipt(MovementWaybill waybill, User user, DateTime currentDateTime) { // регулярная проверка - не появились ли РЦ для переоценки articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime); CheckPossibilityToReceipt(waybill, user); // приемка товара waybill.Receipt(user, currentDateTime); movementWaybillRepository.Save(waybill); // пометка товара как окончательно перемещенного articleMovementService.FinallyMoveShippedArticles(waybill); // Пересчет показателей точного и проведенного наличия articleAvailabilityService.MovementWaybillReceipted(waybill); // пересчет финансовых показателей factualFinancialArticleMovementService.MovementWaybillReceipted(waybill); // пересчет счетчиков количеств операций articleMovementOperationCountService.WaybillFinalized(waybill); // расчет переоценок по принятым позициям articleRevaluationService.MovementWaybillFinalized(waybill); movementWaybillRepository.Save(waybill); articleMovementService.UpdateOutgoingWaybillsStates(waybill, waybill.ReceiptDate); }
/// <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> /// <param name="waybill">Накладная</param> public void Receipt(ReturnFromClientWaybill waybill, User user, DateTime currentDateTime) { // регулярная проверка - появились ли РЦ для переоценки articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime); CheckPossibilityToReceipt(waybill, user); waybill.Receipt(user, currentDateTime); returnFromClientWaybillRepository.Save(waybill); // Пересчет показателей входящего проведенного и точного наличия articleAvailabilityService.ReturnFromClientWaybillReceipted(waybill); // пересчет показателей возвратов от клиента returnFromClientService.ReturnFromClientWaybillFinalized(waybill); // пересчет финансового показателя factualFinancialArticleMovementService.ReturnFromClientWaybillReceipted(waybill); // расчет переоценок по принятым позициям articleRevaluationService.ReturnFromClientWaybillFinalized(waybill); // Пересчитываем счетчики количеств операций articleMovementOperationCountService.WaybillFinalized(waybill); returnFromClientWaybillRepository.Save(waybill); //Т.к. для метода ReturnPaymentToSales необходимы строки накладной возврата. dealPaymentDocumentDistributionService.ReturnPaymentToSales(waybill, currentDateTime); //Возвращаем оплаты returnFromClientWaybillRepository.Save(waybill); //для того, чтобы сохранились изменения в оплатах //Обновляем признак полной оплаты для реализаций UpdateFullyPaidPropertyForSales(waybill); returnFromClientWaybillRepository.Save(waybill); articleMovementService.UpdateOutgoingWaybillsStates(waybill, waybill.ReceiptDate); }