public async Task IncreaseAmountByOrderFromAgent(ReceiptOfTheOrderStatus receiptOfTheOrderStatus) { var receiptOfTheOrderStatusDetalis = receiptOfTheOrderStatus.ReceiptOfTheOrderStatusDetalis.Where(c => c.MoneyPlacedId != (int)MoneyPalcedEnum.WithAgent && c.MoneyPlacedId != (int)MoneyPalcedEnum.OutSideCompany).ToList(); if (receiptOfTheOrderStatusDetalis.Any()) { var treaury = await _repository.GetById(_userService.AuthoticateUserId()); var total = receiptOfTheOrderStatusDetalis.Sum(c => c.Cost - c.AgentCost); treaury.Total += total; await _uintOfWork.Update(treaury); var history = new TreasuryHistory() { Amount = total, ReceiptOfTheOrderStatusId = receiptOfTheOrderStatus.Id, TreasuryId = treaury.Id, CreatedOnUtc = DateTime.UtcNow, }; await _uintOfWork.Add(history); } }
public async Task <ErrorResponse <string, IEnumerable <string> > > ReceiptOfTheStatusOfTheDeliveredShipment(IEnumerable <ReceiptOfTheStatusOfTheDeliveredShipmentWithCostDto> receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos) { var moneyPlacedes = await _uintOfWork.Repository <MoenyPlaced>().GetAll(); var orderPlacedes = await _uintOfWork.Repository <OrderPlaced>().GetAll(); var outSideCompny = moneyPlacedes.First(c => c.Id == (int)MoneyPalcedEnum.OutSideCompany).Name; var response = new ErrorResponse <string, IEnumerable <string> >(); if (!receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.All(c => c.OrderplacedId == OrderplacedEnum.Way || c.OrderplacedId == OrderplacedEnum.Delivered || c.OrderplacedId == OrderplacedEnum.PartialReturned)) { var wrongData = receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.Where(c => !(c.OrderplacedId == OrderplacedEnum.Way || c.OrderplacedId == OrderplacedEnum.Delivered || c.OrderplacedId == OrderplacedEnum.PartialReturned)); var worngDataIds = wrongData.Select(c => c.Id); var worngOrders = await _uintOfWork.Repository <Order>().GetAsync(c => worngDataIds.Contains(c.Id)); List <string> errors = new List <string>(); foreach (var item in receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos) { string code = worngOrders.Where(c => c.Id == item.Id).FirstOrDefault()?.Code; errors.Add($"لا يمكن وضع حالة الشحنة {OrderPlacedEnumToString(item.OrderplacedId)} للشحنة ذات الرقم : {code}"); } response.Errors = errors; return(response); } List <Notfication> notfications = new List <Notfication>(); List <Notfication> addednotfications = new List <Notfication>(); var ids = new HashSet <int>(receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.Select(c => c.Id)); var orders = await _uintOfWork.Repository <Order>().GetAsync(c => ids.Contains(c.Id)); var repatedOrders = orders.Where(order => receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.Any(r => r.EqualToOrder(order))).ToList(); orders = orders.Except(repatedOrders).ToList(); var exptedOrdersIds = repatedOrders.Select(c => c.Id); receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos = receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.Where(c => !exptedOrdersIds.Contains(c.Id)); if (!receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos.Any()) { return(new ErrorResponse <string, IEnumerable <string> >()); } List <OrderLog> logs = new List <OrderLog>(); foreach (var item in receiptOfTheStatusOfTheDeliveredShipmentWithCostDtos) { var order = orders.First(c => c.Id == item.Id); logs.Add(order); order.MoenyPlacedId = (int)item.MoenyPlacedId; order.OrderplacedId = (int)item.OrderplacedId; order.Note = item.Note; if (order.DeliveryCost != item.DeliveryCost) { if (order.OldDeliveryCost == null) { order.OldDeliveryCost = order.DeliveryCost; } } order.DeliveryCost = item.DeliveryCost; order.AgentCost = item.AgentCost; order.SystemNote = "ReceiptOfTheStatusOfTheDeliveredShipment"; if (order.IsClientDiliverdMoney) { switch (order.OrderplacedId) { case (int)OrderplacedEnum.Delivered: { if (decimal.Compare(order.Cost, item.Cost) != 0) { if (order.OldCost == null) { order.OldCost = order.Cost; } order.Cost = item.Cost; } var payForClient = order.ShouldToPay(); if (decimal.Compare(payForClient, (order.ClientPaied ?? 0)) != 0) { order.OrderStateId = (int)OrderStateEnum.ShortageOfCash; if (order.MoenyPlacedId == (int)MoneyPalcedEnum.Delivered) { order.MoenyPlacedId = (int)MoneyPalcedEnum.InsideCompany; } } else { order.OrderStateId = (int)OrderStateEnum.Finished; } } break; case (int)OrderplacedEnum.PartialReturned: { if (order.OldCost == null) { order.OldCost = order.Cost; } order.Cost = item.Cost; order.OrderStateId = (int)OrderStateEnum.ShortageOfCash; } break; } } else { if (order.Cost != item.Cost) { if (order.OldCost == null) { order.OldCost = order.Cost; } order.Cost = item.Cost; } } if (order.MoenyPlacedId == (int)MoneyPalcedEnum.InsideCompany) { order.ApproveAgentEditOrderRequests.Clear(); } order.MoenyPlaced = moneyPlacedes.First(c => c.Id == order.MoenyPlacedId); order.Orderplaced = orderPlacedes.First(c => c.Id == order.OrderplacedId); } await _uintOfWork.BegeinTransaction(); try { await _uintOfWork.UpdateRange(orders); await _uintOfWork.AddRange(logs); await _notificationService.SendOrderReciveNotifcation(orders); var receiptOfTheOrderStatus = new ReceiptOfTheOrderStatus { CreatedOn = DateTime.UtcNow, RecvierId = _userService.AuthoticateUserId() }; var receiptOfTheOrderStatusDetalis = new List <ReceiptOfTheOrderStatusDetali>(); foreach (var order in orders) { receiptOfTheOrderStatusDetalis.Add(new ReceiptOfTheOrderStatusDetali() { OrderCode = order.Code, ClientId = order.ClientId, Cost = order.Cost, AgentCost = order.AgentCost, AgentId = (int)order.AgentId, MoneyPlacedId = order.MoenyPlacedId, OrderPlacedId = order.OrderplacedId, OrderStateId = order.OrderStateId, }); } receiptOfTheOrderStatus.ReceiptOfTheOrderStatusDetalis = receiptOfTheOrderStatusDetalis; await _uintOfWork.Add(receiptOfTheOrderStatus); await _treasuryService.IncreaseAmountByOrderFromAgent(receiptOfTheOrderStatus); await _uintOfWork.Commit(); return(response); } catch (Exception ex) { await _uintOfWork.RoleBack(); return(new ErrorResponse <string, IEnumerable <string> >("حدث خطأ ما ")); } }