Пример #1
0
        /// <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()));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        /// <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()));
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #12
0
        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));
        }
Пример #13
0
        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);
        }
Пример #14
0
        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");
        }