Example #1
0
        bool CheckIfAllFieldsAreFilled(FBAMasterOrder orderInDb)
        {
            if (orderInDb.VerifiedBy != null && orderInDb.DockNumber != null && orderInDb.InboundDate.Year != 1900 && orderInDb.UnloadFinishTime.Year != 1900)
            {
                return(true);
            }

            return(false);
        }
Example #2
0
        bool CheckIfAllOrdersAreFinished(FBAMasterOrder orderInDb)
        {
            if (orderInDb.ChargingItemDetails.Where(x => x.HandlingStatus != FBAStatus.Finished && x.HandlingStatus != FBAStatus.Na).Any())
            {
                throw new Exception("Failed. Please ensure that all instructions in the work order have been completed.");
            }

            return(true);
        }
Example #3
0
        bool CheckIfCanBeReceived(FBAMasterOrder orderInDb)
        {
            if (orderInDb.FBAOrderDetails.Count == 0)
            {
                throw new Exception("Cannot mark this empty order received");
            }

            if (orderInDb.FBAOrderDetails.Sum(x => x.ActualQuantity) > 0)
            {
                return(true);
            }
            else
            {
                throw new Exception("Cannot mark this 0 received order received");
            }
        }
Example #4
0
        public IHttpActionResult CreateMasterOrder([FromBody] FBAMasterOrder obj, [FromUri] int id)
        {
            if (Checker.CheckString(obj.Container))
            {
                throw new Exception("Container number cannot contain space.");
            }

            if (_context.FBAMasterOrders.SingleOrDefault(x => x.Container == obj.Container) != null)
            {
                throw new Exception("Contianer Number " + obj.Container + " has been taken. Please delete the existed order and try agian.");
            }

            var customer     = _context.UpperVendors.Find(id);
            var customerCode = customer.CustomerCode;
            //Unix时间戳加客户代码组成独一无二的GrandNumber
            var grandNumber = customerCode + ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();

            if (_context.FBAMasterOrders.Where(x => x.GrandNumber == grandNumber).Count() > 0)
            {
                throw new Exception("Grand Number " + grandNumber + " has been taken. Please try agian.");
            }

            var masterOrder = new FBAMasterOrder();

            masterOrder.AssembleFirstPart(obj.ETA, obj.Carrier, obj.Vessel, obj.Voy);
            masterOrder.AssembeSecondPart(obj.ETAPort, obj.PlaceOfReceipt, obj.PortOfLoading, obj.PortOfDischarge, obj.PlaceOfDelivery);
            masterOrder.AssembeThirdPart(obj.SealNumber, obj.ContainerSize, obj.Container);
            masterOrder.GrandNumber   = grandNumber;
            masterOrder.Customer      = customer;
            masterOrder.OriginalPlts  = obj.OriginalPlts;
            masterOrder.InboundType   = obj.InboundType;
            masterOrder.UnloadingType = obj.UnloadingType;
            masterOrder.StorageType   = obj.StorageType;
            masterOrder.Palletizing   = obj.Palletizing;
            masterOrder.CreatedBy     = _userName;
            masterOrder.InvoiceStatus = "Await";
            masterOrder.UpdateLog    += "Update by " + _userName + " at " + DateTime.Now.ToString() + ". ";
            masterOrder.Status        = FBAStatus.NewCreated;
            masterOrder.Instruction   = obj.Instruction;

            _context.FBAMasterOrders.Add(masterOrder);
            _context.SaveChanges();

            var resultDto = Mapper.Map <FBAMasterOrder, FBAMasterOrderDto>(_context.FBAMasterOrders.SingleOrDefault(x => x.GrandNumber == grandNumber));

            return(Created(Request.RequestUri + "/" + resultDto.Id, resultDto));
        }
        public ReturnData SendStandardOrderInboundRequest(FBAMasterOrder order)
        {
            var url = "https://5802100-sb1.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=430&deploy=1";

            var lines = new List <TransLine>();

            foreach (var d in order.FBAOrderDetails)
            {
                if (lines.Where(x => x.ItemNum == d.ShipmentId).Count() != 0)
                {
                    continue;
                }

                lines.Add(new TransLine
                {
                    Quantity = d.ActualQuantity,
                    ItemNum  = d.ShipmentId
                });
            }
            var list = new List <ShippedData>();

            list.Add(new ShippedData
            {
                TransOrderNo = order.Container,
                Memo         = "",
                Trandate     = order.InboundDate.ToString("yyyy-MM-dd"),
                Lines        = lines
            });
            var body = new TransOrderRequestBody
            {
                Data = list.ToArray()
            };

            var responseString = SendHttpRequest(url, JsonConvert.SerializeObject(body, Formatting.Indented, new JsonSerializerSettings
            {
                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
            }), "POST");

            var responseBody = new ReturnData();

            using (var input = new StringReader(responseString))
            {
                responseBody = JsonConvert.DeserializeObject <ReturnData>(responseString);
            }

            return(responseBody);
        }
