/// <summary> /// 拣货确认 /// </summary> /// <param name="pickNo"></param> /// <returns></returns> public ActionResult PickConfirm(string pickNo) { try { var pickService = new PickService(); int isOk = 1; string message; bool flag = pickService.PickConfirm(pickNo, out message); if (!flag) { isOk = -1; } WriteLog(isOk, pickNo, message); return(Content(new JsonMessage { Success = true, Code = isOk.ToString(), Message = message }.ToString())); } catch (Exception ex) { WriteLog(-1, pickNo, "操作失败:" + ex.Message); return(Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString())); } }
public ActionResult GetPicks(int index, int pageNo, int pageSize, string search, string sortColumn, int sortOrder, string dateFrom, string dateTo, int tz) { var model = createModel(); Response.Cookies.Remove("picks_txtDateFrom"); Response.Cookies.Remove("picks_txtDateTo"); if (dateFrom.Trim().Length <= 10) { dateFrom = dateFrom.Trim() + " 00:00:00"; } if (dateTo.Trim().Length <= 10) { dateTo = dateTo.Trim() + " 23:59:59"; } return(Json(PickService.FindPicksListModel(model.CurrentCompany.Id, dateFrom.ParseDateTime(CurrentUser.DateFormat + " HH:mm:ss", tz), dateTo.ParseDateTime(CurrentUser.DateFormat + " HH:mm:ss", tz), index, pageNo, pageSize, search, sortColumn, (SortOrder)sortOrder), JsonRequestBehavior.AllowGet)); }
/// <summary> /// /// </summary> /// <param name="orderNos"></param> /// <returns></returns> public ActionResult CreatePickMaster(string orderNos) { try { var sb = new StringBuilder(); var pickService = new PickService(); string[] aryOrderNo = orderNos.Split(','); string message; bool flag = pickService.CreatePickMaster(aryOrderNo, out message); if (!flag) { sb.AppendFormat("{0}<br/>", message); } else { sb.AppendFormat("{0}<br/>", message); } WriteLog(1, orderNos, sb.ToString()); return(Content(new JsonMessage { Success = true, Code = "1", Message = sb.ToString() }.ToString())); } catch (Exception ex) { WriteLog(-1, orderNos, "操作失败:" + ex.Message); return(Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString())); } }
void createPicksTest(int numSohs, int itemCount, List <SalesOrderHeaderModel> sohList, bool bCombine, List <PickHeaderModel> pickHeaders) { // Create a test sale var testUser = GetTestUser(); var testCompany = GetTestCompany(testUser, true); CreateTestTransfers(testCompany, testUser); var testCustomer = GetTestCustomer(testCompany, testUser); // Create some SOHs for (int i = 0; i < numSohs; i++) { sohList.Add(GetTestSalesOrderHeader(testCompany, testCustomer, testUser, itemCount, true)); } var error = PickService.CreatePicks(testCompany, sohList, bCombine, pickHeaders); // Log all the files so they get cleaned up at test tear-down foreach (var pickH in pickHeaders) { db.LogTestFile(pickH.PickFiles); } Assert.IsTrue(!error.IsError, error.Message); }
public void CreatePicksTest() { // This test creates multiple picks int itemCount = 10; // Create a test sale var testUser = GetTestUser(); var testCompany = GetTestCompany(testUser, true); CreateTestTransfers(testCompany, testUser); var testCustomer = GetTestCustomer(testCompany, testUser); var sohList = new List <SalesOrderHeaderModel>(); var pickHeaders = new List <PickHeaderModel>(); sohList.Add(GetTestSalesOrderHeader(testCompany, testCustomer, testUser, 0, true)); var error = PickService.CreatePicks(testCompany, sohList, false, pickHeaders); Assert.IsTrue(error.IsError, "Error: Creating a Pick with no lines should have cause an error"); int beforePicks = db.FindPickHeaders(testCompany.Id).Count(), beforePickLines = db.FindPickDetails(testCompany.Id).Count(); sohList = new List <SalesOrderHeaderModel>(); sohList.Add(GetTestSalesOrderHeader(testCompany, testCustomer, testUser, itemCount, true)); error = PickService.CreatePicks(testCompany, sohList, false, pickHeaders); foreach (var pickH in pickHeaders) { db.LogTestFile(pickH.PickFiles); } Assert.IsTrue(!error.IsError, error.Message); int afterPicks = db.FindPickHeaders(testCompany.Id).Count(), afterPickLines = db.FindPickDetails(testCompany.Id).Count(); int expected = 1, actual = afterPicks - beforePicks; Assert.IsTrue(actual == expected, $"Error: {actual} pick headers were found when {expected} were expected"); expected = itemCount; actual = afterPickLines - beforePickLines; Assert.IsTrue(actual == expected, $"Error: {actual} pick lines were found when {expected} were expected"); // Check to see if the pick CSV file exists var ph = pickHeaders.FirstOrDefault(); Assert.IsTrue(ph != null, "Error: No Pick Headers were found"); Assert.IsTrue(ph.PickFiles.Count() > 0, "Error: No Pick Data File was returned"); Assert.IsTrue(File.Exists(ph.PickFiles[0]), $"Error: Pick Data File '{ph.PickFiles[0]}' could not be found"); // Cleanup File.Delete(ph.PickFiles[0]); }
public void SetPickSentToWarehouseDateTest() { int numSohs = 1, itemCount = 15; var testUser = GetTestUser(); var testCompany = GetTestCompany(testUser, true); CreateTestTransfers(testCompany, testUser); var testCustomer = GetTestCustomer(testCompany, testUser); var sohList = new List <SalesOrderHeaderModel>(); var pickHeaders = new List <PickHeaderModel>(); // Create some SOHs for (int i = 0; i < numSohs; i++) { sohList.Add(GetTestSalesOrderHeader(testCompany, testCustomer, testUser, itemCount, true)); } var error = PickService.CreatePicks(testCompany, sohList, true, pickHeaders); // Log all the files so they get cleaned up at test tear-down foreach (var pickH in pickHeaders) { db.LogTestFile(pickH.PickFiles); //PickService.SetPickSentToWarehouseDate(pickH, DateTimeOffset.Now); } // Check the sent to warehouse state var pickList = PickService.FindPicksListModel(testCompany.Id, null, null); int expected = 1, actual = pickList.Items.Count(); Assert.IsTrue(actual == expected, $"Error: {actual} picks were created when {expected} were expected"); Assert.IsTrue(pickList.Items[0].STWDate == null, $"Error: {pickList.Items[0].STWDate} for STW Date was found when NULL was expected"); // Change the state var stwDate = DateTimeOffset.Now; PickService.SetPickSentToWarehouseDate(pickList.Items[0], stwDate); // Check it pickList = PickService.FindPicksListModel(testCompany.Id, DateTimeOffset.Now.AddDays(-2), DateTimeOffset.Now); expected = 1; actual = pickList.Items.Count(); Assert.IsTrue(actual == expected, $"Error: {actual} picks were created when {expected} were expected"); Assert.IsTrue(pickList.Items[0].STWDate == stwDate, $"Error: {pickList.Items[0].STWDate} for STW Date was found when {stwDate} was expected"); }
public void ThrowsExceptionIfTooManySwitches(List <DoorModel> doors, int switches, bool shouldThrowException) { // Arrange var sut = new PickService(); // Act/Assert if (shouldThrowException) { Assert.Throws <TooManySwitchesException>(() => sut.PickADoor(doors, switches)); } else { var result = sut.PickADoor(doors, switches); } }
public async void GetNextIdByDraft_Scenario_FirstPickOfDraftIs1() { var _picksRepository = new Mock <IModelDynamoDbRepository <Pick> >(); var pickService = new PickService(_picksRepository.Object); var emptyPicksList = new List <Pick>(); _picksRepository .Setup(pr => pr.RetrieveByDraftId(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <int?>())) .ReturnsAsync(emptyPicksList); var nextOverallOrder = await pickService.GetNextIdByDraft("testDraft"); Assert.Equal(1, nextOverallOrder); }
public async void GetNextIdByDraft_Scenario_ThirdPickOfDraftIs3() { var _picksRepository = new Mock <IModelDynamoDbRepository <Pick> >(); var pickService = new PickService(_picksRepository.Object); var picksListWithTopPick = new List <Pick>() { new Pick() { DraftId = "TestDraft", Id = 20, PlayerId = "testPlayer2", Selection = "Gnocchi" } }; _picksRepository .Setup(pr => pr.RetrieveByDraftId(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <int?>())) .ReturnsAsync(picksListWithTopPick); var nextOverallOrder = await pickService.GetNextIdByDraft("testDraft"); Assert.Equal(21, nextOverallOrder); }
public async void PutTest_Scenario_PutsPick() { var _pickRepository = new Mock <IModelDynamoDbRepository <Pick> >(); var pickToPut = new Pick() { DraftId = "TEST", Id = 3, PlayerId = "TestId", Selection = "Mashed Potatoes" }; _pickRepository.Setup(pr => pr.Put(It.IsAny <Pick>())) .ReturnsAsync(pickToPut); var pickService = new PickService(_pickRepository.Object); var result = await pickService.Put(pickToPut); _pickRepository.Verify(x => x.Put(pickToPut), Times.Once); }
public async void RetrievePicksTest_Scenario_ReturnsPicksByDraftId() { var _picksRepository = new Mock <IModelDynamoDbRepository <Pick> >(); var expectedPicks = new List <Pick>() { new Pick() { DraftId = "TEST", Id = 1, PlayerId = "TestId", Selection = "potato chips" } }; _picksRepository.Setup(pr => pr.RetrieveByDraftId(It.IsAny <string>())) .ReturnsAsync(expectedPicks); var pickService = new PickService(_picksRepository.Object); var result = await pickService.Retrieve("TEST"); Assert.Equal(expectedPicks, result); }
public Error CreatePickDocumentPdf(PickHeaderModel pickHeader, DocumentTemplateModel template, string pdfFile, bool showCancelledItems, ref string outputFile, int maxItems = Int32.MaxValue) { var error = new Error(); string tempFile = MediaService.MediaService.GetTempFile(".html"); if (string.IsNullOrEmpty(pdfFile)) { outputFile = MediaService.MediaService.GetTempFile().FolderName() + "\\" + pickHeader.Id + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"; } else { outputFile = pdfFile; } decimal subTotal = 0; var company = CompanyService.FindCompanyModel(pickHeader.CompanyId == null ? 0 : pickHeader.CompanyId.Value); var customer = CustomerService.FindCustomerModel(pickHeader.CustomerId == null ? 0 : pickHeader.CustomerId.Value, company); var paymentTerms = LookupService.FindPaymentTermModel(pickHeader.TermsID == null ? 0 : pickHeader.TermsID.Value); var taxCode = LookupService.FindTaxCodeModel(customer.TaxCodeId); var currency = LookupService.FindCurrencyModel(company.DefaultCurrencyID == null ? 0 : company.DefaultCurrencyID.Value); Dictionary <string, string> headerProps = new Dictionary <string, string>(); List <Dictionary <string, string> > records = new List <Dictionary <string, string> >(); AddCompanyInformation(company, headerProps); var pickDetailListModel = PickService.FindPickDetailListModel(company, pickHeader).FirstOrDefault(); var sod = FindSalesOrderDetailModel(pickDetailListModel.SalesOrderDetailId); var soh = FindSalesOrderHeaderModel(sod.SalesOrderHeaderId, company); // RETAIL INVOICE/PACKING SLIP headerProps.AddProperty("ORDERDATE", formatDate(soh.OrderDate, company.DateFormat)); headerProps.AddProperty("OURREF", soh.OrderNumber); // STANDARD PACKING SLIP headerProps.AddProperty("REFERENCENUMBER", soh.OrderNumber); headerProps.AddProperty("INVOICENUMBER", pickHeader.InvoiceNumber); headerProps.AddProperty("SALESDATE", formatDate(soh.OrderDate, company.DateFormat)); headerProps.AddProperty("TERMS", paymentTerms.TermText); // ?? headerProps.AddProperty("CUSTOMERCONTACT", pickHeader.CustomerContact); var address = pickHeader.ShipAddress1 + "<br/>"; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress2)) ? pickHeader.ShipAddress2 + "<br/>" : ""; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress3)) ? pickHeader.ShipAddress3 + "<br/>" : ""; address += (!string.IsNullOrWhiteSpace(pickHeader.ShipAddress4)) ? pickHeader.ShipAddress4 + "<br/>" : ""; address += pickHeader.ShipSuburb + " " + pickHeader.ShipState + " " + pickHeader.ShipPostcode + "<br/>"; address += pickHeader.ShipCountry; headerProps.AddProperty("DELIVERYADDRESS", address); headerProps.AddProperty("ORDERNUMBER", soh.OrderNumber); headerProps.AddProperty("PURCHASEORDERNUMBER", soh.CustPO); // Add items int itemCount = 1; foreach (var pickDetail in PickService.FindPickDetailListModel(company, pickHeader)) { var product = ProductService.FindProductModel(pickDetail.ProductId.Value, null, company, false); Dictionary <string, string> line = new Dictionary <string, string>(); line.AddProperty("ORDERQTY", pickDetail.QtyToPick); // Correct? line.AddProperty("ITEMNUMBER", product.ItemNumber); line.AddProperty("DESCRIPTION", itemCount.ToString() + " " + sod.ProductDescription); // RETAIL INVOICE/PACKING SLIP var unitPriceExTax = sod.UnitPriceExTax.Value; var discountPc = sod.DiscountPercent.Value; var linePrice = (pickDetail.QtyToPick * unitPriceExTax - ((pickDetail.QtyToPick * unitPriceExTax) / 100 * discountPc)).Value; sod = FindSalesOrderDetailModel(pickDetail.SalesOrderDetailId); string allocated = AllocationService.GetExpectedShipdate(sod); if (allocated.Count() > 5) { allocated = DateTimeOffset.Parse(allocated).ToString(company.DateFormat); } line.AddProperty("EXPSHIPDATE", allocated); line.AddProperty("LINEPRICE", sod.UnitPriceExTax.Value.ToString("#,##0.00")); subTotal += linePrice; records.Add(line); itemCount++; // STILL TO SHIP: TODO } // RETAIL INVOICE/PACKING SLIP headerProps.AddProperty("CURRENCYSYMBOL", currency.CurrencySymbol); headerProps.AddProperty("SALEAMOUNTEX", subTotal.ToString("#,##0.00")); headerProps.AddProperty("FREIGHT", pickHeader.FreightCost ?? 0); subTotal += Convert.ToDecimal(pickHeader.FreightCost); var subTotalIncGst = subTotal + (taxCode.TaxPercentageRate == null ? 0 : (subTotal / 100 * taxCode.TaxPercentageRate.Value)); headerProps.AddProperty("SALEAMOUNTINC", subTotal.ToString("#,##0.00")); headerProps.AddProperty("GST", (subTotalIncGst - subTotal).ToString("#,##0.00")); headerProps.AddProperty("TAXNAME", taxCode.TaxCode); return(DocumentService.CreateDocumentPdf(headerProps, records, template.QualTemplateFile, outputFile, maxItems)); }
public Error CreatePicks(CompanyModel company, UserModel currentUser, string sohIds, bool bCombine) { var error = validateSingleOrder(company, sohIds); if (!error.IsError) { // TBD: Validate the document creation so that we don't have a rollback scenario // All sales validate, so drop them as individual drops List <PickHeaderModel> picks = new List <PickHeaderModel>(); error = PickService.CreatePicks(company, sohList, bCombine, picks); // The returned list contains the names of the pick CSV temp files. // Now create the corresponding support PDF document when // the location configuration specifies that it should be created. if (!error.IsError) { error = createDocuments(company, picks); } // Now drop the files to the warehouse if (!error.IsError) { var sohIdList = new List <int>(); foreach (var pick in picks) { error = FilePackagerService.SendPickToWarehouse(pick); if (error.IsError) { break; } else { // Pick successfully sent, so: foreach (var detail in pick.PickDetails) { var sod = FindSalesOrderDetailModel(detail.SalesOrderDetailId); if (sod != null) { // Change all the line items to 'sent for picking' sod.LineStatusId = (int)SalesOrderLineStatus.SentForPicking; InsertOrUpdateSalesOrderDetail(sod, ""); // Remove allocations from sale AllocationService.DeleteAllocationsForPurchaseLine(company, sod.Id); if (sohIdList.Where(l => l == sod.SalesOrderHeaderId).Count() == 0) { sohIdList.Add(sod.SalesOrderHeaderId); } } } // Set 'sent to warehouse date' on pick header PickService.SetPickSentToWarehouseDate(pick, DateTimeOffset.Now); } } // Attach notes to SOH's to indicate pick sent to W/House TaskManagerService.TaskManagerService tm = new TaskManagerService.TaskManagerService(db, company); foreach (var sohId in sohIdList) { var soh = FindSalesOrderHeaderModel(sohId, company, false); if (soh != null) { var subject = "Order Sent to Warehouse"; var message = "Order sent to Warehouse for picking"; NoteService.AttachNoteToSalesOrder(soh, currentUser, subject, message); } } } // Cleanup all the temp pick files foreach (var pick in picks) { foreach (var pickFile in pick.PickFiles) { FileManagerService.FileManagerService.DeleteFile(pickFile); } } if (!error.IsError) { error.SetInfo(EvolutionResources.infPicksSuccessfullyCreated); } } return(error); }
public void FindPicksListModelTest() { int itemCount = 5, numSohs = 6; // Create a test sale var testUser = GetTestUser(); var testCompany = GetTestCompany(testUser, true); CreateTestTransfers(testCompany, testUser); var testCustomer = GetTestCustomer(testCompany, testUser); // Create some SOHs var sohList = new List <SalesOrderHeaderModel>(); var pickHeaders = new List <PickHeaderModel>(); for (int i = 0; i < numSohs; i++) { sohList.Add(GetTestSalesOrderHeader(testCompany, testCustomer, testUser, itemCount, true)); } var error = PickService.CreatePicks(testCompany, sohList, false, pickHeaders); foreach (var pickH in pickHeaders) { db.LogTestFile(pickH.PickFiles); PickService.SetPickSentToWarehouseDate(pickH, DateTimeOffset.Now); } Assert.IsTrue(!error.IsError, error.Message); // Now find the picks var pickList = PickService.FindPicksListModel(testCompany.Id, DateTimeOffset.Now.AddDays(-2), DateTimeOffset.Now) .Items .OrderBy(pl => pl.Id) .ToList(); // Check that the list contains all the picks we created int expected = numSohs, actual = pickList.Count(); Assert.IsTrue(actual == expected, "Error: {actual} picks were returned when {expected} were expected"); var exceptions = new List <string>(); exceptions.Add("PickDetails"); exceptions.Add("PickDropFolder"); // Because we don't know it at test prep for (int i = 0; i < numSohs; i++) { AreEqual(pickHeaders[i], pickList[i], exceptions); } // Delete the picks for (int i = 0; i < pickHeaders.Count(); i++) { PickService.DeletePick(pickHeaders[i]); } // Make sure they no longer exist pickList = PickService.FindPicksListModel(testCompany.Id, DateTimeOffset.Now.AddDays(-2), DateTimeOffset.Now).Items; expected = 0; actual = pickList.Count(); Assert.IsTrue(actual == expected, "Error: {actual} picks were returned when {expected} were expected"); }