/// <summary> /// Updates QBEntity /// </summary> /// <param name="entityId">Entity ID</param> /// <param name="qbEntityId">QuickBooks entity ID</param> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> /// <param name="synState">Synchronization state</param> /// <param name="seqNum">Edit sequence number</param> /// <returns>QBEntity</returns> public static QBEntity UpdateQBEntity(int entityId, string qbEntityId, EntityTypeEnum entityType, int nopEntityId, SynStateEnum synState, string seqNum) { QBEntity entity = GetQBEntityById(entityId); if (entity == null) { return(null); } NopObjectContext context = ObjectContextHelper.CurrentObjectContext; if (!context.IsAttached(entity)) { context.QBEntities.Attach(entity); } entity.QBEntityId = CommonHelper.EnsureMaximumLength(qbEntityId, 50); entity.EntityType = entityType; entity.NopEntityId = nopEntityId; entity.SynState = synState; entity.SeqNum = CommonHelper.EnsureMaximumLength(seqNum, 20); entity.CreatedOn = entity.CreatedOn; entity.UpdatedOn = DateTime.UtcNow; context.SaveChanges(); return(entity); }
private static XmlElement CreateIDTypeNode(XmlDocument xml, string name, QBEntity entity) { XmlElement el = xml.CreateElement(name); el.InnerText = entity.QBEntityId; return(el); }
/// <summary> /// Reques order synchronization /// </summary> /// <param name="order">Order</param> public static void RequestSynchronization(Order order) { RequestSynchronization(EntityTypeEnum.Customer, order.CustomerId); RequestSynchronization(EntityTypeEnum.Invoice, order.OrderId); switch (order.PaymentStatus) { case PaymentStatusEnum.Paid: QBEntity qbInvPayment = GetQBEntityByNopId(EntityTypeEnum.ReceivePayment, order.OrderId); if (qbInvPayment == null && order.OrderTotal > Decimal.Zero) { RequestSynchronization(EntityTypeEnum.ReceivePayment, order.OrderId); } break; case PaymentStatusEnum.Voided: QBEntity qbInvVoid = GetQBEntityByNopId(EntityTypeEnum.TxnVoid, order.OrderId); if (qbInvVoid == null) { RequestSynchronization(EntityTypeEnum.TxnVoid, order.OrderId); } break; } if (order.Deleted) { QBEntity qbInvDel = GetQBEntityByNopId(EntityTypeEnum.TxnDel, order.OrderId); if (qbInvDel == null) { RequestSynchronization(EntityTypeEnum.TxnDel, order.OrderId); } } }
/// <summary> /// Request entity synchronization /// </summary> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> public void RequestSynchronization(EntityTypeEnum entityType, int nopEntityId) { if (!QBIsEnabled) { throw new NopException("QuickBooks is not enabled."); } QBEntity qbEntity = GetQBEntityByNopId(entityType, nopEntityId); if (qbEntity == null) { qbEntity = new QBEntity() { QBEntityId = String.Empty, EntityTypeId = (int)entityType, NopEntityId = nopEntityId, SynStateId = (int)SynStateEnum.Requested, SeqNum = String.Empty, CreatedOn = DateTime.UtcNow, UpdatedOn = DateTime.UtcNow }; CreateQBEntity(qbEntity); } else if (qbEntity.SynState != SynStateEnum.Requested) { qbEntity.SynStateId = (int)SynStateEnum.Requested; qbEntity.UpdatedOn = DateTime.UtcNow; UpdateQBEntity(qbEntity); } }
public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName, string qbXMLCountry, int qbXMLMajorVers, int qbXMLMinorVers) { try { if (!IoC.Resolve <IQBService>().QBIsEnabled || !Ticket.Equals(ticket) || !IsTicketActive) { return(String.Empty); } QBEntity entity = IoC.Resolve <IQBService>().GetQBEntityForSynchronization(); if (entity == null) { return(String.Empty); } XmlDocument req = null; switch (entity.EntityType) { case EntityTypeEnum.Customer: req = String.IsNullOrEmpty(entity.QBEntityId) ? QBXMLHelper.CreateCustomerAddRq(entity) : QBXMLHelper.CreateCustomerModRq(entity); break; case EntityTypeEnum.Invoice: req = String.IsNullOrEmpty(entity.QBEntityId) ? QBXMLHelper.CreateInvoiceAddRq(entity) : QBXMLHelper.CreateInvoiceModRq(entity); break; case EntityTypeEnum.ReceivePayment: req = QBXMLHelper.CreateReceivePaymentAddRq(entity); break; case EntityTypeEnum.TxnVoid: req = QBXMLHelper.CreateTxnVoidRq(entity); break; case EntityTypeEnum.TxnDel: req = QBXMLHelper.CreateTxnDelRq(entity); break; default: return(String.Empty); } if (req == null) { return(String.Empty); } QBXMLHelper.SetRequestId(req, entity.EntityId); return(req.OuterXml); } catch (Exception ex) { IoC.Resolve <ILogService>().InsertLog(LogTypeEnum.CommonError, ex.Message, ex); return(String.Empty); } }
public static XmlDocument CreateCustomerAddRq(QBEntity entity) { Customer customer = entity.NopEnity as Customer; if (customer == null) { return(null); } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elCustomerAddRq = xml.CreateElement("CustomerAddRq"); elRoot.AppendChild(elCustomerAddRq); XmlElement elCustomerAdd = xml.CreateElement("CustomerAdd"); elCustomerAddRq.AppendChild(elCustomerAdd); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Name", customer.Email)); elCustomerAdd.AppendChild(CreateBoolTypeNode(xml, "IsActive", customer.Active)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "CompanyName", customer.Company)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "FirstName", customer.FirstName)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "LastName", customer.LastName)); Address billAddr = customer.BillingAddress; if (billAddr != null) { string stateprovince = string.Empty; if (billAddr.StateProvince != null) { stateprovince = billAddr.StateProvince.Name; } elCustomerAdd.AppendChild(CreateAddressNode(xml, "BillAddress", billAddr.Address1, billAddr.Address2, billAddr.City, stateprovince, billAddr.ZipPostalCode, billAddr.Country.Name)); } Address shipAddr = customer.ShippingAddress; if (shipAddr != null) { string stateprovince = string.Empty; if (shipAddr.StateProvince != null) { stateprovince = shipAddr.StateProvince.Name; } elCustomerAdd.AppendChild(CreateAddressNode(xml, "ShipAddress", shipAddr.Address1, shipAddr.Address2, shipAddr.City, stateprovince, shipAddr.ZipPostalCode, shipAddr.Country.Name)); } elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Phone", customer.PhoneNumber)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Email", customer.Email)); return(xml); }
/// <summary> /// Gets QBEntity by nopCommerce entity ID /// </summary> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> /// <returns>QBEntity</returns> public QBEntity GetQBEntityByNopId(EntityTypeEnum entityType, int nopEntityId) { var query = from qbe in _context.QBEntities where qbe.EntityTypeId == (int)entityType && qbe.NopEntityId == nopEntityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
/// <summary> /// Gets QBEntity by nopCommerce entity ID /// </summary> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> /// <returns>QBEntity</returns> public static QBEntity GetQBEntityByNopId(EntityTypeEnum entityType, int nopEntityId) { NopObjectContext context = ObjectContextHelper.CurrentObjectContext; var query = from qbe in context.QBEntities where qbe.EntityTypeId == (int)entityType && qbe.NopEntityId == nopEntityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
public static XmlDocument CreateReceivePaymentAddRq(QBEntity entity) { Order order = entity.NopEnity as Order; if (order == null) { return(null); } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elReceivePaymentAddRq = xml.CreateElement("ReceivePaymentAddRq"); elRoot.AppendChild(elReceivePaymentAddRq); XmlElement elReceivePaymentAdd = xml.CreateElement("ReceivePaymentAdd"); elReceivePaymentAddRq.AppendChild(elReceivePaymentAdd); elReceivePaymentAdd.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elReceivePaymentAdd.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elReceivePaymentAdd.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elReceivePaymentAdd.AppendChild(CreateAmtTypeNode(xml, "TotalAmount", order.OrderTotal)); XmlElement elAppliedToTxnAdd = xml.CreateElement("AppliedToTxnAdd"); elReceivePaymentAdd.AppendChild(elAppliedToTxnAdd); elAppliedToTxnAdd.AppendChild(CreateIDTypeNode(xml, "TxnID", IoC.Resolve <IQBService>().GetQBEntityByNopId(EntityTypeEnum.Invoice, order.OrderId))); elAppliedToTxnAdd.AppendChild(CreateAmtTypeNode(xml, "PaymentAmount", order.OrderTotal)); decimal discTotal = order.OrderDiscount; if (order.RedeemedRewardPoints != null) { discTotal += order.RedeemedRewardPoints.UsedAmount; } foreach (var gc in IoC.Resolve <IOrderService>().GetAllGiftCardUsageHistoryEntries(null, null, order.OrderId)) { discTotal += gc.UsedValue; } if (discTotal != Decimal.Zero) { elAppliedToTxnAdd.AppendChild(CreateAmtTypeNode(xml, "DiscountAmount", discTotal)); elAppliedToTxnAdd.AppendChild(CreateRefNode(xml, "DiscountAccountRef", IoC.Resolve <IQBService>().QBDiscountAccountRef)); } return(xml); }
/// <summary> /// Gets QBEntity by entity ID /// </summary> /// <param name="entityId">Entity ID</param> /// <returns>QBEntity</returns> public QBEntity GetQBEntityById(int entityId) { if (entityId == 0) { return(null); } var query = from qbe in _context.QBEntities where qbe.EntityId == entityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
/// <summary> /// Creates a new QBEntity /// </summary> /// <param name="entity">QBEntity</param> public void CreateQBEntity(QBEntity entity) { if (entity == null) { throw new ArgumentNullException("entity"); } entity.QBEntityId = CommonHelper.EnsureNotNull(entity.QBEntityId); entity.QBEntityId = CommonHelper.EnsureMaximumLength(entity.QBEntityId, 50); entity.SeqNum = CommonHelper.EnsureNotNull(entity.SeqNum); entity.SeqNum = CommonHelper.EnsureMaximumLength(entity.SeqNum, 20); _context.QBEntities.AddObject(entity); _context.SaveChanges(); }
/// <summary> /// Gets QBEntity by entity ID /// </summary> /// <param name="entityId">Entity ID</param> /// <returns>QBEntity</returns> public static QBEntity GetQBEntityById(int entityId) { if (entityId == 0) { return(null); } NopObjectContext context = ObjectContextHelper.CurrentObjectContext; var query = from qbe in context.QBEntities where qbe.EntityId == entityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
public static XmlDocument CreateCustomerAddRq(QBEntity entity) { Customer customer = entity.NopEnity as Customer; if(customer == null) { return null; } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elCustomerAddRq = xml.CreateElement("CustomerAddRq"); elRoot.AppendChild(elCustomerAddRq); XmlElement elCustomerAdd = xml.CreateElement("CustomerAdd"); elCustomerAddRq.AppendChild(elCustomerAdd); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Name", customer.Email)); elCustomerAdd.AppendChild(CreateBoolTypeNode(xml, "IsActive", customer.Active)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "CompanyName", customer.Company)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "FirstName", customer.FirstName)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "LastName", customer.LastName)); Address billAddr = customer.BillingAddress; if (billAddr != null) { string stateprovince = string.Empty; if (billAddr.StateProvince != null) stateprovince = billAddr.StateProvince.Name; elCustomerAdd.AppendChild(CreateAddressNode(xml, "BillAddress", billAddr.Address1, billAddr.Address2, billAddr.City, stateprovince, billAddr.ZipPostalCode, billAddr.Country.Name)); } Address shipAddr = customer.ShippingAddress; if (shipAddr != null) { string stateprovince = string.Empty; if (shipAddr.StateProvince != null) stateprovince = shipAddr.StateProvince.Name; elCustomerAdd.AppendChild(CreateAddressNode(xml, "ShipAddress", shipAddr.Address1, shipAddr.Address2, shipAddr.City, stateprovince, shipAddr.ZipPostalCode, shipAddr.Country.Name)); } elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Phone", customer.PhoneNumber)); elCustomerAdd.AppendChild(CreateStrTypeNode(xml, "Email", customer.Email)); return xml; }
/// <summary> /// Gets QBEntity by QuickBooks entity ID /// </summary> /// <param name="qbEntityId">QuickBooks entity ID</param> /// <returns>QBEntity</returns> public QBEntity GetQBEntityByQBEntityId(string qbEntityId) { if (String.IsNullOrEmpty(qbEntityId)) { return(null); } var query = from qbe in _context.QBEntities where qbe.QBEntityId == qbEntityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
/// <summary> /// Gets QBEntity by QuickBooks entity ID /// </summary> /// <param name="qbEntityId">QuickBooks entity ID</param> /// <returns>QBEntity</returns> public static QBEntity GetQBEntityByQBEntityId(string qbEntityId) { if (String.IsNullOrEmpty(qbEntityId)) { return(null); } NopObjectContext context = ObjectContextHelper.CurrentObjectContext; var query = from qbe in context.QBEntities where qbe.QBEntityId == qbEntityId select qbe; QBEntity entity = query.SingleOrDefault(); return(entity); }
public static XmlDocument CreateInvoiceModRq(QBEntity entity) { Order order = entity.NopEnity as Order; if (order == null) { return(null); } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elInvoiceModRq = xml.CreateElement("InvoiceModRq"); elRoot.AppendChild(elInvoiceModRq); XmlElement elInvoiceMod = xml.CreateElement("InvoiceMod"); elInvoiceModRq.AppendChild(elInvoiceMod); elInvoiceMod.AppendChild(CreateIDTypeNode(xml, "TxnID", entity)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "EditSequence", entity.SeqNum)); elInvoiceMod.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elInvoiceMod.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elInvoiceMod.AppendChild(CreateAddressNode(xml, "BillAddress", order.BillingAddress1, order.BillingAddress2, order.BillingCity, order.BillingStateProvince, order.BillingZipPostalCode, order.BillingCountry)); if (order.ShippingStatus != ShippingStatusEnum.ShippingNotRequired) { elInvoiceMod.AppendChild(CreateAddressNode(xml, "ShipAddress", order.ShippingAddress1, order.ShippingAddress2, order.ShippingCity, order.ShippingStateProvince, order.ShippingZipPostalCode, order.ShippingCountry)); } elInvoiceMod.AppendChild(CreateBoolTypeNode(xml, "IsPending", order.OrderStatus == OrderStatusEnum.Pending)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "PONumber", order.PurchaseOrderNumber)); if (order.ShippedDate.HasValue) { elInvoiceMod.AppendChild(CreateDateTypeNode(xml, "ShipDate", order.ShippedDate.Value)); } elInvoiceMod.AppendChild(CreateBoolTypeNode(xml, "IsTaxIncluded", true)); foreach (OrderProductVariant opv in order.OrderProductVariants) { elInvoiceMod.AppendChild(CreateInvoiceLineModNode(xml, opv)); } return(xml); }
/// <summary> /// Creates a new QBEntity /// </summary> /// <param name="qbEntityId">QBEntity ID</param> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> /// <param name="synState">Synchronization state</param> /// <param name="seqNum">Edit sequence number</param> /// <returns>QBEntity</returns> public static QBEntity CreateQBEntity(string qbEntityId, EntityTypeEnum entityType, int nopEntityId, SynStateEnum synState, string seqNum) { NopObjectContext context = ObjectContextHelper.CurrentObjectContext; QBEntity entity = context.QBEntities.CreateObject(); entity.QBEntityId = CommonHelper.EnsureMaximumLength(qbEntityId, 50); entity.EntityType = entityType; entity.NopEntityId = nopEntityId; entity.SynState = synState; entity.SeqNum = CommonHelper.EnsureMaximumLength(seqNum, 20); entity.CreatedOn = DateTime.UtcNow; entity.UpdatedOn = DateTime.UtcNow; context.QBEntities.AddObject(entity); context.SaveChanges(); return(entity); }
/// <summary> /// Request entity synchronization /// </summary> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> public static void RequestSynchronization(EntityTypeEnum entityType, int nopEntityId) { if (!QBIsEnabled) { throw new NopException("QuickBooks is not enabled."); } QBEntity qbEntity = GetQBEntityByNopId(entityType, nopEntityId); if (qbEntity == null) { qbEntity = CreateQBEntity(String.Empty, entityType, nopEntityId, SynStateEnum.Requested, String.Empty); } else if (qbEntity.SynState != SynStateEnum.Requested) { qbEntity = UpdateQBEntity(qbEntity.EntityId, qbEntity.QBEntityId, qbEntity.EntityType, qbEntity.NopEntityId, SynStateEnum.Requested, qbEntity.SeqNum); } }
/// <summary> /// Updates QBEntity /// </summary> /// <param name="entity">QBEntity</param> public void UpdateQBEntity(QBEntity entity) { if (entity == null) { throw new ArgumentNullException("entity"); } entity.QBEntityId = CommonHelper.EnsureNotNull(entity.QBEntityId); entity.QBEntityId = CommonHelper.EnsureMaximumLength(entity.QBEntityId, 50); entity.SeqNum = CommonHelper.EnsureNotNull(entity.SeqNum); entity.SeqNum = CommonHelper.EnsureMaximumLength(entity.SeqNum, 20); if (!_context.IsAttached(entity)) { _context.QBEntities.Attach(entity); } _context.SaveChanges(); }
public static XmlDocument CreateTxnDelRq(QBEntity entity) { Order order = entity.NopEnity as Order; if (order == null) { return(null); } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elTxnVoidRq = xml.CreateElement("TxnDelRq"); elRoot.AppendChild(elTxnVoidRq); elTxnVoidRq.AppendChild(CreateStrTypeNode(xml, "TxnDelType", "Invoice")); elTxnVoidRq.AppendChild(CreateIDTypeNode(xml, "TxnID", IoC.Resolve <IQBService>().GetQBEntityByNopId(EntityTypeEnum.Invoice, order.OrderId))); return(xml); }
private static XmlElement CreateIDTypeNode(XmlDocument xml, string name, QBEntity entity) { XmlElement el = xml.CreateElement(name); el.InnerText = entity.QBEntityId; return el; }
public static XmlDocument CreateTxnVoidRq(QBEntity entity) { Order order = entity.NopEnity as Order; if (order == null) { return null; } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elTxnVoidRq = xml.CreateElement("TxnVoidRq"); elRoot.AppendChild(elTxnVoidRq); elTxnVoidRq.AppendChild(CreateStrTypeNode(xml, "TxnVoidType", "Invoice")); elTxnVoidRq.AppendChild(CreateIDTypeNode(xml, "TxnID", QBManager.GetQBEntityByNopId(EntityTypeEnum.Invoice, order.OrderId))); return xml; }
public static XmlDocument CreateReceivePaymentAddRq(QBEntity entity) { Order order = entity.NopEnity as Order; if(order == null) { return null; } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elReceivePaymentAddRq = xml.CreateElement("ReceivePaymentAddRq"); elRoot.AppendChild(elReceivePaymentAddRq); XmlElement elReceivePaymentAdd = xml.CreateElement("ReceivePaymentAdd"); elReceivePaymentAddRq.AppendChild(elReceivePaymentAdd); elReceivePaymentAdd.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elReceivePaymentAdd.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elReceivePaymentAdd.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elReceivePaymentAdd.AppendChild(CreateAmtTypeNode(xml, "TotalAmount", order.OrderTotal)); XmlElement elAppliedToTxnAdd = xml.CreateElement("AppliedToTxnAdd"); elReceivePaymentAdd.AppendChild(elAppliedToTxnAdd); elAppliedToTxnAdd.AppendChild(CreateIDTypeNode(xml, "TxnID", QBManager.GetQBEntityByNopId(EntityTypeEnum.Invoice, order.OrderId))); elAppliedToTxnAdd.AppendChild(CreateAmtTypeNode(xml, "PaymentAmount", order.OrderTotal)); decimal discTotal = order.OrderDiscount; if (order.RedeemedRewardPoints != null) { discTotal += order.RedeemedRewardPoints.UsedAmount; } foreach (var gc in OrderManager.GetAllGiftCardUsageHistoryEntries(null, null, order.OrderId)) { discTotal += gc.UsedValue; } if (discTotal != Decimal.Zero) { elAppliedToTxnAdd.AppendChild(CreateAmtTypeNode(xml, "DiscountAmount", discTotal)); elAppliedToTxnAdd.AppendChild(CreateRefNode(xml, "DiscountAccountRef", QBManager.QBDiscountAccountRef)); } return xml; }
public static XmlDocument CreateInvoiceModRq(QBEntity entity) { Order order = entity.NopEnity as Order; if(order == null) { return null; } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elInvoiceModRq = xml.CreateElement("InvoiceModRq"); elRoot.AppendChild(elInvoiceModRq); XmlElement elInvoiceMod = xml.CreateElement("InvoiceMod"); elInvoiceModRq.AppendChild(elInvoiceMod); elInvoiceMod.AppendChild(CreateIDTypeNode(xml, "TxnID", entity)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "EditSequence", entity.SeqNum)); elInvoiceMod.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elInvoiceMod.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elInvoiceMod.AppendChild(CreateAddressNode(xml, "BillAddress", order.BillingAddress1, order.BillingAddress2, order.BillingCity, order.BillingStateProvince, order.BillingZipPostalCode, order.BillingCountry)); if(order.ShippingStatus != ShippingStatusEnum.ShippingNotRequired) { elInvoiceMod.AppendChild(CreateAddressNode(xml, "ShipAddress", order.ShippingAddress1, order.ShippingAddress2, order.ShippingCity, order.ShippingStateProvince, order.ShippingZipPostalCode, order.ShippingCountry)); } elInvoiceMod.AppendChild(CreateBoolTypeNode(xml, "IsPending", order.OrderStatus == OrderStatusEnum.Pending)); elInvoiceMod.AppendChild(CreateStrTypeNode(xml, "PONumber", order.PurchaseOrderNumber)); if(order.ShippedDate.HasValue) { elInvoiceMod.AppendChild(CreateDateTypeNode(xml, "ShipDate", order.ShippedDate.Value)); } elInvoiceMod.AppendChild(CreateBoolTypeNode(xml, "IsTaxIncluded", true)); foreach(OrderProductVariant opv in order.OrderProductVariants) { elInvoiceMod.AppendChild(CreateInvoiceLineModNode(xml, opv)); } return xml; }
public static XmlDocument CreateInvoiceAddRq(QBEntity entity) { Order order = entity.NopEnity as Order; if(order == null) { return null; } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elInvoiceAddRq = xml.CreateElement("InvoiceAddRq"); elRoot.AppendChild(elInvoiceAddRq); XmlElement elInvoiceAdd = xml.CreateElement("InvoiceAdd"); elInvoiceAddRq.AppendChild(elInvoiceAdd); elInvoiceAdd.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elInvoiceAdd.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elInvoiceAdd.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elInvoiceAdd.AppendChild(CreateAddressNode(xml, "BillAddress", order.BillingAddress1, order.BillingAddress2, order.BillingCity, order.BillingStateProvince, order.BillingZipPostalCode, order.BillingCountry)); if(order.ShippingStatus != ShippingStatusEnum.ShippingNotRequired) { elInvoiceAdd.AppendChild(CreateAddressNode(xml, "ShipAddress", order.ShippingAddress1, order.ShippingAddress2, order.ShippingCity, order.ShippingStateProvince, order.ShippingZipPostalCode, order.ShippingCountry)); } elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsPending", order.OrderStatus == OrderStatusEnum.Pending)); elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsFinanceCharge", order.PaymentStatus == PaymentStatusEnum.Paid)); elInvoiceAdd.AppendChild(CreateStrTypeNode(xml, "PONumber", order.PurchaseOrderNumber)); if(order.ShippedDate.HasValue) { elInvoiceAdd.AppendChild(CreateDateTypeNode(xml, "ShipDate", order.ShippedDate.Value)); } elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsTaxIncluded", true)); foreach(OrderProductVariant opv in order.OrderProductVariants) { elInvoiceAdd.AppendChild(CreateInvoiceLineAddNode(xml, opv)); } decimal discTotal = order.OrderDiscount; if (order.RedeemedRewardPoints != null) { discTotal += order.RedeemedRewardPoints.UsedAmount; } foreach(var gc in OrderManager.GetAllGiftCardUsageHistoryEntries(null, null, order.OrderId)) { discTotal += gc.UsedValue; } if (discTotal != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateDiscountLineAddNode(xml, discTotal)); } if (order.PaymentMethodAdditionalFeeInclTax != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateSalesTaxLineAddNode(xml, order.PaymentMethodAdditionalFeeInclTax)); } if(order.OrderShippingInclTax != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateShippingLineAddNode(xml, order.OrderShippingInclTax)); } return xml; }
/// <summary> /// Updates QBEntity /// </summary> /// <param name="entity">QBEntity</param> public void UpdateQBEntity(QBEntity entity) { if (entity == null) throw new ArgumentNullException("entity"); entity.QBEntityId = CommonHelper.EnsureNotNull(entity.QBEntityId); entity.QBEntityId = CommonHelper.EnsureMaximumLength(entity.QBEntityId, 50); entity.SeqNum = CommonHelper.EnsureNotNull(entity.SeqNum); entity.SeqNum = CommonHelper.EnsureMaximumLength(entity.SeqNum, 20); if (!_context.IsAttached(entity)) _context.QBEntities.Attach(entity); _context.SaveChanges(); }
/// <summary> /// Request entity synchronization /// </summary> /// <param name="entityType">Entity type</param> /// <param name="nopEntityId">nopCommerce entity ID</param> public void RequestSynchronization(EntityTypeEnum entityType, int nopEntityId) { if(!QBIsEnabled) { throw new NopException("QuickBooks is not enabled."); } QBEntity qbEntity = GetQBEntityByNopId(entityType, nopEntityId); if (qbEntity == null) { qbEntity = new QBEntity() { QBEntityId = String.Empty, EntityTypeId = (int)entityType, NopEntityId = nopEntityId, SynStateId = (int)SynStateEnum.Requested, SeqNum = String.Empty, CreatedOn = DateTime.UtcNow, UpdatedOn = DateTime.UtcNow }; CreateQBEntity(qbEntity); } else if (qbEntity.SynState != SynStateEnum.Requested) { qbEntity.SynStateId = (int)SynStateEnum.Requested; qbEntity.UpdatedOn = DateTime.UtcNow; UpdateQBEntity(qbEntity); } }
public int receiveResponseXML(string ticket, string response, string hresult, string message) { try { if (!QBManager.QBIsEnabled || !Ticket.Equals(ticket) || !IsTicketActive) { return(-1); } if (!String.IsNullOrEmpty(hresult)) { LogManager.InsertLog(LogTypeEnum.CommonError, message, hresult); return(-1); } XmlDocument xml = new XmlDocument(); xml.LoadXml(response); int requestId = QBXMLHelper.GetRequestId(xml); QBEntity entity = QBManager.GetQBEntityById(requestId); if (entity == null) { return(-1); } int statusCode = QBXMLHelper.GetStatusCode(xml); switch (statusCode) { case 0: case 530: case 531: case 550: case 560: case 570: string qbId = entity.QBEntityId; string seqNum = entity.SeqNum; switch (QBXMLHelper.GetResponseType(xml)) { case "TxnVoidRs": case "TxnDelRs": qbId = QBXMLHelper.GetTxnID(xml); break; case "ReceivePaymentAddRs": case "InvoiceAddRs": qbId = QBXMLHelper.GetTxnID(xml); seqNum = QBXMLHelper.GetSeqNum(xml); break; case "CustomerAddRs": qbId = QBXMLHelper.GetListID(xml); seqNum = QBXMLHelper.GetSeqNum(xml); break; case "CustomerModRs": case "InvoiceModRs": seqNum = QBXMLHelper.GetSeqNum(xml); break; } QBManager.UpdateQBEntity(entity.EntityId, qbId, entity.EntityType, entity.NopEntityId, SynStateEnum.Success, seqNum); break; case 3175: LogManager.InsertLog(LogTypeEnum.CommonError, QBXMLHelper.GetStatusMessage(xml), statusCode.ToString()); break; default: LogManager.InsertLog(LogTypeEnum.CommonError, QBXMLHelper.GetStatusMessage(xml), statusCode.ToString()); QBManager.UpdateQBEntity(entity.EntityId, entity.QBEntityId, entity.EntityType, entity.NopEntityId, SynStateEnum.Failed, entity.SeqNum); break; } return(0); } catch (Exception ex) { LogManager.InsertLog(LogTypeEnum.CommonError, ex.Message, ex); return(-1); } }
public int receiveResponseXML(string ticket, string response, string hresult, string message) { try { if (!IoC.Resolve <IQBService>().QBIsEnabled || !Ticket.Equals(ticket) || !IsTicketActive) { return(-1); } if (!String.IsNullOrEmpty(hresult)) { IoC.Resolve <ILogService>().InsertLog(LogTypeEnum.CommonError, message, hresult); return(-1); } XmlDocument xml = new XmlDocument(); xml.LoadXml(response); int requestId = QBXMLHelper.GetRequestId(xml); QBEntity entity = IoC.Resolve <IQBService>().GetQBEntityById(requestId); if (entity == null) { return(-1); } int statusCode = QBXMLHelper.GetStatusCode(xml); switch (statusCode) { case 0: case 530: case 531: case 550: case 560: case 570: { string qbId = entity.QBEntityId; string seqNum = entity.SeqNum; switch (QBXMLHelper.GetResponseType(xml)) { case "TxnVoidRs": case "TxnDelRs": qbId = QBXMLHelper.GetTxnID(xml); break; case "ReceivePaymentAddRs": case "InvoiceAddRs": qbId = QBXMLHelper.GetTxnID(xml); seqNum = QBXMLHelper.GetSeqNum(xml); break; case "CustomerAddRs": qbId = QBXMLHelper.GetListID(xml); seqNum = QBXMLHelper.GetSeqNum(xml); break; case "CustomerModRs": case "InvoiceModRs": seqNum = QBXMLHelper.GetSeqNum(xml); break; } entity.QBEntityId = qbId; entity.SynStateId = (int)SynStateEnum.Success; entity.SeqNum = seqNum; entity.UpdatedOn = DateTime.UtcNow; IoC.Resolve <IQBService>().UpdateQBEntity(entity); } break; case 3175: { IoC.Resolve <ILogService>().InsertLog(LogTypeEnum.CommonError, QBXMLHelper.GetStatusMessage(xml), statusCode.ToString()); } break; default: { IoC.Resolve <ILogService>().InsertLog(LogTypeEnum.CommonError, QBXMLHelper.GetStatusMessage(xml), statusCode.ToString()); entity.SynStateId = (int)SynStateEnum.Failed; entity.UpdatedOn = DateTime.UtcNow; IoC.Resolve <IQBService>().UpdateQBEntity(entity); } break; } return(0); } catch (Exception ex) { IoC.Resolve <ILogService>().InsertLog(LogTypeEnum.CommonError, ex.Message, ex); return(-1); } }
public static XmlDocument CreateInvoiceAddRq(QBEntity entity) { Order order = entity.NopEnity as Order; if (order == null) { return(null); } XmlDocument xml = new XmlDocument(); XmlElement elRoot = InitializeDocument(xml); XmlElement elInvoiceAddRq = xml.CreateElement("InvoiceAddRq"); elRoot.AppendChild(elInvoiceAddRq); XmlElement elInvoiceAdd = xml.CreateElement("InvoiceAdd"); elInvoiceAddRq.AppendChild(elInvoiceAdd); elInvoiceAdd.AppendChild(CreateCustomerRefNode(xml, order.Customer)); elInvoiceAdd.AppendChild(CreateDateTypeNode(xml, "TxnDate", order.CreatedOn)); elInvoiceAdd.AppendChild(CreateStrTypeNode(xml, "RefNumber", order.OrderId.ToString())); elInvoiceAdd.AppendChild(CreateAddressNode(xml, "BillAddress", order.BillingAddress1, order.BillingAddress2, order.BillingCity, order.BillingStateProvince, order.BillingZipPostalCode, order.BillingCountry)); if (order.ShippingStatus != ShippingStatusEnum.ShippingNotRequired) { elInvoiceAdd.AppendChild(CreateAddressNode(xml, "ShipAddress", order.ShippingAddress1, order.ShippingAddress2, order.ShippingCity, order.ShippingStateProvince, order.ShippingZipPostalCode, order.ShippingCountry)); } elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsPending", order.OrderStatus == OrderStatusEnum.Pending)); elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsFinanceCharge", order.PaymentStatus == PaymentStatusEnum.Paid)); elInvoiceAdd.AppendChild(CreateStrTypeNode(xml, "PONumber", order.PurchaseOrderNumber)); if (order.ShippedDate.HasValue) { elInvoiceAdd.AppendChild(CreateDateTypeNode(xml, "ShipDate", order.ShippedDate.Value)); } elInvoiceAdd.AppendChild(CreateBoolTypeNode(xml, "IsTaxIncluded", true)); foreach (OrderProductVariant opv in order.OrderProductVariants) { elInvoiceAdd.AppendChild(CreateInvoiceLineAddNode(xml, opv)); } decimal discTotal = order.OrderDiscount; if (order.RedeemedRewardPoints != null) { discTotal += order.RedeemedRewardPoints.UsedAmount; } foreach (var gc in IoC.Resolve <IOrderService>().GetAllGiftCardUsageHistoryEntries(null, null, order.OrderId)) { discTotal += gc.UsedValue; } if (discTotal != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateDiscountLineAddNode(xml, discTotal)); } if (order.PaymentMethodAdditionalFeeInclTax != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateSalesTaxLineAddNode(xml, order.PaymentMethodAdditionalFeeInclTax)); } if (order.OrderShippingInclTax != Decimal.Zero) { elInvoiceAdd.AppendChild(CreateShippingLineAddNode(xml, order.OrderShippingInclTax)); } return(xml); }