Example #6
0
        public IHttpActionResult UpdateMasterOrderById([FromUri] int masterOrderId, [FromBody] FBAMasterOrder obj)
        {
            obj.Container = obj.Container.Trim();

            var masterOrderInDb = _context.FBAMasterOrders
                                  .Include(x => x.FBAOrderDetails)
                                  .Include(x => x.InvoiceDetails)
                                  .Include(x => x.FBAPallets)
                                  .SingleOrDefault(x => x.Id == masterOrderId);

            var currentContainer = masterOrderInDb.Container;

            if (currentContainer != obj.Container && _context.FBAMasterOrders.SingleOrDefault(x => x.Container == obj.Container) != null)
            {
                throw new Exception("Contianer Number " + obj.Container + " has been taken. Please delete the existed order and try agian.");
            }

            masterOrderInDb.Carrier           = obj.Carrier;
            masterOrderInDb.Vessel            = obj.Vessel;
            masterOrderInDb.WarehouseLocation = obj.WarehouseLocation;
            masterOrderInDb.Voy             = obj.Voy;
            masterOrderInDb.ETA             = obj.ETA;
            masterOrderInDb.SubCustomer     = obj.SubCustomer;
            masterOrderInDb.UnloadingType   = obj.UnloadingType;
            masterOrderInDb.StorageType     = obj.StorageType;
            masterOrderInDb.Palletizing     = obj.Palletizing;
            masterOrderInDb.ETAPort         = obj.ETAPort;
            masterOrderInDb.PlaceOfReceipt  = obj.PlaceOfReceipt;
            masterOrderInDb.PortOfLoading   = obj.PortOfLoading;
            masterOrderInDb.PortOfDischarge = obj.PortOfDischarge;
            masterOrderInDb.PlaceOfDelivery = obj.PlaceOfDelivery;
            masterOrderInDb.Container       = obj.Container;
            masterOrderInDb.OriginalPlts    = obj.OriginalPlts;
            masterOrderInDb.SealNumber      = obj.SealNumber;
            masterOrderInDb.InboundType     = obj.InboundType;
            masterOrderInDb.ContainerSize   = obj.ContainerSize;
            masterOrderInDb.Instruction     = obj.Instruction;

            _context.SaveChanges();

            return(Ok(Mapper.Map <FBAMasterOrder, FBAMasterOrderDto>(masterOrderInDb)));
        }
 public void CallBackWhenInboundOrderCompleted(FBAMasterOrder masterOrderInDb)
 {
     try
     {
         if (masterOrderInDb.CustomerCode == "SUNVALLEY" || masterOrderInDb.CustomerCode == "TEST")
         {
             if (masterOrderInDb.Agency == "NetSuite")
             {
                 _nsManager.SendStandardOrderInboundRequest(masterOrderInDb);
             }
             else if (masterOrderInDb.Agency == "跨境中台")
             {
                 _ztManager.SendInboundCompleteRequest(masterOrderInDb);
             }
         }
     }
     catch (Exception e)
     {
         throw new Exception("API call failed. Error message: " + e.Message);
     }
 }
