public void Writeoff(WriteoffWaybill waybill, User user, DateTime currentDateTime) { // регулярная проверка - не появились ли РЦ для переоценки articleRevaluationService.CheckAccountingPriceListWithoutCalculatedRevaluation(currentDateTime); CheckPossibilityToWriteoff(waybill, user); // списание товара waybill.Writeoff(user, currentDateTime); // пометка товара как окончательно перемещенного articleMovementService.FinallyMoveAcceptedArticles(waybill); writeoffWaybillRepository.Save(waybill); // Пересчет показателей проведенного исходящего и точного наличия articleAvailabilityService.WriteoffWaybillWrittenOff(waybill); // пересчет финансовых показателей factualFinancialArticleMovementService.WriteoffWaybillWrittenOff(waybill); // пересчитываем счетчики количеств операций articleMovementOperationCountService.WaybillFinalized(waybill); // уменьшение показателя точной переоценки articleRevaluationService.WriteoffWaybillFinalized(waybill); }
/// <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); }