/// <summary> /// Process order paid status /// </summary> /// <param name="order">Order</param> protected virtual async Task ProcessOrderPaid(Order order) { if (order == null) { throw new ArgumentNullException("order"); } //raise event await _mediator.Publish(new OrderPaidEvent(order)); //order paid email notification if (order.OrderTotal != decimal.Zero) { //we should not send it for free ($0 total) orders? //remove this "if" statement if you want to send it in this case var orderPaidAttachmentFilePath = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && !_orderSettings.AttachPdfInvoiceToBinary ? await _pdfService.PrintOrderToPdf(order, "") : null; var orderPaidAttachmentFileName = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && !_orderSettings.AttachPdfInvoiceToBinary ? "order.pdf" : null; var orderPaidAttachments = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && _orderSettings.AttachPdfInvoiceToBinary ? new List <string> { await _pdfService.SaveOrderToBinary(order, "") } : new List <string>(); await _workflowMessageService.SendOrderPaidCustomerNotification(order, order.CustomerLanguageId, orderPaidAttachmentFilePath, orderPaidAttachmentFileName, orderPaidAttachments); await _workflowMessageService.SendOrderPaidStoreOwnerNotification(order, _localizationSettings.DefaultAdminLanguageId); if (order.OrderItems.Any(x => !string.IsNullOrEmpty(x.VendorId))) { var vendors = await _mediator.Send(new GetVendorsInOrderQuery() { Order = order }); foreach (var vendor in vendors) { await _workflowMessageService.SendOrderPaidVendorNotification(order, vendor, _localizationSettings.DefaultAdminLanguageId); } } //TODO add "order paid email sent" order note } }
/// <summary> /// Process order paid status /// </summary> /// <param name="order">Order</param> protected virtual async Task ProcessOrderPaid(Order order) { if (order == null) { throw new ArgumentNullException(nameof(order)); } //raise event await _mediator.Publish(new OrderPaidEvent(order)); //order paid email notification if (order.OrderTotal != decimal.Zero) { var customer = await _customerService.GetCustomerById(order.CustomerId); var orderPaidAttachmentFilePath = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && !_orderSettings.AttachPdfInvoiceToBinary ? await _pdfService.PrintOrderToPdf(order, "") : null; var orderPaidAttachmentFileName = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && !_orderSettings.AttachPdfInvoiceToBinary ? "order.pdf" : null; var orderPaidAttachments = _orderSettings.AttachPdfInvoiceToOrderPaidEmail && _orderSettings.AttachPdfInvoiceToBinary ? new List <string> { await _pdfService.SaveOrderToBinary(order, "") } : new List <string>(); await _messageProviderService.SendOrderPaidCustomerMessage(order, customer, order.CustomerLanguageId, orderPaidAttachmentFilePath, orderPaidAttachmentFileName, orderPaidAttachments); await _messageProviderService.SendOrderPaidStoreOwnerMessage(order, customer, _languageSettings.DefaultAdminLanguageId); if (order.OrderItems.Any(x => !string.IsNullOrEmpty(x.VendorId))) { var vendors = await _mediator.Send(new GetVendorsInOrderQuery() { Order = order }); foreach (var vendor in vendors) { await _messageProviderService.SendOrderPaidVendorMessage(order, vendor, _languageSettings.DefaultAdminLanguageId); } } //TODO add "order paid email sent" order note } }
public ActionResult GetPdfInvoice(int orderId) { var order = _orderService.GetOrderById(orderId); if (order == null || order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId) { return(new HttpUnauthorizedResult()); } string fileName = string.Format("order_{0}_{1}.pdf", order.OrderGuid, DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")); string filePath = string.Format("{0}content\\files\\ExportImport\\{1}", this.Request.PhysicalApplicationPath, fileName); _pdfService.PrintOrderToPdf(order, _workContext.WorkingLanguage, filePath); var pdfBytes = System.IO.File.ReadAllBytes(filePath); return(File(pdfBytes, "application/pdf", fileName)); }
public async Task <bool> Handle(SetOrderStatusCommand request, CancellationToken cancellationToken) { if (request.Order == null) { throw new ArgumentNullException(nameof(request.Order)); } int prevOrderStatus = request.Order.OrderStatusId; if (prevOrderStatus == (int)request.Os) { return(false); } //set and save new order status request.Order.OrderStatusId = (int)request.Os; await _orderService.UpdateOrder(request.Order); //order notes, notifications await _orderService.InsertOrderNote(new OrderNote { Note = string.Format("Order status has been changed to {0}", request.Os.ToString()), DisplayToCustomer = false, OrderId = request.Order.Id, CreatedOnUtc = DateTime.UtcNow }); var customer = await _customerService.GetCustomerById(request.Order.CustomerId); if (prevOrderStatus != (int)OrderStatusSystem.Complete && request.Os == OrderStatusSystem.Complete && request.NotifyCustomer) { //notification var orderCompletedAttachmentFilePath = _orderSettings.AttachPdfInvoiceToOrderCompletedEmail ? await _pdfService.PrintOrderToPdf(request.Order, "") : null; var orderCompletedAttachmentFileName = _orderSettings.AttachPdfInvoiceToOrderCompletedEmail ? "order.pdf" : null; var orderCompletedAttachments = _orderSettings.AttachPdfInvoiceToOrderCompletedEmail && _orderSettings.AttachPdfInvoiceToBinary ? new List <string> { await _pdfService.SaveOrderToBinary(request.Order, "") } : new List <string>(); int orderCompletedCustomerNotificationQueuedEmailId = await _messageProviderService .SendOrderCompletedCustomerMessage(request.Order, customer, request.Order.CustomerLanguageId, orderCompletedAttachmentFilePath, orderCompletedAttachmentFileName, orderCompletedAttachments); if (orderCompletedCustomerNotificationQueuedEmailId > 0) { await _orderService.InsertOrderNote(new OrderNote { Note = "\"Order completed\" email (to customer) has been queued.", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow, OrderId = request.Order.Id, }); } } if (prevOrderStatus != (int)OrderStatusSystem.Cancelled && request.Os == OrderStatusSystem.Cancelled && request.NotifyCustomer) { //notification customer int orderCancelledCustomerNotificationQueuedEmailId = await _messageProviderService.SendOrderCancelledCustomerMessage(request.Order, customer, request.Order.CustomerLanguageId); if (orderCancelledCustomerNotificationQueuedEmailId > 0) { await _orderService.InsertOrderNote(new OrderNote { Note = "\"Order cancelled\" email (to customer) has been queued.", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow, OrderId = request.Order.Id, }); } //notification for vendor await VendorNotification(request.Order); } if (prevOrderStatus != (int)OrderStatusSystem.Cancelled && request.Os == OrderStatusSystem.Cancelled && request.NotifyStoreOwner) { //notification store owner var orderCancelledStoreOwnerNotificationQueuedEmailId = await _messageProviderService.SendOrderCancelledStoreOwnerMessage(request.Order, customer, request.Order.CustomerLanguageId); if (orderCancelledStoreOwnerNotificationQueuedEmailId > 0) { await _orderService.InsertOrderNote(new OrderNote { Note = "\"Order cancelled\" by customer.", DisplayToCustomer = true, CreatedOnUtc = DateTime.UtcNow, OrderId = request.Order.Id, }); } //notification for vendor await VendorNotification(request.Order); } //loyalty points if (_loyaltyPointsSettings.PointsForPurchases_Awarded == request.Order.OrderStatusId) { await _mediator.Send(new AwardLoyaltyPointsCommand() { Order = request.Order }); } if (_loyaltyPointsSettings.ReduceLoyaltyPointsAfterCancelOrder && request.Order.OrderStatusId == (int)OrderStatusSystem.Cancelled) { await _mediator.Send(new ReduceLoyaltyPointsCommand() { Order = request.Order }); } //gift vouchers activation if (_orderSettings.GiftVouchers_Activated_OrderStatusId > 0 && _orderSettings.GiftVouchers_Activated_OrderStatusId == (int)request.Order.OrderStatusId) { await _mediator.Send(new ActivatedValueForPurchasedGiftVouchersCommand() { Order = request.Order, Activate = true }); } //gift vouchers deactivation if (_orderSettings.DeactivateGiftVouchersAfterCancelOrder && request.Order.OrderStatusId == (int)OrderStatusSystem.Cancelled) { await _mediator.Send(new ActivatedValueForPurchasedGiftVouchersCommand() { Order = request.Order, Activate = false }); } return(true); }
/// <summary> /// Print an order to PDF /// </summary> /// <param name="order">Order</param> /// <param name="languageId">Language identifier; 0 to use a language used when placing an order</param> /// <param name="vendorId">Vendor identifier to limit products; 0 to to print all products. If specified, then totals won't be printed</param> /// <returns>A path of generated file</returns> public string PrintOrderToPdf(Order order, int languageId = 0, int vendorId = 0) { return(_pdfService.PrintOrderToPdf(order, languageId, vendorId)); }