Example #8
0
        bool CheckIfAllCtnsAreAllocated(FBAMasterOrder orderInDb)
        {
            var result = false;

            if (orderInDb.FBAOrderDetails.Count == 0)
            {
                throw new Exception("Cannot mark this empty order allocated.");
            }

            if (orderInDb.FBAOrderDetails.Sum(x => x.ComsumedQuantity) == orderInDb.FBAOrderDetails.Sum(x => x.ActualQuantity))
            {
                result = true;
            }

            if (orderInDb.FBAPallets.Any() && orderInDb.FBAPallets.Sum(x => x.ComsumedPallets) != orderInDb.FBAPallets.Sum(x => x.ActualPallets))
            {
                result = false;
            }

            return(result);
        }
Example #9
0
        public void UpdateMasterOrderInfo([FromUri] string grandNumber, [FromBody] FBAMasterOrder obj)
        {
            if (Checker.CheckString(obj.Container))
            {
                throw new Exception("Container number cannot contain space.");
            }

            var masterOrderInDb = _context.FBAMasterOrders
                                  .SingleOrDefault(x => x.GrandNumber == grandNumber);

            var currentContainer = masterOrderInDb.Container;

            if (currentContainer != obj.Container && _context.FBAMasterOrders.SingleOrDefault(x => x.Container == obj.Container) != null)
            {
                throw new Exception("Contianer Number " + obj.Container + " has been taken. Please delete the existed order and try agian.");
            }

            masterOrderInDb.Carrier         = obj.Carrier;
            masterOrderInDb.Vessel          = obj.Vessel;
            masterOrderInDb.Voy             = obj.Voy;
            masterOrderInDb.ETA             = obj.ETA;
            masterOrderInDb.UnloadingType   = obj.UnloadingType;
            masterOrderInDb.StorageType     = obj.StorageType;
            masterOrderInDb.Palletizing     = obj.Palletizing;
            masterOrderInDb.ETAPort         = obj.ETAPort;
            masterOrderInDb.PlaceOfReceipt  = obj.PlaceOfReceipt;
            masterOrderInDb.PortOfLoading   = obj.PortOfLoading;
            masterOrderInDb.PortOfDischarge = obj.PortOfDischarge;
            masterOrderInDb.PlaceOfDelivery = obj.PlaceOfDelivery;
            masterOrderInDb.Container       = obj.Container;
            masterOrderInDb.OriginalPlts    = obj.OriginalPlts;
            masterOrderInDb.SealNumber      = obj.SealNumber;
            masterOrderInDb.InboundType     = obj.InboundType;
            masterOrderInDb.ContainerSize   = obj.ContainerSize;
            masterOrderInDb.Instruction     = obj.Instruction;

            _context.SaveChanges();
        }
        // 中台入库请求,在入库单complete按钮按下后触发
        public ResponseBody SendInboundCompleteRequest(FBAMasterOrder order)
        {
            var url   = "https://hzero-gateway.hzero-uat.nearbyexpress.com/hitf/v1/rest/invoke?namespace=HZERO&serverCode=HORD&interfaceCode=homs-order.rma.returnStatus";
            var token = GetAccessToken();

            var lines = new List <Line>();

            foreach (var d in order.FBAOrderDetails)
            {
                lines.Add(new Line {
                    ReturnSkuId       = d.ShipmentId,
                    RmaReturnQuantity = d.ActualQuantity
                });
            }

            var body = new RequestBody
            {
                Payload = JsonConvert.SerializeObject(new { Lines = lines, ReturnStatus = 1, RmaCode = order.Container, SystemSource = "CHINO" }, new JsonSerializerSettings
                {
                    ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
                })
            };

            var responseString = SendHttpRequest(url, JsonConvert.SerializeObject(body, Formatting.Indented, new JsonSerializerSettings
            {
                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
            }), "POST", token);

            var responseBody = new ResponseBody();

            using (var input = new StringReader(responseString))
            {
                responseBody = JsonConvert.DeserializeObject <ResponseBody>(responseString);
            }

            return(responseBody);
        }
 public void CloseMasterOrder(FBAMasterOrder masterOrder, string _userName, DateTime closeDate)
 {
     masterOrder.InvoiceStatus = FBAStatus.Closed;
     masterOrder.CloseDate     = closeDate;
     masterOrder.ConfirmedBy   = _userName;
 }
        public async Task CreateInboundOrderByAgentRequestV1(UpperVendor customer, string customerCode, FBAInboundOrder order, string requestId)
        {
            // 建立主单
            var newMasterOrder = new FBAMasterOrder();

            newMasterOrder.GrandNumber       = "N/A";
            newMasterOrder.Agency            = order.Agency;
            newMasterOrder.Container         = order.Container;
            newMasterOrder.CreatedBy         = order.Agency;
            newMasterOrder.SubCustomer       = order.Subcustomer;
            newMasterOrder.StorageType       = "SEE INSTRUCTION";
            newMasterOrder.Status            = FBAStatus.Draft;
            newMasterOrder.UnloadingType     = "DROP-OFF";
            newMasterOrder.InboundType       = "FCL";
            newMasterOrder.Palletizing       = "<=80";
            newMasterOrder.TotalCBM          = order.FBAJobs.Sum(x => x.CBM);
            newMasterOrder.TotalCtns         = order.FBAJobs.Sum(x => x.Quantity);
            newMasterOrder.OriginalPlts      = order.FBAJobs.Sum(x => x.PalletQuantity);
            newMasterOrder.CustomerCode      = customerCode;
            newMasterOrder.WarehouseLocation = order.WarehouseLocation == "" ? "W0" : order.WarehouseLocation;
            newMasterOrder.Customer          = customer;
            newMasterOrder.PortOfLoading     = order.PortOfLoading;
            newMasterOrder.ETAPort           = order.ETADate;
            newMasterOrder.ETA             = order.ETADate;
            newMasterOrder.PlaceOfDelivery = order.DeliveryPort;
            newMasterOrder.Vessel          = order.Vessel;
            newMasterOrder.Carrier         = order.Carrier;
            newMasterOrder.ContainerSize   = order.ContainerSize;
            newMasterOrder.SealNumber      = order.SealNumber;
            newMasterOrder.Comment         = "ETL DATE: " + order.ETLDate;
            newMasterOrder.UpdateLog       = "Created by agency via API";

            _context.FBAMasterOrders.Add(newMasterOrder);

            foreach (var j in order.FBAJobs)
            {
                var orderDetail = new FBAOrderDetail();
                orderDetail.Container      = order.Container;
                orderDetail.GrandNumber    = "N/A";
                orderDetail.GrossWeight    = j.GrossWeight;
                orderDetail.CBM            = j.CBM;
                orderDetail.Quantity       = j.Quantity;
                orderDetail.ShipmentId     = j.ShipmentId;
                orderDetail.AmzRefId       = j.AmzRefId;
                orderDetail.WarehouseCode  = j.WarehouseCode;
                orderDetail.Remark         = "包装:" + j.PackageType + ";产品类型:" + j.ProductType + ";打托数量:" + j.PalletQuantity;
                orderDetail.FBAMasterOrder = newMasterOrder;
                _context.FBAOrderDetails.Add(orderDetail);
            }

            var instruction = new ChargingItemDetail();

            instruction.Description         = "To CSR: This inbound order is created by an agency from api. If there is no further customer's instructions below, please contact customer to do a further confirmation.";
            instruction.HandlingStatus      = "N/A";
            instruction.Status              = FBAStatus.NoNeedForCharging;
            instruction.IsCharging          = false;
            instruction.IsInstruction       = true;
            instruction.IsOperation         = false;
            instruction.OriginalDescription = instruction.Description;
            instruction.FBAMasterOrder      = newMasterOrder;
            _context.ChargingItemDetails.Add(instruction);

            if (order.Instructions != null)
            {
                foreach (var i in order.Instructions)
                {
                    var customerInstruction = new ChargingItemDetail();

                    customerInstruction.Description         = i;
                    customerInstruction.HandlingStatus      = "N/A";
                    customerInstruction.Status              = FBAStatus.TBD;
                    customerInstruction.IsCharging          = false;
                    customerInstruction.IsInstruction       = true;
                    customerInstruction.IsOperation         = false;
                    customerInstruction.OriginalDescription = instruction.Description;
                    customerInstruction.FBAMasterOrder      = newMasterOrder;
                    _context.ChargingItemDetails.Add(customerInstruction);
                }
            }

            // 添加Request日志
            var logger = new Logger(_context, order.Agency);

            await logger.AddCreatedLogAsync <FBAMasterOrder>(null, Mapper.Map <FBAMasterOrder, FBAMasterOrderDto>(newMasterOrder), "Created by agency from api.", null, OperationLevel.Mediunm);

            var logInDb = _context.OperationLogs.OrderByDescending(x => x.Id).First();

            logInDb.RequestId = requestId;

            _context.SaveChanges();
        }
