예제 #1
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
        }
예제 #2
0
        private static XmlElement CreateIDTypeNode(XmlDocument xml, string name, QBEntity entity)
        {
            XmlElement el = xml.CreateElement(name);

            el.InnerText = entity.QBEntityId;
            return(el);
        }
예제 #3
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
                }
            }
        }
예제 #4
0
        /// <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);
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        /// <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);
        }
예제 #11
0
        /// <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();
        }
예제 #12
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
        }
예제 #13
0
        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;
        }
예제 #14
0
        /// <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);
        }
예제 #15
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
        }
예제 #16
0
        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);
        }
예제 #17
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
        }
예제 #18
0
파일: QBManager.cs 프로젝트: terry2012/DSV
        /// <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);
            }
        }
예제 #19
0
        /// <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();
        }
예제 #20
0
        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);
        }
예제 #21
0
 private static XmlElement CreateIDTypeNode(XmlDocument xml, string name, QBEntity entity)
 {
     XmlElement el = xml.CreateElement(name);
     el.InnerText = entity.QBEntityId;
     return el;
 }
예제 #22
0
        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;
        }
예제 #23
0
        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;
        }
예제 #24
0
        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;
        }
예제 #25
0
        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;
        }
예제 #26
0
        /// <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();
        }
예제 #27
0
        /// <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);
            }
        }
예제 #28
0
        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);
            }
        }
예제 #30
0
        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);
        }