예제 #1
0
        public RequestResult EditDispatch([FromBody] EditDispatch editDispatch, bool isCMR)
        {
            if (UserHelper.IsAuthorize(new List <int> {
                (int)UserType.SuperAdmin
            }))
            {
                Dispatch      dispatchToEdit = _context.Dispatches.FirstOrDefault(o => o.Id == editDispatch.Id && o.Deleted_At == null);
                DateTime      dateOfEdit     = DateTime.Now;
                RequestResult result         = new RequestResult();
                try
                {
                    int            CMRId       = Convert.ToInt32(dispatchToEdit.CMR_Id);
                    CMR_Dispatches CMRDispatch = _context.CMR_Dispatches.FirstOrDefault(c => c.Id == CMRId);
                    if (isCMR)
                    {
                        if (CMRDispatch != null)
                        {
                            CMRDispatch.Edited_At           = dateOfEdit;
                            CMRDispatch.Destination         = editDispatch.CMRDispatch.Destination;
                            CMRDispatch.Sender_Address      = editDispatch.CMRDispatch.Sender_Address;
                            CMRDispatch.Sender_Email        = editDispatch.CMRDispatch.Sender_Email;
                            CMRDispatch.Sender_Name         = editDispatch.CMRDispatch.Sender_Name;
                            CMRDispatch.Sender_PrefixVat_Id = editDispatch.CMRDispatch.Sender_PrefixVat_Id;
                            CMRDispatch.Sender_VAT_Id       = editDispatch.CMRDispatch.Sender_VAT_Id.RemoveWhiteSpaces();
                            _context.SaveChanges();
                        }
                        else
                        {
                            CMRDispatch                     = new CMR_Dispatches();
                            CMRDispatch.Created_At          = dateOfEdit;
                            CMRDispatch.Destination         = editDispatch.CMRDispatch.Destination;
                            CMRDispatch.Dispatch_Id         = 0;
                            CMRDispatch.Sender_Address      = editDispatch.CMRDispatch.Sender_Address;
                            CMRDispatch.Sender_Email        = editDispatch.CMRDispatch.Sender_Email;
                            CMRDispatch.Sender_Name         = editDispatch.CMRDispatch.Sender_Name;
                            CMRDispatch.Sender_PrefixVat_Id = editDispatch.CMRDispatch.Sender_PrefixVat_Id;
                            CMRDispatch.Sender_VAT_Id       = editDispatch.CMRDispatch.Sender_VAT_Id.RemoveWhiteSpaces();
                            _context.CMR_Dispatches.Add(CMRDispatch);
                            _context.SaveChanges();
                        }
                    }
                    else
                    {
                        if (CMRDispatch != null)
                        {
                            CMRDispatch.Deleted_At = dateOfEdit;
                            _context.SaveChanges();
                        }
                    }

                    if (dispatchToEdit != null)
                    {
                        dispatchToEdit.Carrier_Address      = editDispatch.Carrier.Carrier_Address;
                        dispatchToEdit.Carrier_Email        = editDispatch.Carrier.Carrier_Email;
                        dispatchToEdit.Carrier_Name         = editDispatch.Carrier.Carrier_Name;
                        dispatchToEdit.Carrier_PrefixVat_Id = editDispatch.Carrier.Carrier_PrefixVat_Id;
                        dispatchToEdit.Carrier_VAT_Id       = editDispatch.Carrier.Carrier_VAT_Id.RemoveWhiteSpaces();
                        dispatchToEdit.Carrier_PhoneNumber  = editDispatch.Carrier.Carrier_PhoneNumber.RemoveWhiteSpaces();
                        dispatchToEdit.Car_Id                = editDispatch.Car_Id.RemoveWhiteSpaces();
                        dispatchToEdit.Creation_Date         = editDispatch.Creation_Date;
                        dispatchToEdit.Dispatch_Number       = editDispatch.Dispatch_Number;
                        dispatchToEdit.Receiver_Address      = editDispatch.Receiver.Receiver_Address;
                        dispatchToEdit.Receiver_Email        = editDispatch.Receiver.Receiver_Email;
                        dispatchToEdit.Receiver_Name         = editDispatch.Receiver.Receiver_Name;
                        dispatchToEdit.Receiver_PrefixVat_Id = editDispatch.Receiver.Receiver_PrefixVat_Id;
                        dispatchToEdit.Receiver_VAT_Id       = editDispatch.Receiver.Receiver_VAT_Id.RemoveWhiteSpaces();
                        dispatchToEdit.Receiver_PhoneNumber  = editDispatch.Receiver.Receiver_PhoneNumber.RemoveWhiteSpaces();
                        dispatchToEdit.Edited_At             = dateOfEdit;
                        dispatchToEdit.If_CMR                = isCMR;
                        dispatchToEdit.Duty_Doc_Id           = editDispatch.Duty_Doc_Id;
                        dispatchToEdit.CMR_Id                = CMRDispatch == null ? null : CMRDispatch.Id.ToString();

                        _context.SaveChanges();
                        var dispatchPositionsFromDB = _context.Dispatches_Positions.Where(d => d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null).ToList();

                        //Editing and adding orderPositions
                        foreach (var dispatchPosition in editDispatch.DispatchPositions)
                        {
                            Dispatches_Positions dispatchPositionForParameter = _context.Dispatches_Positions
                                                                                .FirstOrDefault(d => d.Order_Position_Id == dispatchPosition.Id && d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null);

                            //foreach (var dispatchPositionFromDB in dispatchPositionsFromDB)
                            //{
                            //if (dispatchPosition.Id == dispatchPositionFromDB.Order_Position_Id)
                            //{
                            //Dispatches_Positions dispatchPositionForParameter = _context.Dispatches_Positions.FirstOrDefault(d => d.Order_Position_Id == dispatchPosition.Id && d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null);
                            if (dispatchPositionForParameter != null)
                            {
                                Orders_Positions orderPosition = _context.Orders_Positions.FirstOrDefault(o => o.Id == dispatchPositionForParameter.Order_Position_Id && o.Deleted_At == null);
                                dispatchPositionForParameter.Amount       = dispatchPosition.Amount;
                                dispatchPositionForParameter.Edited_At    = dateOfEdit;
                                dispatchPositionForParameter.Weight_Gross = Math.Round((decimal)(dispatchPosition.Amount * orderPosition.Unit_Weight), 2);
                                _context.SaveChanges();
                                Delivery delivery = _context.Deliveries.FirstOrDefault(d => d.Order_Id == orderPosition.Order_id && d.Deleted_At == null);
                                List <Orders_Positions> listOfOrdersPositionsForOrderPosition = _context.Orders_Positions.Where(o => o.Order_id == orderPosition.Order_id && o.Deleted_At == null).ToList();
                                bool isBalanced = true;
                                foreach (var orderPositionForOrder in listOfOrdersPositionsForOrderPosition)
                                {
                                    List <Dispatches_Positions> dispatchPositions = _context.Dispatches_Positions.Where(d => d.Order_Position_Id == orderPositionForOrder.Id && d.Deleted_At == null).ToList();
                                    if (orderPositionForOrder.Amount_Received != dispatchPositions.Sum(d => d.Amount))
                                    {
                                        isBalanced = false;
                                    }
                                }
                                if (isBalanced)
                                {
                                    delivery.If_Delivery_Dispatch_Balanced = true;
                                }
                                _context.SaveChanges();
                            }
                            else
                            {
                                Orders_Positions orderPosition = _context.Orders_Positions.FirstOrDefault(o => o.Id == dispatchPosition.Id && o.Deleted_At == null);

                                if (orderPosition == null)
                                {
                                    throw new Exception(string.Format("Order position (id = {0}) not exist in database", dispatchPosition.Id));
                                }

                                Dispatches_Positions dispatchPostionToAdd = new Dispatches_Positions();
                                dispatchPostionToAdd.Amount            = dispatchPosition.Amount;
                                dispatchPostionToAdd.Created_At        = dateOfEdit;
                                dispatchPostionToAdd.Dispatch_Id       = editDispatch.Id;
                                dispatchPostionToAdd.Order_Position_Id = dispatchPosition.Id;
                                dispatchPostionToAdd.Weight_Gross      = Math.Round((decimal)(dispatchPosition.Amount * orderPosition.Unit_Weight), 2);
                                _context.Dispatches_Positions.Add(dispatchPostionToAdd);
                                _context.SaveChanges();


                                Delivery delivery = _context.Deliveries.FirstOrDefault(d => d.Order_Id == orderPosition.Order_id && d.Deleted_At == null);

                                if (delivery == null)
                                {
                                    throw new Exception(string.Format("Delivery not exist in database for order (id = {0})", orderPosition.Order_id));
                                }

                                if (_context.Deliveries_Dispatches.FirstOrDefault(d => d.Delivery_Id == delivery.Id && d.Dispatch_Id == dispatchPostionToAdd.Id && d.Deleted_At == null) == null)
                                {
                                    Deliveries_Dispatches deliveryDispatch = new Deliveries_Dispatches();
                                    deliveryDispatch.Created_At  = dateOfEdit;
                                    deliveryDispatch.Dispatch_Id = (int)dispatchPostionToAdd.Dispatch_Id;
                                    deliveryDispatch.Delivery_Id = delivery.Id;
                                    _context.Deliveries_Dispatches.Add(deliveryDispatch);
                                    _context.SaveChanges();
                                }

                                List <Orders_Positions> listOfOrdersPositionsForOrderPosition = _context.Orders_Positions.Where(o => o.Order_id == orderPosition.Order_id && o.Deleted_At == null).ToList();
                                bool isBalanced = true;
                                foreach (var orderPositionForOrder in listOfOrdersPositionsForOrderPosition)
                                {
                                    List <Dispatches_Positions> dispatchPositions = _context.Dispatches_Positions.Where(d => d.Order_Position_Id == orderPositionForOrder.Id && d.Deleted_At == null).ToList();
                                    if (orderPositionForOrder.Amount_Received != dispatchPositions.Sum(d => d.Amount))
                                    {
                                        isBalanced = false;
                                    }
                                }
                                if (isBalanced)
                                {
                                    delivery.If_Delivery_Dispatch_Balanced = true;
                                }
                            }


                            //}
                            //if (dispatchPosition.Id == null)//jak dispatchPositionId jest nullem to tworze nowy na podstawie OrderId
                            //{
                            //    if (dispatchPosition.OrderId != null)
                            //    {

                            //    }

                            //}

                            //}
                        }
                        _context.SaveChanges();

                        //Deleting orderPosition
                        List <int> listOfIdsToDelete = _dispatchManager.GetIdstoRemove(editDispatch.DispatchPositions, dispatchPositionsFromDB);
                        foreach (var id in listOfIdsToDelete)
                        {
                            var dispatchPositionToDelete = _context.Dispatches_Positions.FirstOrDefault(d => d.Order_Position_Id == id && d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null);
                            dispatchPositionToDelete.Deleted_At = dateOfEdit;
                            //Dispatches_Positions dispatchPositionForParameter = _context.Dispatches_Positions.FirstOrDefault(d => d.Id == id && d.Deleted_At == null);
                            Orders_Positions orderPosition = _context.Orders_Positions.FirstOrDefault(o => o.Id == dispatchPositionToDelete.Order_Position_Id && o.Deleted_At == null);
                            Delivery         delivery      = _context.Deliveries.FirstOrDefault(d => d.Order_Id == orderPosition.Order_id && d.Deleted_At == null);
                            delivery.If_Delivery_Dispatch_Balanced = false;
                            _context.SaveChanges();


                            //sprawdzam czy jakiś orderPOsition z delivery dla tego dispatchPositions należy do tego dispatcha
                            bool       isDeliveryDispatch           = false;
                            List <int> orderPositionsForDeliveryIds = _context.Orders_Positions.Where(o => o.Order_id == delivery.Order_Id && o.Deleted_At == null).Select(o => o.Id).ToList();
                            List <int> listOfdispatchPositionsIds   = _context.Dispatches_Positions.Where(d => d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null).Select(d => d.Id).ToList();
                            foreach (var item in orderPositionsForDeliveryIds)
                            {
                                if (listOfdispatchPositionsIds.Contains(item))
                                {
                                    isDeliveryDispatch = true;
                                }
                            }

                            if (!isDeliveryDispatch)
                            {
                                Deliveries_Dispatches deliveryDispatch = _context.Deliveries_Dispatches.FirstOrDefault(d => d.Delivery_Id == delivery.Id && d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null);
                                deliveryDispatch.Deleted_At = dateOfEdit;
                                _context.SaveChanges();
                            }
                        }

                        _context.SaveChanges();
                        dispatchToEdit.Number_Of_Positions = _context.Dispatches_Positions.Where(d => d.Dispatch_Id == editDispatch.Id && d.Deleted_At == null).Count();
                        _context.SaveChanges();
                    }
                    else
                    {
                        result.Status  = false;
                        result.Message = "Dispatch not found";
                    }
                    result.Status  = true;
                    result.Message = "Order has been edited";
                }
                catch (Exception ex)
                {
                    result.Status  = false;
                    result.Message = ex.ToString();
                }
                return(result);
            }
            else
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "User don't have acces to this method"));
            }
        }