public CheckResult Check(IUnitOfWork db, DTOMarketOrder order, IList <ListingOrderDTO> items, AddressValidationStatus addressValidationStatus) { if (order.Id == 0) { throw new ArgumentOutOfRangeException("order.Id", "Should be non zero"); } if (order.OrderStatus == OrderStatusEnumEx.Pending) { throw new ArgumentException("order.OrderStatus", "Not supported status Pending"); } if (addressValidationStatus >= AddressValidationStatus.Invalid) { var address = order.GetAddressDto(); var isFFAddress = AddressHelper.IsFFAddress(address); if (isFFAddress) { return(new CheckResult() { IsSuccess = true }); } } return(new CheckResult() { IsSuccess = false }); }
public void OrderValidationStepInitial(IUnitOfWork db, ITime time, CompanyDTO company, DTOMarketOrder marketOrder, IList <ListingOrderDTO> orderItems, Order dbOrder) { //var upgradeChecker = new UpgradeOrderChecker(_log, _time); //var result = upgradeChecker.Check(db, marketOrder, orderItems); //upgradeChecker.ProcessResult(result, dbOrder); var duplicateChecker = new DuplicateChecker(_log, _emailService, _time); var result = duplicateChecker.Check(db, marketOrder, orderItems); duplicateChecker.ProcessResult(result, dbOrder); var insureChecker = new InsureChecker(_log, _orderHistory); result = insureChecker.Check(db, marketOrder); insureChecker.ProcessResult(result, dbOrder); var primeChecker = new PrimeChecker(_log); result = primeChecker.Check(db, marketOrder); primeChecker.ProcessResult(result, dbOrder); var dhlChecker = new DhlChecker(_log); result = dhlChecker.Check(db, marketOrder, orderItems); dhlChecker.ProcessResult(result, dbOrder); var blackListChecker = new BlackListChecker(_log, _time); result = blackListChecker.Check(db, marketOrder); blackListChecker.ProcessResult(result, dbOrder); var restockChecker = new RestockChecker(_log, _time); result = restockChecker.Check(db, marketOrder, orderItems); restockChecker.ProcessResult(result, dbOrder); var signConfirmationByOrderCostChecker = new SignConfirmationByOrderCostChecker(_log, _time, db); result = signConfirmationByOrderCostChecker.Check( marketOrder, orderItems); signConfirmationByOrderCostChecker.ProcessResult(result, dbOrder); var replaceFrenchChecker = new ReplaceFrenchCharsChecker(_log, _time); result = replaceFrenchChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); replaceFrenchChecker.ProcessResult(result, dbOrder); //var signConfirmationByServiceTypeChecker = new SignConfirmationByServiceTypeChecker(_log, db, _emailService, _time); //result = signConfirmationByServiceTypeChecker.Check(marketOrder, // orderItems); //signConfirmationByServiceTypeChecker.ProcessResult(result, dbOrder, marketOrder, orderItems); //var signConfirmationRemoveBuyerAskedBeforeChecker = new SignConfirmationRemoveBuyerAskedBeforeChecker(_log, db, _emailService, _time); //result = signConfirmationRemoveBuyerAskedBeforeChecker.Check(marketOrder, // orderItems); //signConfirmationRemoveBuyerAskedBeforeChecker.ProcessResult(result, dbOrder, marketOrder, orderItems); var oversoldChecker = new OversoldChecker(_log, _time, _emailService, _settings); result = oversoldChecker.Check(db, marketOrder, orderItems); oversoldChecker.ProcessResult(result, dbOrder); var oversoldOnHoldChecker = new OnHoldOversoldChecker(_log, _time, _emailService); result = oversoldOnHoldChecker.Check(db, marketOrder, orderItems); oversoldOnHoldChecker.ProcessResult(result, dbOrder); CheckAddressStep(db, dbOrder, marketOrder.GetAddressDto()); var recipientNameChecker = new RecipientNameChecker(_log, _emailService, _time, () => CheckAddressStep(db, dbOrder, marketOrder.GetAddressDto())); result = recipientNameChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); recipientNameChecker.ProcessResult(result, dbOrder); //NOTE: recheck address if name was corected if (result.IsSuccess) { CheckAddressStep(db, dbOrder, marketOrder.GetAddressDto()); } var zipCodeChecker = new ZipCodeChecker(_log, _time); result = zipCodeChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); zipCodeChecker.ProcessResult(result, dbOrder); var shippingStateChecker = new ShippingStateChecker(_log, _time); result = shippingStateChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); shippingStateChecker.ProcessResult(result, dbOrder); var phoneNumberChecker = new PhoneNumberChecker(_log, _emailService, _time); result = phoneNumberChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); phoneNumberChecker.ProcessResult(result, dbOrder); var dismissFFAddressChecker = new DismissFFAddressChecker(_log, _emailService, db, _time); result = dismissFFAddressChecker.Check(db, marketOrder, orderItems, (AddressValidationStatus)dbOrder.AddressValidationStatus); dismissFFAddressChecker.ProcessResult(result, dbOrder); //var addressNotServedByUSPSChecker = new AddressNotServedByUSPSChecker(_log, _htmlScraper, _emailService, _time); //result = addressNotServedByUSPSChecker.Check(db, // marketOrder, // orderItems, // (AddressValidationStatus)dbOrder.AddressValidationStatus); //addressNotServedByUSPSChecker.ProcessResult(result, dbOrder); var internationalExpressChecker = new InternationalExpressChecker(_log, _time); result = internationalExpressChecker.Check(marketOrder); internationalExpressChecker.ProcessResult(db, result, dbOrder); var sameDayChecker = new SameDayChecker(_log, _time); result = sameDayChecker.Check(marketOrder); sameDayChecker.ProcessResult(db, result, dbOrder); var noWeightChecker = new NoWeightChecker(_log, _emailService, _time, company); result = noWeightChecker.Check(db, marketOrder, orderItems); noWeightChecker.ProcessResult(result, dbOrder); dbOrder.CheckedDate = _time.GetAppNowTime(); dbOrder.CheckedTimes = dbOrder.CheckedTimes + 1; db.Commit(); }
public CheckResult Check(IUnitOfWork db, DTOMarketOrder order, IList <ListingOrderDTO> items, AddressValidationStatus addressValidationStatus) { //NOTE: Skipping valid addresses if (addressValidationStatus < AddressValidationStatus.Invalid) { return(new CheckResult() { IsSuccess = true }); } var checkUSPSService = new PersonatorAddressCheckService(_log, _htmlScraper, null); var address = order.GetAddressDto(); var addressCheckResult = checkUSPSService.ScrappingCheckAddress(address); var result = new CheckResult() { IsSuccess = !addressCheckResult.IsNotServedByUSPSNote }; _log.Info("AddressNotServedByUSPSChecker, hasNote=" + addressCheckResult.IsNotServedByUSPSNote); if (addressCheckResult.IsNotServedByUSPSNote) { var existNotifier = db.OrderEmailNotifies.IsExist(order.OrderId, OrderEmailNotifyType.OutputAddressNotServedByUSPSEmail); if (!existNotifier) { var emailInfo = new AddressNotServedByUSPSEmailInfo(_emailService.AddressService, null, order.OrderId, (MarketType)order.Market, address, order.BuyerName, order.BuyerEmail, order.EarliestShipDate ?? (order.OrderDate ?? DateTime.Today).AddDays(1)); _emailService.SendEmail(emailInfo, CallSource.Service); _log.Info("Send address not served by USPS email, orderId=" + order.Id); db.OrderEmailNotifies.Add(new OrderEmailNotify() { OrderNumber = order.OrderId, Reason = "Address isn’t served by USPS", Type = (int)OrderEmailNotifyType.OutputAddressNotServedByUSPSEmail, CreateDate = _time.GetUtcTime(), }); } db.OrderComments.Add(new OrderComment() { OrderId = order.Id, Message = "Address isn’t served by USPS. Address verification email sent.", Type = (int)CommentType.OutputEmail, CreateDate = _time.GetAppNowTime(), UpdateDate = _time.GetAppNowTime() }); db.Commit(); } return(result); }
public CheckResult Check(IUnitOfWork db, DTOMarketOrder order, IList <ListingOrderDTO> items, AddressValidationStatus addressValidationStatus) { if (order.Id == 0) { throw new ArgumentOutOfRangeException("order.Id", "Should be non zero"); } if (order.OrderStatus == OrderStatusEnumEx.Pending) { throw new ArgumentException("order.OrderStatus", "Not supported status Pending"); } //International order has issue with PersonName if (!AddressHelper.IsStampsValidPersonName(order.FinalPersonName) && (order.AddressValidationStatus == (int)AddressValidationStatus.InvalidRecipientName || ShippingUtils.IsInternationalState(order.FinalShippingState) || ShippingUtils.IsInternational(order.FinalShippingCountry))) { //If can resolved using BuyerName var nameKeywords = (order.FinalPersonName ?? "").Split(", .".ToCharArray()).Where(n => n.Length > 2).ToArray(); if (!nameKeywords.Any()) { nameKeywords = (order.FinalPersonName ?? "").Split(", .".ToCharArray()).ToArray(); } if (AddressHelper.IsStampsValidPersonName(order.BuyerName) //NOTE: #1 Exclude prefix Mr., initials, like a.cheszes //NOTE: #2 Include when name has only one letter && StringHelper.ContrainOneOfKeywords(order.BuyerName, nameKeywords)) { db.OrderComments.Add(new OrderComment() { OrderId = order.Id, Message = "[System] Incomplete recipient name was replaced with buyer name: " + order.FinalPersonName + "=>" + order.BuyerName, Type = (int)CommentType.Address, CreateDate = _time.GetAppNowTime() }); if (order.IsManuallyUpdated) { order.ManuallyPersonName = order.BuyerName; } else { order.PersonName = order.BuyerName; } return(new CheckResult() { IsSuccess = true, AdditionalData = new[] { order.PersonName } }); } //Send email else { var emailInfo = new IncompleteNameEmailInfo(_emailService.AddressService, null, order.OrderId, (MarketType)order.Market, order.GetAddressDto(), items, order.BuyerName, order.BuyerEmail); _emailService.SendEmail(emailInfo, CallSource.Service); _log.Info("Send incomplete person name email, orderId=" + order.Id); db.OrderEmailNotifies.Add(new OrderEmailNotify() { OrderNumber = order.OrderId, Reason = "System emailed, incomplete name", Type = (int)OrderEmailNotifyType.OutputIncompleteNameEmail, CreateDate = _time.GetUtcTime(), }); db.OrderComments.Add(new OrderComment() { OrderId = order.Id, Message = "[System] Incomplete name email sent", Type = (int)CommentType.Address, CreateDate = _time.GetAppNowTime(), UpdateDate = _time.GetAppNowTime() }); db.Commit(); return(new CheckResult() { IsSuccess = false, AdditionalData = new List <string>() { "OnHold" } }); } } return(new CheckResult() { IsSuccess = false }); }