private void ErrorRecovery() { if (!_isOnline) { return; } if (!_sessionManager.IsErrorRecoveryInfo()) { return; } var errorRecoveryStatus = _sessionManager.GetErrorRecoveryStatus(); if (errorRecoveryStatus.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show("The old message set ID does not match any stored IDs and no new message set ID is provided.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (errorRecoveryStatus.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show("Invalid checksum. The new message set ID specified matches the currently stored ID but the checksum fails.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (errorRecoveryStatus.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (errorRecoveryStatus.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid message set ID, greater than 24 characters was given", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (errorRecoveryStatus.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { var errorRecoveryStatusCode = errorRecoveryStatus.ResponseList.GetAt(0).StatusCode; if (errorRecoveryStatusCode == 0) { MessageBox.Show("Last request was processed and invoice was added successfully.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (errorRecoveryStatusCode > 0) { MessageBox.Show("There was a warning but the last request was processed successfully.", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Error processing last request", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Error); var savedMessage = _sessionManager.GetSavedMsgSetRequest(); var responseMessageSet = _sessionManager.DoRequests(savedMessage); var response = responseMessageSet.ResponseList.GetAt(0); var statusCode = response.StatusCode; if (statusCode == 0) { var invoiceRet = response.Detail as IInvoiceRet; var resultString = "Following invoice has been successfully submitted to QuickBooks:" + Environment.NewLine + Environment.NewLine; if (invoiceRet != null && invoiceRet.TxnNumber != null) { resultString += "Transaction number = " + invoiceRet.TxnNumber.GetValue().ToString(CultureInfo.InvariantCulture); } MessageBox.Show(resultString, "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } _sessionManager.ClearErrorRecovery(); MessageBox.Show("Proceeding with current transaction", "QuickBooks Recovery", MessageBoxButtons.OK, MessageBoxIcon.Information); }
internal static IReceivePaymentRet QbAddPayment(QuickBooksOrderDocumentDto receipt, string qbInvoiceTxnId, string accountRef, List<string> references) { if (receipt.DocumentType != DocumentType.Receipt) throw new ArgumentException("document is not an an Receipt"); bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; IReceivePaymentRet custRet = resp.Detail as IReceivePaymentRet; resStr = resStr + "Following customer has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.TxnID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.TxnID.GetValue()) + "\n"; } Log(QBCRUDEAction.ErrorRecovery, "Invoice", (custRet == null ? "" : custRet.RefNumber.GetValue()), resp); } } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion //var iterator =1; //IItemInventoryRet product = GetProductByCode(receiptLineItem.ProductCode); //if (product == null) continue; IReceivePaymentAdd receivePaymentAddRq = requestMsgSet.AppendReceivePaymentAddRq(); receivePaymentAddRq.CustomerRef.FullName.SetValue(receipt.OutletName); receivePaymentAddRq.TxnDate.SetValue(Convert.ToDateTime(receipt.DocumentDateIssued)); receivePaymentAddRq.RefNumber.SetValue(receipt.GenericReference.Substring((receipt.GenericReference.Length - 11), 11)); var paymentmethod = "Cash"; var quickBooksOrderDocLineItem = receipt.LineItems.FirstOrDefault(); if (quickBooksOrderDocLineItem != null && !string.IsNullOrEmpty(quickBooksOrderDocLineItem.PaymentType)) { paymentmethod = quickBooksOrderDocLineItem.PaymentType; } //var paymentmethod = quickBooksOrderDocLineItem.PaymentType; receivePaymentAddRq.PaymentMethodRef.FullName.SetValue(paymentmethod); receivePaymentAddRq.ARAccountRef.ListID.SetValue(accountRef); //decimal total = 0m; //foreach (var item in receipt.LineItems) //{ // total += item.LineItemValue; //} var total = receipt.LineItems.Sum(receiptLineItem => receiptLineItem.LineItemValue); receivePaymentAddRq.TotalAmount.SetValue(Convert.ToDouble(Math.Round(total, 2))); receivePaymentAddRq.ORApplyPayment.IsAutoApply.SetValue(true); try { // receivePaymentAddRq.SetValue(Convert.ToDouble(Math.Round(receiptLineItem.TotalVat, 2))); } catch (Exception e) { Console.WriteLine(e); Log(e.Message); } responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); IReceivePaymentRet salesReceipRet = response.Detail as IReceivePaymentRet; int statusCode = response.StatusCode; if (statusCode == 0) { Console.WriteLine("Success"); } sessionManager.ClearErrorRecovery(); sessionManager.EndSession(); boolSessionBegun = false; sessionManager.CloseConnection(); Log(QBCRUDEAction.Add, "SalesReceipt", (salesReceipRet == null ? "" : salesReceipRet.RefNumber.GetValue()), response); return salesReceipRet; } catch (Exception ex) { if (boolSessionBegun) { sessionManager.EndSession(); sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); MessageBox.Show(error); } return null; }
public string CreateMultiSampleInvoice(string arlNumbers, Identification identification) { int invoiceNumber = 0; List<string> tests = new List<string>(); string testIds = null; List<string> charges = new List<string>(); string chargeIds = null; try { //Data for invoice DbCommand.CommandType = CommandType.StoredProcedure; DbCommand.CommandText = "uspGetMultipleInvoicableSamples"; DbCommand.Parameters.Clear(); DbCommand.Parameters.Add("@ARLNumbers", System.Data.SqlDbType.NVarChar, 4000).Value = arlNumbers; DataTable returnDT = DbConnection.ExecuteQuery(DbCommand); Invoice invoice = new Invoice(); foreach (DataRow row in returnDT.Rows) { invoice.ARLNumber = Convert.ToInt32(row["ARLNumber"]); invoice.ClientName = row["ClientName"].ToString(); invoice.AccountingId = row["AccountingId"].ToString(); invoice.PONumber = row["PONumber"].ToString(); invoice.TermName = row["TermName"].ToString(); invoice.IncludeYN = (bool)false; } DbCommand.CommandType = CommandType.StoredProcedure; DbCommand.CommandText = "uspGetMultipleInvoicableSampleItems"; DbCommand.Parameters.Clear(); DbCommand.Parameters.Add("@ARLNumbers", System.Data.SqlDbType.NVarChar, 4000).Value = arlNumbers; DataTable returnDT2 = DbConnection.ExecuteQuery(dbCommand); SmartCollection<InvoiceItem> itemList = new SmartCollection<InvoiceItem>(); foreach (DataRow row in returnDT2.Rows) { InvoiceItem invoiceItem = new InvoiceItem(); invoiceItem.AccountingCode = row["AccountingCode"].ToString(); invoiceItem.Class = row["DepartmentName"].ToString(); invoiceItem.Other1 = row["TestName"].ToString(); invoiceItem.Other2 = row["AnalystName"].ToString(); invoiceItem.Description = row["Description"].ToString(); if (row["BasePrice"] != DBNull.Value) invoiceItem.Amount = Convert.ToDouble(row["BasePrice"]); if (row["Ordering"].ToString() != "5" && !tests.Contains(row["SampleTestId"].ToString())) tests.Add(row["SampleTestId"].ToString()); if (row["Ordering"].ToString() == "5" && !charges.Contains(row["SampleTestId"].ToString())) charges.Add(row["SampleTestId"].ToString()); itemList.Add(invoiceItem); } invoice.InvoiceItems = itemList; //SessionManager sessionManager = SessionManager.getInstance(); QBSessionManager sessionManager = new QBSessionManager(); sessionManager.OpenConnection2("", "LIMS2", ENConnectionType.ctLocalQBD); sessionManager.BeginSession("", ENOpenMode.omDontCare); //IMsgSetRequest requestMsgSet = sessionManager.getMsgSetRequest(); //IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0); IMsgSetRequest requestMsgSet = getLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; // ERROR RECOVERY: // All steps are described in QBFC Developers Guide, on pg 41 // under section titled "Automated Error Recovery" // (1) Set the error recovery ID using ErrorRecoveryID function // Value must be in GUID format // You could use c:\Program Files\Microsoft Visual Studio\Common\Tools\GuidGen.exe // to create a GUID for your unique ID string errecid = "{C5F2272F-4DAD-435F-8ABB-EB1AC0802D52}"; sessionManager.ErrorRecoveryID.SetValue(errecid); // (2) Set EnableErrorRecovery to true to enable error recovery sessionManager.EnableErrorRecovery = true; // (3) Set SaveAllMsgSetRequestInfo to true so the entire contents of the MsgSetRequest // will be saved to disk. If SaveAllMsgSetRequestInfo is false (default), only the // newMessageSetID will be saved. sessionManager.SaveAllMsgSetRequestInfo = true; // (4) Use IsErrorRecoveryInfo to check whether an unprocessed response exists. // If IsErrorRecoveryInfo is true: if (sessionManager.IsErrorRecoveryInfo()) { //string reqXML; //string resXML; IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; // a. Get the response status, using GetErrorRecoveryStatus resMsgSet = sessionManager.GetErrorRecoveryStatus(); // resXML = resMsgSet.ToXMLString(); // MessageBox.Show(resXML); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { // This case may occur when a transaction has failed after QB processed // the request but client app didn't get the response and started with // another company file. // MessageBox.Show("The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); int i = 0; } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { // MessageBox.Show("Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); int i = 0; } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { // Response was not successfully stored or stored properly // MessageBox.Show("No stored response was found."); int i = 0; } // 9003 = Not used else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { // MessageSetID is set with a string of size > 24 char //MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); int i = 0; } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { //MessageBox.Show("Unable to store response."); int i = 0; } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; //string sMessage = res.StatusMessage; //string sSeverity = res.StatusSeverity; //MessageBox.Show("StatusCode = " + sCode + "\n" + "StatusMessage = " + sMessage + "\n" + "StatusSeverity = " + sSeverity); if (sCode == 0) { //MessageBox.Show("Last request was processed and Invoice was added successfully!"); int i = 0; } else if (sCode > 0) { //MessageBox.Show("There was a warning but last request was processed successfully!"); int i = 0; } else { //MessageBox.Show("It seems that there was an error in processing last request"); // b. Get the saved request, using GetSavedMsgSetRequest reqMsgSet = sessionManager.GetSavedMsgSetRequest(); //reqXML = reqMsgSet.ToXMLString(); //MessageBox.Show(reqXML); // c. Process the response, possibly using the saved request resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; IInvoiceRet invRet = resp.Detail as IInvoiceRet; resStr = resStr + "Following invoice has been successfully submitted to QuickBooks:\n\n\n"; if (invRet.TxnNumber != null) resStr = resStr + "Txn Number = " + Convert.ToString(invRet.TxnNumber.GetValue()) + "\n"; } // if (statusCode == 0) } // else (sCode) } // else (MessageSetStatusCode) // d. Clear the response status, using ClearErrorRecovery sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } IInvoiceAdd invAdd = requestMsgSet.AppendInvoiceAddRq(); invAdd.TemplateRef.FullName.SetValue("Copy 2 : Intuit Service Invoice"); // CustomerRef -> FullName if (invoice.ClientName != "") { invAdd.CustomerRef.FullName.SetValue(invoice.AccountingId); } // PO Number if (invoice.PONumber != "") { invAdd.PONumber.SetValue(invoice.PONumber); } // Terms if (invoice.TermName != "") { invAdd.TermsRef.FullName.SetValue(invoice.TermName); DateTime DT_DueDate = System.DateTime.Today; double dueInDays = getDueInDays(invoice.TermName); DT_DueDate = DT_DueDate.AddDays(dueInDays); invAdd.DueDate.SetValue(DT_DueDate); } // TxnDate DateTime DT_TxnDate = System.DateTime.Today; invAdd.TxnDate.SetValue(DT_TxnDate); // CustomerMsgRef -> FullName invAdd.CustomerMsgRef.FullName.SetValue("Thank you for your business."); //Line Items foreach (InvoiceItem item in invoice.InvoiceItems) { IORInvoiceLineAdd invLineAdd = invAdd.ORInvoiceLineAddList.Append(); if (item.AccountingCode != "") { invLineAdd.InvoiceLineAdd.ItemRef.FullName.SetValue(item.AccountingCode); } if (item.Class != "") { invLineAdd.InvoiceLineAdd.ClassRef.FullName.SetValue(item.Class); } if (item.Other1 != "") { invLineAdd.InvoiceLineAdd.Other1.SetValue(item.Other1); } if (item.Other2 != "") { invLineAdd.InvoiceLineAdd.Other2.SetValue(item.Other2); } if (item.Description != "") { invLineAdd.InvoiceLineAdd.Desc.SetValue(item.Description); } //invLineAdd.InvoiceLineAdd. if (item.AccountingCode != "DISCOUNT") invLineAdd.InvoiceLineAdd.Quantity.SetValue(Convert.ToDouble(1)); if (item.Amount.IsNotNull()) { invLineAdd.InvoiceLineAdd.ORRatePriceLevel.Rate.SetValue(Convert.ToDouble(item.Amount)); } if (item.Amount.IsNotNull()) { invLineAdd.InvoiceLineAdd.Amount.SetValue(Convert.ToDouble(item.Amount)); } } // Execute request in QB IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet); //IMsgSetResponse responseMsgSet = processRequestFromQB(sessionManager, requestMsgSet); //sessionManager.endSession(); //sessionManager.closeConnection(); sessionManager.EndSession(); sessionManager.CloseConnection(); sessionManager = null; string[] status = new string[3]; if (responseMsgSet != null) status = parseInvoiceAddRs(responseMsgSet); string msg = ""; if (responseMsgSet != null & status[0] == "0") { IInvoiceRet retInv = responseMsgSet.ResponseList.GetAt(0).Detail as IInvoiceRet; IQBIntType new_inv_num = retInv.TxnNumber as IQBIntType; invoiceNumber = Convert.ToInt32(new_inv_num.GetValue()) - 1; msg = "Invoice was added successfully!"; foreach (string test in tests) testIds = testIds + test.ToString() + ","; if (testIds != null) testIds = testIds.Substring(0, testIds.Length - 1); foreach (string charge in charges) chargeIds = chargeIds + charge.ToString() + ","; if (chargeIds != null) chargeIds = chargeIds.Substring(0, chargeIds.Length - 1); DbCommand.CommandType = CommandType.StoredProcedure; DbCommand.CommandText = "uspSaveInvoiceNumberForTests"; DbCommand.Parameters.Clear(); DbCommand.Parameters.Add("@Tests", System.Data.SqlDbType.NVarChar, 4000).Value = testIds; if (chargeIds != null) DbCommand.Parameters.Add("@Charges", System.Data.SqlDbType.NVarChar, 4000).Value = chargeIds; else DbCommand.Parameters.Add("@Charges", System.Data.SqlDbType.NVarChar, 4000).Value = ""; DbCommand.Parameters.Add("@QBInvoiceNumber", System.Data.SqlDbType.Int).Value = invoiceNumber; DbConnection.ExecuteQuery(DbCommand); } else { //throw new Exception(status[2]); msg = "Could not add invoice."; if (status[2].IndexOf("Message") > 0) throw new Exception("Customer Message not found in QuickBooks."); else if (status[2].IndexOf("Customer") > 0) throw new Exception("Client not found in QuickBooks."); else if (status[2].IndexOf("Item") > 0) { string sub = status[2].Substring(status[2].IndexOf("\"") + 1); int len = sub.IndexOf("\""); throw new Exception("Item " + status[2].Substring(status[2].IndexOf("\"") + 1, len) + " not found in QuickBooks."); } else throw new Exception(status[2]); } msg = msg + "\n\n"; msg = msg + "Status Code = " + status[0] + "\n"; msg = msg + "Status Severity = " + status[1] + "\n"; msg = msg + "Status Message = " + status[2] + "\n"; } catch { throw; } return invoiceNumber.ToString(); }
internal static ISalesReceiptRet QBAddSalesReceipt(QuickBooksOrderDocumentDto receipt, string memo = "", string templateRefName = "Custom Sales Receipt") { if (receipt.DocumentType != DocumentType.Receipt) throw new ArgumentException("document is not an an Receipt"); bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; ISalesReceiptRet custRet = resp.Detail as ISalesReceiptRet; resStr = resStr + "Following customer has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.TxnID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.TxnID.GetValue()) + "\n"; } Log(QBCRUDEAction.ErrorRecovery, "Invoice", (custRet == null ? "" : custRet.RefNumber.GetValue()), resp); } } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion ISalesReceiptAdd salesReceiptAddRq = requestMsgSet.AppendSalesReceiptAddRq(); salesReceiptAddRq.CustomerRef.FullName.SetValue(receipt.OutletName); //salesReceiptAddRq.TemplateRef.FullName.SetValue(templateRefName);//Custom Sales Receipt salesReceiptAddRq.Memo.SetValue(memo); salesReceiptAddRq.TxnDate.SetValue(Convert.ToDateTime(receipt.DocumentDateIssued)); salesReceiptAddRq.RefNumber.SetValue(receipt.GenericReference.Substring((receipt.GenericReference.Length - 11), 11)); foreach (var receiptLineItem in receipt.LineItems) { IItemInventoryRet product = GetProductByCode(receiptLineItem.ProductCode); if (product == null) continue; ISalesReceiptLineAdd salesReceiptLineAddRq = salesReceiptAddRq.ORSalesReceiptLineAddList.Append().SalesReceiptLineAdd; salesReceiptLineAddRq.Amount.SetValue(Convert.ToDouble(Math.Round(receiptLineItem.GrossValue,2))); //salesReceiptLineAddRq.Quantity.SetValue(1); salesReceiptLineAddRq.ORRatePriceLevel.Rate.SetValue(Convert.ToDouble(receiptLineItem.LineItemValue)); salesReceiptLineAddRq.Quantity.SetValue(Convert.ToDouble(receiptLineItem.Quantity)); salesReceiptLineAddRq.ItemRef.FullName.SetValue(product.FullName.GetValue()); salesReceiptLineAddRq.Desc.SetValue(receiptLineItem.ProductDescription); //salesReceiptLineAddRq. salesReceiptLineAddRq.Other1.SetValue(receiptLineItem.PaymentType); try { salesReceiptLineAddRq.TaxAmount.SetValue(Convert.ToDouble(Math.Round(receiptLineItem.TotalVat, 2))); } catch (Exception e) { Console.WriteLine(e); Log(e.Message); } } responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); ISalesReceiptRet salesReceipRet = response.Detail as ISalesReceiptRet; int statusCode = response.StatusCode; if (statusCode == 0) { Console.WriteLine("Success"); } sessionManager.ClearErrorRecovery(); sessionManager.EndSession(); boolSessionBegun = false; sessionManager.CloseConnection(); Log(QBCRUDEAction.Add, "SalesReceipt", (salesReceipRet == null ? "" : salesReceipRet.RefNumber.GetValue()), response); return salesReceipRet; } catch (Exception ex) { if (boolSessionBegun) { sessionManager.EndSession(); sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); MessageBox.Show(error); } return null; }
internal static ISalesOrderRet QBAddSalesOrder( QuickBooksOrderDocumentDto orderDoc, string externalOrderRef) { if (orderDoc.DocumentType != DocumentType.Order) throw new ArgumentException("document is not an an order"); var stockSiteRef = GetStockSiteBySalesperson(orderDoc.SalesmanCode); if (string.IsNullOrEmpty(stockSiteRef)) { stockSiteRef = "Unspecified Site"; } bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; ISalesOrderRet custRet = resp.Detail as ISalesOrderRet; resStr = resStr + "Following sale/order has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.TxnID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.TxnID.GetValue()) + "\n"; Log(resStr); } } } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion ISalesOrderAdd saleOrderAddRq = requestMsgSet.AppendSalesOrderAddRq(); //Set field value for MatchCriterion //inventorySiteQuery.ORInventorySiteQuery.InventorySiteFilter.ORNameFilter.NameFilter.MatchCriterion.SetValue(ENMatchCriterion.mcContains); ////Set field value for Name //inventorySiteQuery.ORInventorySiteQuery.InventorySiteFilter.ORNameFilter.NameFilter.Name.SetValue(orderDoc.SalesmanName); //var value=inventorySiteQuery.IncludeRetElementList.Count.ToString(); //var counted = inventorySiteQuery.ORInventorySiteQuery.FullNameList.Count.ToString(); // IInventorySiteRetList list=requestMsgSet.appendinventorys saleOrderAddRq.CustomerRef.FullName.SetValue(orderDoc.OutletName); saleOrderAddRq.DueDate.SetValue(Convert.ToDateTime(orderDoc.OrderDateRequired)); saleOrderAddRq.Memo.SetValue(orderDoc.Note); saleOrderAddRq.RefNumber.SetValue(externalOrderRef); //Get the Stock Site to be used to populate the inventory Site Ref saleOrderAddRq.TxnDate.SetValue(Convert.ToDateTime(orderDoc.DocumentDateIssued)); foreach (var lineItem in orderDoc.LineItems) { IItemInventoryRet product = GetProductByCode(lineItem.ProductCode); if (product == null) continue; ISalesOrderLineAdd saleOrderLineAddRq = saleOrderAddRq.ORSalesOrderLineAddList.Append().SalesOrderLineAdd; saleOrderLineAddRq.ItemRef.FullName.SetValue(product.FullName.GetValue()); saleOrderLineAddRq.Quantity.SetValue(Convert.ToDouble(lineItem.Quantity)); saleOrderLineAddRq.Amount.SetValue(Convert.ToDouble(Math.Round(lineItem.TotalNet,2))); //saleOrderLineAddRq if(!string.IsNullOrEmpty(lineItem.VATClass)) { saleOrderLineAddRq.SalesTaxCodeRef.FullName.SetValue(lineItem.VATClass); saleOrderLineAddRq.TaxAmount.SetValue(Convert.ToDouble(Math.Round(lineItem.TotalVat, 2))); } //saleOrderLineAddRq.InventorySiteRef.FullName.SetValue("ELDORET"); saleOrderLineAddRq.InventorySiteRef.FullName.SetValue(stockSiteRef); //This feature is not supported in the specified version of qbXML. //catch (Exception EX_NAME) { // Console.WriteLine(EX_NAME); // Log(EX_NAME.Message); //} saleOrderLineAddRq.Desc.SetValue(lineItem.ProductDescription); saleOrderLineAddRq.ORRatePriceLevel.Rate.SetValue(Convert.ToDouble(lineItem.LineItemValue)); } responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); int statusCode = response.StatusCode; ISalesOrderRet salesOrderRet = response.Detail as ISalesOrderRet; if (statusCode == 0) { Console.WriteLine("Success"); } else { MessageBox.Show(response.StatusMessage); } sessionManager.ClearErrorRecovery(); sessionManager.EndSession(); boolSessionBegun = false; sessionManager.CloseConnection(); Log(QBCRUDEAction.Add, "SalesOrder", (salesOrderRet == null ? "" : salesOrderRet.RefNumber.GetValue()), response); return salesOrderRet; } catch (Exception ex) { if (boolSessionBegun) { //sessionManager.EndSession(); //sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); throw new Exception(ex.Message); } return null; }
internal static IAccountRet QBAddAccount(string accountName, bool isActive, ENAccountType accountType, string accountNumber) { bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; ICustomerRet custRet = resp.Detail as ICustomerRet; resStr = resStr + "Following customer has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.ListID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.ListID.GetValue()) + "\n"; } Log(QBCRUDEAction.ErrorRecovery, "SalesReceipt", (custRet == null ? "" : custRet.FullName.GetValue()), resp); } } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion IAccountRet existingQB = GetAccountByNameFilter(accountName); IAccountRet accountRet = null; if (existingQB == null) { IAccountAdd accountAddRq = requestMsgSet.AppendAccountAddRq(); accountAddRq.Name.SetValue(accountName); accountAddRq.AccountType.SetValue(accountType); accountAddRq.AccountNumber.SetValue(accountNumber); accountAddRq.IsActive.SetValue(isActive); responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); int statusCode = response.StatusCode; accountRet = response.Detail as IAccountRet; if (statusCode == 0) { Console.WriteLine("Success"); } else if (statusCode == 3100) { MessageBox.Show("Account with same name exists"); } Log(QBCRUDEAction.Add, "Account", (accountRet == null ? "" : accountRet.FullName.GetValue()), response); return accountRet; } else { IAccountMod customerModRq = requestMsgSet.AppendAccountModRq(); customerModRq.Name.SetValue(accountName); customerModRq.IsActive.SetValue(isActive); customerModRq.AccountType.SetValue(accountType); customerModRq.AccountNumber.SetValue(accountNumber); customerModRq.ListID.SetValue(existingQB.ListID.GetValue()); customerModRq.EditSequence.SetValue(existingQB.EditSequence.GetValue()); responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); int statusCode = response.StatusCode; accountRet = response.Detail as IAccountRet; if (statusCode == 0) { Console.WriteLine("Success"); } Log(QBCRUDEAction.Update, "Account", (accountRet == null ? "" : accountRet.FullName.GetValue()), response); } sessionManager.ClearErrorRecovery(); sessionManager.EndSession(); boolSessionBegun = false; sessionManager.CloseConnection(); return accountRet; } catch (Exception ex) { if (boolSessionBegun) { sessionManager.EndSession(); sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); MessageBox.Show(error); // throw new Exception(ex.Message); } return null; }
internal static IItemInventoryRet QBAddInventory(string inventoryName, string inventoryDescription, double inventorySalePrice, string cogsAccountRef, string assetAccountRef, string incomeAccountRef) { bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; ICustomerRet custRet = null; if (statCode == 0) { string resStr = null; custRet = resp.Detail as ICustomerRet; resStr = resStr + "Following inventory has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.ListID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.ListID.GetValue()) + "\n"; Log(resStr); } } Log(QBCRUDEAction.ErrorRecovery, "Customer", (custRet == null ? "" : custRet.FullName.GetValue()), resp); } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion IItemInventoryRet existingItemInventory = GetInventoryByNameFilter(inventoryName); if (existingItemInventory == null) { IItemInventoryAdd itemInventoryAddRq = requestMsgSet.AppendItemInventoryAddRq(); itemInventoryAddRq.Name.SetValue(inventoryName); //Product name itemInventoryAddRq.SalesDesc.SetValue(inventoryDescription); itemInventoryAddRq.SalesPrice.SetValue(inventorySalePrice); itemInventoryAddRq.IncomeAccountRef.FullName.SetValue(incomeAccountRef); //Sales //itemInventoryAddRq.PurchaseDesc.SetValue(purchaseDecription); //Product name //itemInventoryAddRq.PurchaseCost.SetValue(purchaseCost); //Product Price itemInventoryAddRq.COGSAccountRef.FullName.SetValue(cogsAccountRef); //"Sales" itemInventoryAddRq.AssetAccountRef.FullName.SetValue(assetAccountRef); //"Sales" responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); IItemInventoryRet itemInventoryRet = (IItemInventoryRet)response.Detail; int statusCode = response.StatusCode; if (statusCode == 0) { Console.Write("success adding inventory"); } else if (statusCode == 3100) { Console.Write("inventory exists, use update"); } Log(QBCRUDEAction.Add, "Inventory", (itemInventoryRet == null ? "" : itemInventoryRet.FullName.GetValue()), response); return itemInventoryRet; } else { IItemInventoryMod itemInventoryModRq = requestMsgSet.AppendItemInventoryModRq(); itemInventoryModRq.Name.SetValue(inventoryName); itemInventoryModRq.SalesDesc.SetValue(inventoryDescription); itemInventoryModRq.SalesPrice.SetValue(inventorySalePrice); itemInventoryModRq.ListID.SetValue(existingItemInventory.ListID.GetValue()); itemInventoryModRq.EditSequence.SetValue(existingItemInventory.EditSequence.GetValue()); responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse response = responseMsgSet.ResponseList.GetAt(0); IItemInventoryRet itemInventoryRet = (IItemInventoryRet)response.Detail; int statusCode = response.StatusCode; if (statusCode == 0) { Console.WriteLine("success adding inventory"); } else if (statusCode == 3100) { Console.WriteLine("inventory exists, use update"); } Log(QBCRUDEAction.Update, "Inventory", (itemInventoryRet == null ? "" : itemInventoryRet.FullName.GetValue()), response); sessionManager.ClearErrorRecovery(); sessionManager.EndSession(); boolSessionBegun = false; sessionManager.CloseConnection(); return itemInventoryRet; } } catch (Exception ex) { if (boolSessionBegun) { sessionManager.EndSession(); sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); MessageBox.Show(error); } return null; }
private static string GetIssuingWarehouse(string fromSite) { var stockSiteRef = string.Empty; bool boolSessionBegun = false; QBSessionManager sessionManager = new QBSessionManager(); try { IMsgSetRequest requestMsgSet; IMsgSetResponse responseMsgSet; sessionManager.OpenConnection("", _appName); sessionManager.BeginSession(qdbpath, ENOpenMode.omDontCare); boolSessionBegun = true; requestMsgSet = GetLatestMsgSetRequest(sessionManager); requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue; string errecid = "{" + Guid.NewGuid().ToString() + "}"; sessionManager.ErrorRecoveryID.SetValue(errecid); sessionManager.EnableErrorRecovery = true; sessionManager.SaveAllMsgSetRequestInfo = true; #region error recovery if (sessionManager.IsErrorRecoveryInfo()) { IMsgSetRequest reqMsgSet = null; IMsgSetResponse resMsgSet = null; resMsgSet = sessionManager.GetErrorRecoveryStatus(); if (resMsgSet.Attributes.MessageSetStatusCode.Equals("600")) { MessageBox.Show( "The oldMessageSetID does not match any stored IDs, and no newMessageSetID is provided."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9001")) { MessageBox.Show( "Invalid checksum. The newMessageSetID specified, matches the currently stored ID, but checksum fails."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9002")) { MessageBox.Show("No stored response was found."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9004")) { MessageBox.Show("Invalid MessageSetID, greater than 24 character was given."); } else if (resMsgSet.Attributes.MessageSetStatusCode.Equals("9005")) { MessageBox.Show("Unable to store response."); } else { IResponse res = resMsgSet.ResponseList.GetAt(0); int sCode = res.StatusCode; if (sCode == 0) { MessageBox.Show("Last request was processed and customer was added successfully!"); } else if (sCode > 0) { MessageBox.Show("There was a warning but last request was processed successfully!"); } else { MessageBox.Show("It seems that there was an error in processing last request"); reqMsgSet = sessionManager.GetSavedMsgSetRequest(); resMsgSet = sessionManager.DoRequests(reqMsgSet); IResponse resp = resMsgSet.ResponseList.GetAt(0); int statCode = resp.StatusCode; if (statCode == 0) { string resStr = null; ISalesOrderRet custRet = resp.Detail as ISalesOrderRet; resStr = resStr + "Following sale/order has been successfully submitted to QuickBooks:\n\n\n"; if (custRet.TxnID != null) { resStr = resStr + "ListID Number = " + Convert.ToString(custRet.TxnID.GetValue()) + "\n"; Log(resStr); } } } } sessionManager.ClearErrorRecovery(); //MessageBox.Show("Proceeding with current transaction."); } #endregion IInventorySiteQuery inventorySiteQuery = requestMsgSet.AppendInventorySiteQueryRq(); responseMsgSet = sessionManager.DoRequests(requestMsgSet); IResponse responseList = responseMsgSet.ResponseList.GetAt(0); IInventorySiteRetList inventorySiteRet = (IInventorySiteRetList)responseList.Detail; var count = inventorySiteRet.Count; for (int i = 0; i < inventorySiteRet.Count; i++) { var iterationpoint = i; var siteRefName = inventorySiteRet.GetAt(i).Name != null ? inventorySiteRet.GetAt(i).Name.GetValue() : null; if (siteRefName != null && siteRefName == fromSite) { stockSiteRef = inventorySiteRet.GetAt(i).SiteAddress.Addr1.GetValue(); break; } } } catch (Exception ex) { if (boolSessionBegun) { sessionManager.EndSession(); sessionManager.CloseConnection(); } string error = (ex.Message.ToString() + "\nStack Trace: \n" + ex.StackTrace + "\nExiting the application"); Log(error); throw new Exception(ex.Message); } return stockSiteRef; }