public void When_I_Call_SavePackingSlip_With_MembershipActivation_Flag_ActivateMembership_Should_Get_Called() { // Arrange string customerMail = "*****@*****.**"; var validatorResponse = new ResponseMessage { IsSuccess = true }; var creationResponse = new ResponseMessage { IsSuccess = true, Detail = "PS-004" }; var packingSlip = new PackingSlipHeader { CustomerEmail = customerMail, HasPhysicalProduct = true, ActivateMembership = true }; // Act _mockFreeItemCheckerService.Setup(x => x.CheckForFreeItems(packingSlip)).ReturnsAsync(packingSlip); _mockPackingSlipValidator.Setup(x => x.IsPackingSlipRequestValid(packingSlip)).Returns(validatorResponse); _mockPackingSlipRepository.Setup(x => x.SavePackingSlipAsync(packingSlip)).ReturnsAsync(creationResponse); var result = _packingSlipSaveService.SavePackingSlip(packingSlip); // Assert _mockCustomerMembershipRepository.Verify(x => x.ActivateMembershipAsync(customerMail), Times.Once); }
public void When_I_Call_IsPackingSlipRequestValid_With_Empty_CustomerEmail_I_Should_Get_False() { // Arrange string customerEmail = string.Empty; var packingSlip = new PackingSlipHeader { PackingSlipItems = new List <PackingSlipItem> { new PackingSlipItem { Name = "Test Item", Quantity = 2 } }, AgentName = It.IsAny <string>(), CustomerEmail = customerEmail, CustomerName = "Test Customer", PackingSlipNumber = "PS/001" }; // Act var valid = _packingSlipValidator.IsPackingSlipRequestValid(packingSlip); // Assert Assert.AreEqual(valid.Detail, PackingSlipConstants.CustomerEmailCannotBeBlankMessage); }
public void When_I_Call_IsPackingSlipRequestValid_With_Empty_Agent_With_PhysicalProduct_I_Should_Get_False() { // Arrange string customerEmail = "*****@*****.**"; var membershipResponse = new ResponseMessage { IsSuccess = false }; var packingSlip = new PackingSlipHeader { PackingSlipItems = new List <PackingSlipItem> { new PackingSlipItem { Name = "Test Item", Quantity = 2 } }, AgentName = string.Empty, HasPhysicalProduct = true, CustomerEmail = customerEmail, CustomerName = "Test Customer", PackingSlipNumber = "PS/001" }; // Act _mockCustomerMembershipRepository.Setup(x => x.IsMembershipValidForCreate(customerEmail)).Returns(membershipResponse); var valid = _packingSlipValidator.IsPackingSlipRequestValid(packingSlip); // Assert Assert.AreEqual(valid.Detail, PackingSlipConstants.AgentCannotBeBlankMessage); }
public void When_I_Call_IsPackingSlipRequestValid_With_Valid_PackingSlip_I_Should_Get_True() { // Arrange string customerEmail = "*****@*****.**"; var createMembershipCheckResponse = new ResponseMessage { IsSuccess = false }; var membership = new CustomerMembership { Email = customerEmail, IsActivated = false, IsUpgraded = false }; var packingSlip = new PackingSlipHeader { PackingSlipItems = new List <PackingSlipItem> { new PackingSlipItem { Name = "Test Item", Quantity = 2 } }, AgentName = It.IsAny <string>(), CustomerEmail = customerEmail, CustomerName = "Test Customer", PackingSlipNumber = "PS/001" }; // Act _mockCustomerMembershipRepository.Setup(x => x.IsMembershipValidForCreate(customerEmail)).Returns(createMembershipCheckResponse); var valid = _packingSlipValidator.IsPackingSlipRequestValid(packingSlip); // Assert Assert.IsTrue(valid.IsSuccess); }
private PackingSlipHeader CheckAndAddFreeItems(PackingSlipHeader packingSlipHeader, FreeProductHeaderModel headerModel) { bool isApplicable = true; foreach (var parent in headerModel.ParentProducts) { var productExists = (from tmpLine in packingSlipHeader.PackingSlipItems where tmpLine.Name == parent.Name && tmpLine.Quantity >= parent.Quantity select tmpLine).FirstOrDefault(); if (productExists == null) { isApplicable = false; break; } } if (isApplicable) { foreach (var child in headerModel.ChildProducts) { packingSlipHeader.PackingSlipItems.Add(new PackingSlipItem { IsFreeItem = true, Name = child.Name, ProductId = child.ProductId, Quantity = child.Quantity }); } } return(packingSlipHeader); }
public ResponseMessage IsPackingSlipRequestValid(PackingSlipHeader packingSlip) { ResponseMessage response = new ResponseMessage { IsSuccess = true }; if (string.IsNullOrEmpty(packingSlip.CustomerEmail)) { response.IsSuccess = false; response.Detail = PackingSlipConstants.CustomerEmailCannotBeBlankMessage; return(response); } response = _customerMembershipRepository.IsMembershipValidForCreate(packingSlip.CustomerEmail); if (response.IsSuccess) { response = _customerMembershipRepository.SaveMembershipAsync(new CustomerMembership { Email = packingSlip.CustomerEmail, IsActivated = false, IsUpgraded = false }).Result; } else { response.IsSuccess = true; } if ((packingSlip.HasPhysicalProduct.HasValue && packingSlip.HasPhysicalProduct.Value) || (packingSlip.HasBook.HasValue && packingSlip.HasBook.Value)) { if (string.IsNullOrEmpty(packingSlip.AgentName)) { response.IsSuccess = false; response.Detail = PackingSlipConstants.AgentCannotBeBlankMessage; return(response); } } if (packingSlip.ActivateMembership.HasValue && packingSlip.ActivateMembership.Value) { response = _customerMembershipRepository.IsMembershipValidForActivate(packingSlip.CustomerEmail); if (!response.IsSuccess) { return(response); } } if (packingSlip.UpgradeMembership.HasValue && packingSlip.UpgradeMembership.Value) { response = _customerMembershipRepository.IsMembershipValidForUpgrade(packingSlip.CustomerEmail); if (!response.IsSuccess) { return(response); } } return(response); }
public async Task <IActionResult> SavePackingSlip([FromBody] PackingSlipHeader packingSlip) { var response = await _packingSlipSaveService.SavePackingSlip(packingSlip); if (response.IsSuccess) { packingSlip.PackingSlipNumber = response.Detail; _packingSlipPrintService.PrintPackingSlip(packingSlip); } return(Ok(response)); }
public async Task <PackingSlipHeader> CheckForFreeItems(PackingSlipHeader packingSlipHeader) { var freeProducts = await _freeProductRepository.GetFreeProductList(); if (freeProducts.Any()) { freeProducts.ForEach(s => { packingSlipHeader = CheckAndAddFreeItems(packingSlipHeader, s); }); } return(packingSlipHeader); }
private bool PrintSlip(PackingSlipHeader packingSlipHeader) { bool success = false; using (MemoryStream stream = new MemoryStream()) { Document document = new Document(PageSize.A4, 2, 2, 2, 2); PdfWriter writer = PdfWriter.GetInstance(document, stream); document.Open(); Font bodyFont = new Font(Font.HELVETICA, 10f, Font.NORMAL); float[] columnWidth = new float[] { 120f, 50f, 50f }; PdfPTable table = new PdfPTable(3); table.SetWidths(columnWidth); PdfPCell header = new PdfPCell(new Phrase($"Packing Slip No: {packingSlipHeader.PackingSlipNumber} - Dated:{DateTime.Now}", FontFactory.GetFont(FontFactory.HELVETICA, 10))); header.Colspan = 3; table.AddCell(header); PdfPCell productNameHeader = new PdfPCell(new Phrase($"Prduct Name", FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); productNameHeader = new PdfPCell(new Phrase($"Quantity", FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); productNameHeader = new PdfPCell(new Phrase($"Comments", FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); table.CompleteRow(); foreach (var item in packingSlipHeader.PackingSlipItems) { productNameHeader = new PdfPCell(new Phrase(item.Name, FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); productNameHeader = new PdfPCell(new Phrase(item.Quantity.ToString("N0"), FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); productNameHeader = new PdfPCell(new Phrase(string.Empty, FontFactory.GetFont(FontFactory.HELVETICA, 10))); table.AddCell(productNameHeader); table.CompleteRow(); } document.Add(table); string fileName = Path.Combine(_fileConfig.DownloadPath, $"PackingSlip-{packingSlipHeader.PackingSlipNumber}.pdf"); File.WriteAllBytes(fileName, stream.ToArray()); } success = true; return(success); }
public ResponseMessage PrintPackingSlip(PackingSlipHeader packingSlipHeader) { ResponseMessage response = new ResponseMessage { IsSuccess = false }; bool success = false; if ((packingSlipHeader.HasPhysicalProduct.HasValue && packingSlipHeader.HasPhysicalProduct.Value) || (packingSlipHeader.HasBook.HasValue && packingSlipHeader.HasBook.Value)) { success = PrintSlip(packingSlipHeader); } response.IsSuccess = success; return(response); }
public async Task <ResponseMessage> SavePackingSlipAsync(PackingSlipHeader packingSlip) { ResponseMessage message = new ResponseMessage { IsSuccess = false }; int maxNumber = 0; try { using (IDbContextTransaction transaction = _context.Database.BeginTransaction()) { if (_context.PackingSlipHeaders.Any()) { maxNumber = _context.PackingSlipHeaders.Max(s => s.Id); } packingSlip.PackingSlipNumber = $"PS-{maxNumber}"; _context.PackingSlipHeaders.Add(packingSlip); await _context.SaveChangesAsync(); int packingId = packingSlip.Id; foreach (var item in packingSlip.PackingSlipItems.ToList()) { var product = _context.Products.FirstOrDefault(x => x.Name == item.Name); _context.PackingSlipItems.Add(new PackingSlipItem { Amount = (item.IsFreeItem.HasValue && item.IsFreeItem.Value) ? 0 : item.Quantity * product.Rate, Name = item.Name, PackingSlipId = packingId, Quantity = item.Quantity, ProductId = product.Id, }); } await _context.SaveChangesAsync(); await transaction.CommitAsync(); message.IsSuccess = true; message.Detail = packingSlip.PackingSlipNumber; } } catch (Exception ex) { } return(message); }
public async Task <ResponseMessage> SavePackingSlip(PackingSlipHeader packingSlip) { ResponseMessage message = new ResponseMessage { IsSuccess = true }; packingSlip = await _freeItemCheckerService.CheckForFreeItems(packingSlip); message = _packingSlipValidator.IsPackingSlipRequestValid(packingSlip); if (!message.IsSuccess) { return(message); } message = await _packingSlipRepository.SavePackingSlipAsync(packingSlip); if ((packingSlip.HasPhysicalProduct.HasValue && packingSlip.HasPhysicalProduct.Value) || (packingSlip.HasBook.HasValue && packingSlip.HasBook.Value)) { await _agentCommissionRepository.AddAgentCommission(packingSlip, 100); } if (packingSlip.ActivateMembership.HasValue && packingSlip.ActivateMembership.Value) { await _customerMembershipRepository.ActivateMembershipAsync(packingSlip.CustomerEmail); await _emailService.SendMail(_fileConfig.UserCredential, packingSlip.CustomerEmail, PackingSlipConstants.MembershipActivationSubject, PackingSlipConstants.MembershipActivationBody, _fileConfig.UserCredential, _fileConfig.Password, _fileConfig.Host, _fileConfig.Port); } if (packingSlip.UpgradeMembership.HasValue && packingSlip.UpgradeMembership.Value) { await _customerMembershipRepository.UpgradeMembershipAsync(packingSlip.CustomerEmail); await _emailService.SendMail(_fileConfig.UserCredential, packingSlip.CustomerEmail, PackingSlipConstants.MembershipUpgradeSubject, PackingSlipConstants.MembershipUpgradeBody, _fileConfig.UserCredential, _fileConfig.Password, _fileConfig.Host, _fileConfig.Port); } return(message); }
public void When_I_Call_SavePackingSlip_With_Invalid_Option_I_Should_Get_Failure_Response() { // Arrange var validatorResponse = new ResponseMessage { IsSuccess = false }; var packingSlip = new PackingSlipHeader { CustomerEmail = string.Empty }; // Act _mockFreeItemCheckerService.Setup(x => x.CheckForFreeItems(packingSlip)).ReturnsAsync(packingSlip); _mockPackingSlipValidator.Setup(x => x.IsPackingSlipRequestValid(packingSlip)).Returns(validatorResponse); var result = _packingSlipSaveService.SavePackingSlip(packingSlip); // Assert Assert.IsFalse(result.Result.IsSuccess); }
public async Task <ResponseMessage> AddAgentCommission(PackingSlipHeader packingSlipHeader, decimal amount) { ResponseMessage message = new ResponseMessage { IsSuccess = false }; var commission = new AgentCommission { AgentName = packingSlipHeader.AgentName, Amount = amount, PackingSlipId = packingSlipHeader.Id }; _context.AgentCommissions.Add(commission); await _context.SaveChangesAsync(); message.IsSuccess = true; return(message); }
private static string PrintPackingSlip(PackingSlipHeader packingSlip) { string response = string.Empty; string requestBody = JsonConvert.SerializeObject(packingSlip); using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri("https://localhost:44383"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var apiResponse = client.PostAsync("https://localhost:44383/api/packing/SaveSlip", new StringContent(requestBody, Encoding.UTF8, "application/json")).Result; if (apiResponse != null && apiResponse.Content != null && apiResponse.IsSuccessStatusCode) { var message = JsonConvert.DeserializeObject <ResponseMessage>(apiResponse.Content.ReadAsStringAsync().Result); response = message.Detail; } else { response = "Packing slip could not be generated"; } } return(response); }
public void When_I_Call_SavePackingSlip_With_PhysicalProducts_AgentCommission_Should_Get_Called() { // Arrange var validatorResponse = new ResponseMessage { IsSuccess = true }; var creationResponse = new ResponseMessage { IsSuccess = true, Detail = "PS-004" }; var packingSlip = new PackingSlipHeader { CustomerEmail = string.Empty, HasPhysicalProduct = true }; // Act _mockFreeItemCheckerService.Setup(x => x.CheckForFreeItems(packingSlip)).ReturnsAsync(packingSlip); _mockPackingSlipValidator.Setup(x => x.IsPackingSlipRequestValid(packingSlip)).Returns(validatorResponse); _mockPackingSlipRepository.Setup(x => x.SavePackingSlipAsync(packingSlip)).ReturnsAsync(creationResponse); var result = _packingSlipSaveService.SavePackingSlip(packingSlip); // Assert _mockAgentCommissionRepository.Verify(x => x.AddAgentCommission(packingSlip, 100), Times.Once); }
static void Main(string[] args) { System.Console.WriteLine("Customer Email:"); string customerMail = System.Console.ReadLine(); System.Console.WriteLine("Customer Name:"); string customerName = System.Console.ReadLine(); System.Console.WriteLine("Agent Name:"); string agentName = System.Console.ReadLine(); System.Console.WriteLine("Activate Membership?(Y/N):"); string membershipActivate = System.Console.ReadLine(); System.Console.WriteLine("Upgrade Membership?(Y/N):"); string membershipUpgrade = System.Console.ReadLine(); System.Console.WriteLine("Has Physical products?(Y/N):"); string physicalProduct = System.Console.ReadLine(); System.Console.WriteLine("Has book?(Y/N):"); string book = System.Console.ReadLine(); System.Console.WriteLine("Enter item(s):"); System.Console.WriteLine("Name:"); List <string> itemList = new List <string>(); string itemName = System.Console.ReadLine(); System.Console.WriteLine("Qty:"); string qty = System.Console.ReadLine(); if (!string.IsNullOrEmpty(itemName) && !string.IsNullOrEmpty(qty)) { itemList.Add($"{itemName}``{qty}"); } else { System.Console.WriteLine("Cannot continue with 0 items."); System.Console.ReadLine(); } PackingSlipHeader packingSlip = new PackingSlipHeader { CustomerEmail = customerMail, CustomerName = customerName, AgentName = agentName, ActivateMembership = membershipActivate.ToUpper() == "Y"?true:false, UpgradeMembership = membershipUpgrade.ToUpper() == "Y"?true:false, HasPhysicalProduct = physicalProduct.ToUpper() == "Y"?true:false, HasBook = book.ToUpper() == "Y"?true:false, }; itemList.ForEach(s => { string[] itemDetail = s.Split("``"); packingSlip.PackingSlipItems.Add(new PackingSlipItem { Name = itemDetail[0], Quantity = Convert.ToInt32(itemDetail[1]) }); }); string output = PrintPackingSlip(packingSlip); System.Console.WriteLine(output); System.Console.ReadLine(); }