Example #13
0
        public IHttpActionResult CreateMasterOrder([FromBody] FBAMasterOrder obj, [FromUri] int id)
        {
            obj.Container = obj.Container.Trim();

            if (_context.FBAMasterOrders.SingleOrDefault(x => x.Container == obj.Container) != null)
            {
                throw new Exception("Contianer Number " + obj.Container + " has been taken. Please delete the existed order and try agian.");
            }

            var customer     = _context.UpperVendors.SingleOrDefault(x => x.CustomerCode == obj.CustomerCode);
            var customerCode = customer.CustomerCode;
            //Unix时间戳加客户代码组成独一无二的GrandNumber
            var grandNumber = customerCode + ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString();

            if (_context.FBAMasterOrders.Where(x => x.GrandNumber == grandNumber).Count() > 0)
            {
                throw new Exception("Grand Number " + grandNumber + " has been taken. Please try agian.");
            }

            var chargingItemDetailList = new List <ChargingItemDetail>();

            var customerWOInstructions = _context.InstructionTemplates
                                         .Include(x => x.Customer)
                                         .Where(x => x.Customer.CustomerCode == obj.CustomerCode &&
                                                x.IsApplyToMasterOrder == true)
                                         .ToList();

            foreach (var c in customerWOInstructions)
            {
                chargingItemDetailList.Add(new ChargingItemDetail
                {
                    Status         = c.Status,
                    HandlingStatus = c.IsOperation || c.IsInstruction ? FBAStatus.New : FBAStatus.Na,
                    Description    = c.Description,
                    CreateBy       = _userName,
                    CreateDate     = DateTime.Now,
                    IsCharging     = c.IsCharging,
                    IsInstruction  = c.IsInstruction,
                    IsOperation    = c.IsOperation
                });
            }

            _context.ChargingItemDetails.AddRange(chargingItemDetailList);

            var masterOrder = new FBAMasterOrder();

            masterOrder.AssembleFirstPart(obj.ETA, obj.Carrier, obj.Vessel, obj.Voy);
            masterOrder.AssembeSecondPart(obj.ETAPort, obj.PlaceOfReceipt, obj.PortOfLoading, obj.PortOfDischarge, obj.PlaceOfDelivery);
            masterOrder.AssembeThirdPart(obj.SealNumber, obj.ContainerSize, obj.Container);
            masterOrder.GrandNumber         = grandNumber;
            masterOrder.WarehouseLocation   = obj.WarehouseLocation;
            masterOrder.Customer            = customer;
            masterOrder.CustomerCode        = customerCode;
            masterOrder.SubCustomer         = obj.SubCustomer;
            masterOrder.OriginalPlts        = obj.OriginalPlts;
            masterOrder.InboundType         = obj.InboundType;
            masterOrder.UnloadingType       = obj.UnloadingType;
            masterOrder.StorageType         = obj.StorageType;
            masterOrder.Palletizing         = obj.Palletizing;
            masterOrder.CreatedBy           = _userName;
            masterOrder.InvoiceStatus       = "Await";
            masterOrder.UpdateLog          += "Update by " + _userName + " at " + DateTime.Now.ToString() + ". ";
            masterOrder.Status              = FBAStatus.NewCreated;
            masterOrder.Instruction         = obj.Instruction;
            masterOrder.ChargingItemDetails = chargingItemDetailList;

            if (obj.InvoiceStatus == "Closed")
            {
                masterOrder.CloseDate   = DateTime.Now;
                masterOrder.ConfirmedBy = _userName;
            }

            _context.FBAMasterOrders.Add(masterOrder);
            _context.SaveChanges();

            var resultDto = Mapper.Map <FBAMasterOrder, FBAMasterOrderDto>(_context.FBAMasterOrders.SingleOrDefault(x => x.GrandNumber == grandNumber));

            return(Created(Request.RequestUri + "/" + resultDto.Id, resultDto));
        }