bool CheckIfAllFieldsAreFilled(FBAMasterOrder orderInDb) { if (orderInDb.VerifiedBy != null && orderInDb.DockNumber != null && orderInDb.InboundDate.Year != 1900 && orderInDb.UnloadFinishTime.Year != 1900) { return(true); } return(false); }
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); }
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"); } }
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); }
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); } }
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); }
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(); }
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)); }