private void RegisterOrder(Remittance remittance) { var remittanceSetting = _remittanceSettingRepository.Find(new { remittance.SendBranchId, remittance.ReceiveBranchId }); if (remittanceSetting == null) { throw new PawnshopApplicationException("Не найдены настройки переводов для выбранной пары филиалов"); } var sendBranch = _memberRepository.FindBranch(remittance.SendUserId, remittance.SendBranchId); var cashOutNumberCode = sendBranch?.Configuration?.CashOrderSettings?.CashOutNumberCode ?? _branchContext.Configuration.CashOrderSettings.CashOutNumberCode; var outOrder = new CashOrder { OrderType = OrderType.CashOut, UserId = remittanceSetting.CashOutUserId, DebitAccountId = remittanceSetting.CashOutDebitId, CreditAccountId = remittanceSetting.CashOutCreditId, OrderCost = remittance.SendCost, OrderDate = remittance.SendDate, ExpenseTypeId = remittanceSetting.ExpenseTypeId, Reason = $"Снятие денег для передачи в филиал {remittance.ReceiveBranch?.DisplayName}", Note = remittance.Note, RegDate = DateTime.Now, OwnerId = remittance.SendBranchId, BranchId = remittance.SendBranchId, AuthorId = remittance.SendUserId, OrderNumber = _cashCounterRepository.Next(OrderType.CashOut, remittance.SendDate.Year, remittance.SendBranchId, cashOutNumberCode) }; _orderRepository.Insert(outOrder); _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, outOrder.Id, JsonConvert.SerializeObject(remittance), JsonConvert.SerializeObject(outOrder)); remittance.SendOrderId = outOrder.Id; var inOrder = new CashOrder { OrderType = OrderType.CashIn, UserId = remittanceSetting.CashInUserId, DebitAccountId = remittanceSetting.CashInDebitId, CreditAccountId = remittanceSetting.CashInCreditId, OrderCost = remittance.SendCost, OrderDate = remittance.ReceiveDate.Value, Reason = $"Получение денег из филиала {remittance.SendBranch?.DisplayName}", Note = remittance.Note, RegDate = DateTime.Now, OwnerId = remittance.ReceiveBranchId, BranchId = remittance.ReceiveBranchId, AuthorId = remittance.ReceiveUserId.Value, OrderNumber = _cashCounterRepository.Next(OrderType.CashIn, remittance.ReceiveDate.Value.Year, remittance.ReceiveBranchId, _branchContext.Configuration.CashOrderSettings.CashInNumberCode) }; _orderRepository.Insert(inOrder); _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, inOrder.Id, JsonConvert.SerializeObject(remittance), JsonConvert.SerializeObject(inOrder)); remittance.ReceiveOrderId = inOrder.Id; }
public CashOrder Save([FromBody] CashOrder cashOrder) { if (cashOrder.Id == 0) { cashOrder.RegDate = DateTime.Now; cashOrder.OwnerId = _branchContext.Branch.Id; cashOrder.BranchId = _branchContext.Branch.Id; cashOrder.AuthorId = _sessionContext.UserId; cashOrder.ApproveStatus = 0; } ModelState.Clear(); TryValidateModel(cashOrder); ModelState.Validate(); if (cashOrder.OrderDate.Date < DateTime.Now.Date && !_sessionContext.ForSupport) { throw new PawnshopApplicationException("Поле дата кассового ордера не может быть меньше текущей даты"); } using (var transaction = _repository.BeginTransaction()) { if (cashOrder.Id > 0) { _repository.Update(cashOrder); } else { string code; switch (cashOrder.OrderType) { case OrderType.CashIn: code = _branchContext.Configuration.CashOrderSettings.CashInNumberCode; break; case OrderType.CashOut: code = _branchContext.Configuration.CashOrderSettings.CashOutNumberCode; break; default: throw new ArgumentOutOfRangeException(nameof(cashOrder.OrderType), cashOrder.OrderType, null); } cashOrder.OrderNumber = _counterRepository.Next( cashOrder.OrderType, cashOrder.OrderDate.Year, _branchContext.Branch.Id, code); _repository.Insert(cashOrder); } transaction.Commit(); } return(cashOrder); }
public IActionResult Sign([FromBody] int id) { if (id <= 0) { throw new ArgumentOutOfRangeException(nameof(id)); } var model = _investementRepository.Get(id); if (model == null) { throw new InvalidOperationException(); } if (model.Status > InvestmentStatus.Draft) { throw new PawnshopApplicationException("Договор уже подписан"); } using (var transaction = _investementRepository.BeginTransaction()) { var order = new CashOrder { OrderType = OrderType.CashIn, ClientId = model.ClientId, DebitAccountId = 0, //TODO: В настройках добавить дебет и кредит для инвестиций CreditAccountId = 0, OrderCost = model.InvestmentCost, OrderDate = model.InvestmentBeginDate, RegDate = DateTime.Now, OwnerId = _branchContext.Branch.Id, BranchId = _branchContext.Branch.Id, AuthorId = _sessionContext.UserId, OrderNumber = _counterRepository.Next( OrderType.CashIn, model.InvestmentBeginDate.Year, _branchContext.Branch.Id, _branchContext.Configuration.CashOrderSettings.CashInNumberCode) }; _orderRepository.Insert(order); model.OrderId = order.Id; model.Status = InvestmentStatus.Signed; _investementRepository.Update(model); transaction.Commit(); } return(Ok()); }
private void CreateOrder(Insurance insurance, InsuranceAction action, OrderType orderType, int debitAccountId, int creditAccountId) { string code; switch (orderType) { case OrderType.CashIn: code = _branchContext.Configuration.CashOrderSettings.CashInNumberCode; break; case OrderType.CashOut: code = _branchContext.Configuration.CashOrderSettings.CashOutNumberCode; break; default: throw new ArgumentOutOfRangeException(nameof(orderType), orderType, null); } var order = new CashOrder { OrderType = orderType, ClientId = insurance.Contract.ClientId, DebitAccountId = debitAccountId, CreditAccountId = creditAccountId, OrderCost = insurance.InsuranceCost, OrderDate = action.ActionDate, Reason = GetReason(action.ActionType), RegDate = DateTime.Now, OwnerId = _branchContext.Branch.Id, BranchId = _branchContext.Branch.Id, AuthorId = _sessionContext.UserId, OrderNumber = _cashCounterRepository.Next(orderType, action.ActionDate.Year, _branchContext.Branch.Id, code) }; if (order.DebitAccountId == 0 || order.CreditAccountId == 0) { throw new PawnshopApplicationException("Настройте счета дебет и кредит для страхового договора"); } _orderRepository.Insert(order); _eventLog.Log(EventCode.CashOrderSaved, EventStatus.Success, EntityType.CashOrder, order.Id, null, null); action.OrderId = order.Id; }
public Selling Sell([FromBody] Selling selling) { using (var transaction = _repository.BeginTransaction()) { if (selling.Id == 0) { throw new PawnshopApplicationException("Сохраните реализацию для регистрации продажи"); } if (selling.CashOrderId.HasValue) { throw new PawnshopApplicationException("Продажа уже зарегистрирована"); } selling.Status = SellingStatus.Sold; if (selling.ContractId.HasValue && selling.ContractPositionId.HasValue) { var contract = _contractRepository.Get(selling.ContractId.Value); var position = contract.Positions.SingleOrDefault(p => p.Id == selling.ContractPositionId.Value); if (position != null) { position.Status = ContractPositionStatus.Disposed; } if (contract.Positions.All(p => p.Status == ContractPositionStatus.Disposed)) { contract.Status = ContractStatus.Disposed; } _contractRepository.Update(contract); } ModelState.Clear(); TryValidateModel(selling); ModelState.Validate(); var settings = _branchContext.Configuration.CashOrderSettings .Get(selling.CollateralType).DisposeSettings; if (!selling.SellingDate.HasValue) { throw new PawnshopApplicationException("Поле дата продажи обязательно для заполнения"); } if (!selling.SellingCost.HasValue) { throw new PawnshopApplicationException("Поле стоимость продажи обязательно для заполнения"); } if (!settings.DebitId.HasValue) { throw new PawnshopApplicationException("В настройках организации заполните счет дебет для реализации"); } if (!settings.CreditId.HasValue) { throw new PawnshopApplicationException("В настройках организации заполните счет кредит для реализации"); } var cashOrder = new CashOrder { OrderType = OrderType.CashIn, OrderNumber = _counterRepository.Next( OrderType.CashIn, selling.SellingDate.Value.Year, _branchContext.Branch.Id, _branchContext.Configuration.CashOrderSettings.CashInNumberCode), OrderDate = selling.SellingDate.Value, OrderCost = selling.SellingCost.Value, DebitAccountId = settings.DebitId.Value, CreditAccountId = settings.CreditId.Value, UserId = _sessionContext.UserId, Reason = $"Продажа изделия {selling.Note}", RegDate = DateTime.Now, OwnerId = _branchContext.Branch.Id, BranchId = _branchContext.Branch.Id, AuthorId = _sessionContext.UserId }; _cashOrderRepository.Insert(cashOrder); selling.CashOrderId = cashOrder.Id; selling.CashOrder = _cashOrderRepository.Get(cashOrder.Id); _repository.Update(selling); transaction.Commit(); } return(selling); }