public void Forward(ForwardToDeDeliveryman forwardToDeDeliveryman) { if (forwardToDeDeliveryman.Items.GroupBy(p => p.Position).Select(p => p.Count()).Any(p => p > 1)) { AddError("Duplicate position"); return; } var objDeliveyman = _deliverymanRepository.Get(forwardToDeDeliveryman.IdDeliveryman); if (objDeliveyman == null) { AddError("Deliveryman not found"); return; } if (objDeliveyman.IdCurrentCompanyBranch == null || objDeliveyman.IdCurrentCompanyBranch != forwardToDeDeliveryman.IdCompanyBranch) { AddError("Deliveryman not forward to companybranch"); return; } var objQueues = _queueRepository.Get(forwardToDeDeliveryman.Items.Select(p => p.IdQueue).ToArray(), new [] { "DeliveryAddress.Address" }); if (objQueues.Length < forwardToDeDeliveryman.Items.Count) { AddError("Order not found"); return; } Address currentAddress = null; var util = new Util(); foreach (var item in forwardToDeDeliveryman.Items.OrderBy(p => p.Position)) { var queue = objQueues.First(p => p.IdQueue == item.IdQueue); queue.Forward(forwardToDeDeliveryman.IdDeliveryman, item.Position, currentAddress != null ? util.CalculateDistence(currentAddress.Latitude, currentAddress.Longitude, queue.DeliveryAddress.Address.Latitude, queue.DeliveryAddress.Address.Longitude) : queue.CalcDeliveryTime()); currentAddress = queue.DeliveryAddress.Address; //TODO prepare push notification } if (Commit()) { //TODO Push notification } }
public Task <ObjectResult> Forward(ForwardToDeDeliveryman forwardToDeDeliveryman) { _queueApplication.Forward(forwardToDeDeliveryman); return(CreateResponse(null)); }