private GetReceiptResponse GetReceiptsForSalesTransaction(SalesOrder salesOrder, IEnumerable <ReceiptType> receiptTypes, ReceiptRetrievalCriteria criteria) { if (!string.IsNullOrEmpty(salesOrder.ReceiptEmail)) { try { this.SendReceiptMail(salesOrder); } catch (CommunicationException) { // If failed to send email receipt, we still need to print paper receipt. } catch (FeatureNotSupportedException) { // Sending email receipt is not supported in offline mode. } } var getReceiptServiceRequest = new GetReceiptServiceRequest( salesOrder, receiptTypes, salesOrder.TenderLines, criteria.IsCopy, criteria.IsPreview, criteria.HardwareProfileId); var getReceiptServiceResponse = this.Context.Execute <GetReceiptServiceResponse>(getReceiptServiceRequest); return(new GetReceiptResponse(getReceiptServiceResponse.Receipts)); }
private GetReceiptResponse GetReceiptForNonSalesTransaction(string transactionId, ReceiptRetrievalCriteria criteria) { NonSalesTransaction nonSalesTransaction = null; long shiftId = criteria.ShiftId.GetValueOrDefault(0); switch (criteria.ReceiptType) { case ReceiptType.FloatEntry: nonSalesTransaction = this.GetNonSaleTransaction(transactionId, TransactionType.FloatEntry, shiftId, criteria.ShiftTerminalId); break; case ReceiptType.StartingAmount: nonSalesTransaction = this.GetNonSaleTransaction(transactionId, TransactionType.StartingAmount, shiftId, criteria.ShiftTerminalId); break; case ReceiptType.RemoveTender: nonSalesTransaction = this.GetNonSaleTransaction(transactionId, TransactionType.RemoveTender, shiftId, criteria.ShiftTerminalId); break; } var getReceiptServiceRequest = new GetReceiptServiceRequest(nonSalesTransaction, criteria.ReceiptType, criteria.IsCopy, criteria.IsPreview, criteria.HardwareProfileId); var getReceiptServiceResponse = this.Context.Execute <GetReceiptServiceResponse>(getReceiptServiceRequest); return(new GetReceiptResponse(getReceiptServiceResponse.Receipts)); }
private GetReceiptServiceRequest CreateXZReportReceiptServiceRequest(GetXAndZReportReceiptRequest request) { ThrowIf.Null(request, "request"); Shift shift; var shiftId = request.ShiftId; var receiptType = request.ReceiptType; // Validates if the request is XReport or ZReport type if ((receiptType != ReceiptType.XReport) && (receiptType != ReceiptType.ZReport)) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ReceiptTypeNotSupported, "Only receipt types for X or Z reports are expected."); } if (receiptType == ReceiptType.XReport) { var terminalId = request.ShiftTerminalId; GetShiftDataRequest getShiftDataRequest = new GetShiftDataRequest(terminalId, shiftId); shift = this.Context.Execute <SingleEntityDataServiceResponse <Shift> >(getShiftDataRequest).Entity; // Validates if an open or blind-closed shift of the ShiftId can be found when requesting XReport if (shift == null || (shift.Status != ShiftStatus.Open && shift.Status != ShiftStatus.BlindClosed)) { throw new DataValidationException( DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ShiftNotFound, string.Format("No open shift information can be found using the shift Id {0} on terminal {1} for X report.", shiftId, terminalId)); } // Calculates the shift information inorder to generate the X report ShiftCalculator.Calculate(this.Context, shift, shift.TerminalId, shift.ShiftId); } else { var terminalId = this.Context.GetTerminal().TerminalId; GetLastClosedShiftDataRequest getLastClosedShiftDataRequest = new GetLastClosedShiftDataRequest(terminalId); shift = this.Context.Execute <SingleEntityDataServiceResponse <Shift> >(getLastClosedShiftDataRequest).Entity; // Validates if a closed shift of the ShiftId can be found when requesting XReport if (shift == null || shift.Status != ShiftStatus.Closed) { throw new DataValidationException( DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ShiftNotFound, string.Format("No closed shift information can be found using the shift Id {0} on terminal {1} for Z report.", shiftId, terminalId)); } } var getReceiptServiceRequest = new GetReceiptServiceRequest( shift, new List <ReceiptType>() { receiptType }.AsReadOnly(), request.HardwareProfileId); return(getReceiptServiceRequest); }
private GetReceiptResponse GetReceiptForDropAndDeclarationTransaction(string transactionId, ReceiptRetrievalCriteria criteria) { DropAndDeclareTransaction dropAndDeclareTransaction = this.GetDropAndDeclareTransaction(transactionId); var getReceiptServiceRequest = new GetReceiptServiceRequest(dropAndDeclareTransaction, criteria.ReceiptType, criteria.IsCopy, criteria.IsPreview, criteria.HardwareProfileId); var getReceiptServiceResponse = this.Context.Execute <GetReceiptServiceResponse>(getReceiptServiceRequest); return(new GetReceiptResponse(getReceiptServiceResponse.Receipts)); }
/// <summary> /// Processes the GetReceiptRequest to return the set of receipts. The request should not be null. /// </summary> /// <param name="request">The request parameter.</param> /// <returns>The GetReceiptResponse.</returns> protected override GetReceiptResponse Process(GetReceiptRequest request) { ThrowIf.Null(request, "request"); ThrowIf.Null(request.ReceiptRetrievalCriteria, "request.ReceiptRetrievalCriteria"); ReceiptRetrievalCriteria criteria = request.ReceiptRetrievalCriteria; if (string.IsNullOrWhiteSpace(request.TransactionId)) { throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ObjectNotFound, "Transaction identifier must be provided."); } switch (criteria.ReceiptType) { case ReceiptType.BankDrop: case ReceiptType.SafeDrop: case ReceiptType.TenderDeclaration: { return(this.GetReceiptForDropAndDeclarationTransaction(request.TransactionId, criteria)); } case ReceiptType.FloatEntry: case ReceiptType.StartingAmount: case ReceiptType.RemoveTender: { return(this.GetReceiptForNonSalesTransaction(request.TransactionId, criteria)); } case ReceiptType.PackingSlip: { SalesOrder salesOrder = this.GetSalesOrder(request.TransactionId, criteria); var receiptTypes = new HashSet <ReceiptType> { ReceiptType.PackingSlip }; return(this.GetReceiptsForSalesTransaction(salesOrder, receiptTypes, criteria)); } case ReceiptType.PickupReceipt: { SalesOrder salesOrder = this.GetSalesOrder(request.TransactionId, criteria); HashSet <ReceiptType> receiptTypes = ReceiptWorkflowHelper.GetSalesTransactionReceiptTypes(salesOrder, this.Context); // The server does not have enought information to tell if a customer is picking up products // so client must explicitly tell the server that pickup receipt needs to be printed. receiptTypes.Add(ReceiptType.PickupReceipt); // If we are printing PickupReceipt then do not print SalesOrderReceipt if (receiptTypes.Contains(ReceiptType.SalesOrderReceipt)) { receiptTypes.Remove(ReceiptType.SalesOrderReceipt); } return(this.GetReceiptsForSalesTransaction(salesOrder, receiptTypes, criteria)); } // SalesOrderReceipt is for N-1. case ReceiptType.SalesOrderReceipt: case ReceiptType.Unknown: { SalesOrder salesOrder = this.GetSalesOrder(request.TransactionId, criteria); HashSet <ReceiptType> receiptTypes = ReceiptWorkflowHelper.GetSalesTransactionReceiptTypes(salesOrder, this.Context); return(this.GetReceiptsForSalesTransaction(salesOrder, receiptTypes, criteria)); } // Receipts types requested from ShowJournal should return only the given receipt type case ReceiptType.SalesReceipt: case ReceiptType.GiftReceipt: { SalesOrder salesOrder = this.GetSalesOrder(request.TransactionId, criteria); var receiptTypes = new HashSet <ReceiptType> { criteria.ReceiptType }; return(this.GetReceiptsForSalesTransaction(salesOrder, receiptTypes, criteria)); } case ReceiptType.CustomReceipt1: case ReceiptType.CustomReceipt2: case ReceiptType.CustomReceipt3: case ReceiptType.CustomReceipt4: case ReceiptType.CustomReceipt5: { SalesOrder salesOrder = this.GetTransactionForCustomReceipt(request); var receiptTypes = new HashSet <ReceiptType> { criteria.ReceiptType }; var getReceiptServiceRequest = new GetReceiptServiceRequest( salesOrder, receiptTypes, salesOrder.TenderLines, criteria.IsCopy, criteria.IsPreview, criteria.HardwareProfileId); var getReceiptServiceResponse = this.Context.Execute <GetReceiptServiceResponse>(getReceiptServiceRequest); return(new GetReceiptResponse(getReceiptServiceResponse.Receipts)); } default: throw new FeatureNotSupportedException(FeatureNotSupportedErrors.Microsoft_Dynamics_Commerce_Runtime_ReceiptTypeNotSupported, string.Format("The following receipt type is not supported: {0}", criteria.ReceiptType.ToString())); } }