Exemple #1
0
        /// <summary>
        /// delete credit memo
        /// </summary>
        /// <param name="creditMemo"></param>
        /// <returns></returns>
        public OperationResult DeleteCreditMemo(CreditMemo creditMemo)
        {
            var operationResult = new OperationResult();

            var existingCreditMemo = GetCreditMemo(creditMemo.CreditMemoId);

            if (existingCreditMemo != null)
            {
                try
                {
                    _db.CreditMemo.Attach(creditMemo);

                    _db.CreditMemo.Remove(creditMemo);

                    _db.SaveChanges();

                    operationResult.Success = true;
                    operationResult.Message = "delete this creditMemo success!";
                }
                catch (Exception ex)
                {
                    operationResult.Success = false;
                    operationResult.Message = "Unable to update this creditMemo";
                    logger.ErrorFormat("Error while deleting creditMemo: { 0} ", ex.ToString());
                }
            }
            else
            {
                operationResult.Success = false;
                operationResult.Message = "Unable to find selected creditMemo.";
            }

            return(operationResult);
        }
Exemple #2
0
        public void CreditMemoAddAsyncTestsUsingoAuth(ServiceContext qboContextoAuth)
        {
            //Creating the CreditMemo for Add
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);

            CreditMemo added = Helper.AddAsync <CreditMemo>(qboContextoAuth, entity);
        }
Exemple #3
0
        /// <summary>
        /// convert creditMemo view model to domain
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public CreditMemo ConvertToDomain(CreditMemoViewModel model)
        {
            CreditMemo creditMemo = new CreditMemo();

            creditMemo.CreditMemoId   = model.CreditMemoId;
            creditMemo.DebitMemoId    = model.DebitMemoId;
            creditMemo.Number         = model.CreditMemoNumber;
            creditMemo.CreditMemoDate = DateTime.Parse(model.CreditMemoDateStr);
            creditMemo.CustomerId     = model.CustomerId;
            creditMemo.SalespersonId  = model.SalespersonId;
            creditMemo.Amount         = model.CreditAmount;
            creditMemo.Notes          = model.CreditMemoNotes;

            if (model.CreditMemoItems != null && model.CreditMemoItems.Count > 0)
            {
                var creditMemoItems = new List <CreditMemoItem>();

                foreach (var item in model.CreditMemoItems)
                {
                    CreditMemoItem creditMemoItem = new CreditMemoItemConverter().ConvertToDomain(item);

                    creditMemoItems.Add(creditMemoItem);
                }

                creditMemo.CreditMemoItems = creditMemoItems;
            }

            return(creditMemo);
        }
Exemple #4
0
 public void CreditMemoAddTestUsingoAuth(ServiceContext qboContextoAuth)
 {
     //Creating the CreditMemo for Add
     CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
     //Adding the CreditMemo
     CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);
 }
Exemple #5
0
        /// <summary>
        /// save credit memo
        /// </summary>
        /// <param name="newCreditMemo"></param>
        /// <returns></returns>
        public OperationResult SaveCreditMemo(CreditMemo newCreditMemo)
        {
            var operationResult = new OperationResult();

            try
            {
                var existingCreditMemo = _db.CreditMemo.FirstOrDefault(x => x.Number.ToLower() == newCreditMemo.Number.ToLower());

                if (existingCreditMemo == null)
                {
                    logger.Debug("CreditMemo is being created...");

                    var insertedCreditMemo = _db.CreditMemo.Add(newCreditMemo);

                    _db.SaveChanges();

                    operationResult.Success     = true;
                    operationResult.Message     = "Success";
                    operationResult.ReferenceId = insertedCreditMemo.CreditMemoId;
                }
                else
                {
                    operationResult.Success = false;
                    operationResult.Message = "Duplicate Entry";
                }
            }
            catch (Exception ex)
            {
                operationResult.Success = false;
                operationResult.Message = "Error";
                logger.ErrorFormat("Error saving new creditMemo: {0} ", ex.ToString());
            }

            return(operationResult);
        }
Exemple #6
0
        public void CreditMemoVoidAsyncTestsUsingoAuth()
        {
            //Creating the CreditMemo for Adding
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, entity);

            Helper.VoidAsync <CreditMemo>(qboContextoAuth, added);
        }
Exemple #7
0
        public void CreditMemoQueryUsingoAuth()
        {
            QueryService <CreditMemo> entityQuery = new QueryService <CreditMemo>(qboContextoAuth);
            CreditMemo existing = Helper.FindOrAdd <CreditMemo>(qboContextoAuth, new CreditMemo());
            //List<CreditMemo> entities = entityQuery.Where(c => c.Id == existing.Id).ToList();
            List <CreditMemo> entities = entityQuery.ExecuteIdsQuery("SELECT * FROM CreditMemo where Id='" + existing.Id + "'").ToList <CreditMemo>();

            Assert.IsTrue(entities.Count() > 0);
        }
Exemple #8
0
        public void CreditMemoAddAsyncTestsUsingoAuth()
        {
            //Creating the CreditMemo for Add
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);

            CreditMemo added = Helper.AddAsync <CreditMemo>(qboContextoAuth, entity);

            QBOHelper.VerifyCreditMemo(entity, added);
        }
Exemple #9
0
        public void CreditMemoFindByIdAsyncTestsUsingoAuth(ServiceContext qboContextoAuth)
        {
            //Creating the CreditMemo for Adding
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, entity);

            //FindById and verify
            Helper.FindByIdAsync <CreditMemo>(qboContextoAuth, added);
        }
Exemple #10
0
        public void CreditMemoFindbyIdTestUsingoAuth()
        {
            //Creating the CreditMemo for Adding
            CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);
            CreditMemo found = Helper.FindById <CreditMemo>(qboContextoAuth, added);

            QBOHelper.VerifyCreditMemo(found, added);
        }
Exemple #11
0
        public void CreditMemoAddTestUsingoAuth()
        {
            //Creating the CreditMemo for Add
            CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);

            //Verify the added CreditMemo
            QBOHelper.VerifyCreditMemo(creditMemo, added);
        }
Exemple #12
0
 public void CreditMemoSparseUpdateTestUsingoAuth(ServiceContext qboContextoAuth)
 {
     //Creating the CreditMemo for Adding
     CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
     //Adding the CreditMemo
     CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);
     //Change the data of added entity
     CreditMemo changed = QBOHelper.UpdateCreditMemoSparse(qboContextoAuth, added.Id, added.SyncToken);
     //Update the returned entity data
     CreditMemo updated = Helper.Update <CreditMemo>(qboContextoAuth, changed);
 }
Exemple #13
0
        public void CreditMemoSparseUpdatedAsyncTestsUsingoAuth(ServiceContext qboContextoAuth)
        {
            //Creating the CreditMemo for Adding
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, entity);

            //Update the CreditMemo
            CreditMemo updated = QBOHelper.UpdateCreditMemoSparse(qboContextoAuth, added.Id, added.SyncToken);
            //Call the service
            CreditMemo updatedReturned = Helper.UpdateAsync <CreditMemo>(qboContextoAuth, updated);
        }
            /// <summary>
            /// Call CDX real time service to get credit memo by identifier.
            /// </summary>
            /// <param name="context">Request context.</param>
            /// <param name="id">Credit memo identifier.</param>
            /// <returns>Credit memo information.</returns>
            private static CreditMemo GetCreditMemo(RequestContext context, string id)
            {
                if (string.IsNullOrWhiteSpace(id))
                {
                    throw new ArgumentException("Credit memo identifier is null or empty.", "id");
                }

                var        getCreditMemoRealtimeRequest = new GetCreditMemoRealtimeRequest(id);
                CreditMemo creditMemo = context.Execute <SingleEntityDataServiceResponse <CreditMemo> >(getCreditMemoRealtimeRequest).Entity;

                return(creditMemo);
            }
Exemple #15
0
        public void CreditMemoUpdateTestUsingoAuth()
        {
            //Creating the CreditMemo for Adding
            CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);
            //Change the data of added entity
            CreditMemo changed = QBOHelper.UpdateCreditMemo(qboContextoAuth, added);
            //Update the returned entity data
            CreditMemo updated = Helper.Update <CreditMemo>(qboContextoAuth, changed);

            //Verify the updated CreditMemo
            QBOHelper.VerifyCreditMemo(changed, updated);
        }
Exemple #16
0
        public void CreditMemoUpdatedAsyncTestsUsingoAuth()
        {
            //Creating the CreditMemo for Adding
            CreditMemo entity = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, entity);

            //Update the CreditMemo
            CreditMemo updated = QBOHelper.UpdateCreditMemo(qboContextoAuth, added);
            //Call the service
            CreditMemo updatedReturned = Helper.UpdateAsync <CreditMemo>(qboContextoAuth, updated);

            //Verify updated CreditMemo
            QBOHelper.VerifyCreditMemo(updated, updatedReturned);
        }
Exemple #17
0
        /// <summary>
        /// get credit memo by id
        /// </summary>
        /// <param name="creditMemoId"></param>
        /// <returns></returns>
        public CreditMemo GetCreditMemo(Guid creditMemoId)
        {
            var creditMemo = new CreditMemo();

            try
            {
                creditMemo = _db.CreditMemo.FirstOrDefault(x => x.CreditMemoId == creditMemoId);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Error getting credit memo: {0} ", ex.ToString());
            }

            return(creditMemo);
        }
Exemple #18
0
        public void CreditMemoBatchUsingoAuth(ServiceContext qboContextoAuth)
        {
            Dictionary <OperationEnum, object> batchEntries = new Dictionary <OperationEnum, object>();

            CreditMemo existing = Helper.FindOrAdd(qboContextoAuth, new CreditMemo());

            batchEntries.Add(OperationEnum.create, QBOHelper.CreateCreditMemo(qboContextoAuth));

            batchEntries.Add(OperationEnum.update, QBOHelper.UpdateCreditMemo(qboContextoAuth, existing));

            batchEntries.Add(OperationEnum.query, "select * from CreditMemo");

            batchEntries.Add(OperationEnum.delete, existing);

            ReadOnlyCollection <IntuitBatchResponse> batchResponses = Helper.Batch <CreditMemo>(qboContextoAuth, batchEntries);
        }
Exemple #19
0
        public void CreditMemoDeleteTestUsingoAuth(ServiceContext qboContextoAuth)
        {
            //Creating the CreditMemo for Adding
            CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);

            //Delete the returned entity
            try
            {
                CreditMemo deleted = Helper.Delete <CreditMemo>(qboContextoAuth, added);
            }
            catch (IdsException ex)
            {
            }
        }
Exemple #20
0
            /// <summary>
            /// Reserves the credit memo for a given terminal so it cannot be used on other terminals.
            /// </summary>
            /// <param name="request">The <see cref="LockCreditMemoRealtimeRequest"/> request.</param>
            /// <returns>The <see cref="SingleEntityDataServiceResponse{CreditMemo}"/> response.</returns>
            private static SingleEntityDataServiceResponse <CreditMemo> LockCreditMemo(LockCreditMemoRealtimeRequest request)
            {
                var transactionClient = new TransactionService.TransactionServiceClient(request.RequestContext);

                string  cardCurrencyCode;
                decimal amount;

                transactionClient.LockCreditMemo(request.CreditMemoId, request.StoreId, request.TerminalId, out cardCurrencyCode, out amount);
                var creditMemo = new CreditMemo
                {
                    Id           = request.CreditMemoId,
                    CurrencyCode = cardCurrencyCode,
                    Balance      = amount
                };

                return(new SingleEntityDataServiceResponse <CreditMemo>(creditMemo));
            }
Exemple #21
0
            /// <summary>
            /// Gets credit memo by id.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The <see cref="SingleEntityDataServiceResponse{CreditMemo}"/> response.</returns>
            private static SingleEntityDataServiceResponse <CreditMemo> GetCreditMemo(GetCreditMemoRealtimeRequest request)
            {
                var transactionClient = new TransactionService.TransactionServiceClient(request.RequestContext);

                string  currencyCode;
                decimal balance;

                transactionClient.GetCreditMemo(request.CreditMemoId, out currencyCode, out balance);

                var creditMemo = new CreditMemo
                {
                    Id           = request.CreditMemoId,
                    CurrencyCode = currencyCode,
                    Balance      = balance
                };

                return(new SingleEntityDataServiceResponse <CreditMemo>(creditMemo));
            }
Exemple #22
0
        public void CreditMemoVoidTestUsingoAuth()
        {
            //Creating the CreditMemo for Adding
            CreditMemo creditMemo = QBOHelper.CreateCreditMemo(qboContextoAuth);
            //Adding the CreditMemo
            CreditMemo added = Helper.Add <CreditMemo>(qboContextoAuth, creditMemo);

            //Delete the returned entity
            try
            {
                CreditMemo voided = Helper.Void <CreditMemo>(qboContextoAuth, added);
                Assert.AreEqual(EntityStatusEnum.Voided, voided.status);
            }
            catch (IdsException ex)
            {
                Assert.Fail();
            }
        }
            /// <summary>
            /// Authorizes the payment.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the authorized tender line.</returns>
            private static AuthorizePaymentServiceResponse AuthorizePayment(AuthorizePaymentServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine.Amount > 0)
                {
                    // Positive amount indicates credit memo payment.
                    // Payment always uses full amount. Actual amount will be returned as part of tender line on response.
                    string orgUnitNumber = request.RequestContext.GetOrgUnit().OrgUnitNumber;

                    var lockRequest = new LockCreditMemoRealtimeRequest(
                        request.TenderLine.CreditMemoId,
                        orgUnitNumber,
                        request.RequestContext.GetTerminal().TerminalId);
                    CreditMemo creditMemo = request.RequestContext.Execute <SingleEntityDataServiceResponse <CreditMemo> >(lockRequest).Entity;

                    request.TenderLine.Amount     = creditMemo.Balance;
                    request.TenderLine.Currency   = creditMemo.CurrencyCode;
                    request.TenderLine.Status     = TenderLineStatus.PendingCommit;
                    request.TenderLine.IsVoidable = true;
                }
                else
                {
                    // For negative amount issue new credit memo
                    if (!string.IsNullOrWhiteSpace(request.TenderLine.CreditMemoId))
                    {
                        throw new PaymentException(
                                  PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest,
                                  "Refund to existing credit memo is not allowed. To issue credit memo identifier should be left blank.");
                    }

                    string creditMemoId = IssueCreditMemo(request.RequestContext, decimal.Negate(request.TenderLine.Amount), request.TenderLine.Currency, request.Transaction.Id, request.Transaction.ReceiptId);

                    request.TenderLine.CreditMemoId = creditMemoId;
                    request.TenderLine.Status       = TenderLineStatus.Committed;
                    request.TenderLine.IsVoidable   = false;
                }

                return(new AuthorizePaymentServiceResponse(request.TenderLine));
            }
Exemple #24
0
        public void CreditMemoBatchUsingoAuth()
        {
            Dictionary <OperationEnum, object> batchEntries = new Dictionary <OperationEnum, object>();

            CreditMemo existing = Helper.FindOrAdd(qboContextoAuth, new CreditMemo());

            batchEntries.Add(OperationEnum.create, QBOHelper.CreateCreditMemo(qboContextoAuth));

            batchEntries.Add(OperationEnum.update, QBOHelper.UpdateCreditMemo(qboContextoAuth, existing));

            batchEntries.Add(OperationEnum.query, "select * from CreditMemo");

            batchEntries.Add(OperationEnum.delete, existing);

            ReadOnlyCollection <IntuitBatchResponse> batchResponses = Helper.BatchTest <CreditMemo>(qboContextoAuth, batchEntries);

            int position = 0;

            foreach (IntuitBatchResponse resp in batchResponses)
            {
                if (resp.ResponseType == ResponseType.Exception)
                {
                    Assert.Fail(resp.Exception.ToString());
                }

                if (resp.ResponseType == ResponseType.Entity)
                {
                    Assert.IsFalse(string.IsNullOrEmpty((resp.Entity as CreditMemo).Id));
                }
                else if (resp.ResponseType == ResponseType.Query)
                {
                    Assert.IsTrue(resp.Entities != null && resp.Entities.Count > 0);
                }
                else if (resp.ResponseType == ResponseType.CdcQuery)
                {
                    Assert.IsTrue(resp.CDCResponse != null && resp.CDCResponse.entities != null && resp.CDCResponse.entities.Count > 0);
                }

                position++;
            }
        }
            /// <summary>
            /// Calculate amount to do be paid.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>A response containing the updated tender line.</returns>
            private static CalculatePaymentAmountServiceResponse CalculatePaymentAmount(CalculatePaymentAmountServiceRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.TenderLine.Amount > 0)
                {
                    throw new PaymentException(PaymentErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest, "Amount cannot be specified when paying with credit memo. Only full credit memo amount can be used by setting amount to zero.");
                }

                // for refunds amount is provided by client and doesn't have to be calculated
                if (request.TenderLine.Amount == 0)
                {
                    CreditMemo creditMemo = GetCreditMemo(request.RequestContext, request.TenderLine.CreditMemoId);
                    request.TenderLine.Amount = creditMemo.Balance; // set tender line amount to credit memo
                }

                return(new CalculatePaymentAmountServiceResponse(request.TenderLine));
            }
Exemple #26
0
        /// <summary>
        /// convert memo to list model
        /// </summary>
        /// <param name="memo"></param>
        /// <returns></returns>
        public CreditMemoViewModel ConvertToListView(CreditMemo memo)
        {
            CreditMemoViewModel model = new CreditMemoViewModel();

            var _debitMemoRepository        = new DebitMemoRepository();
            var _customerDynamicsRepository = new CustomerDynamicsRepository();
            var _foundryDynamicsRepository  = new FoundryDynamicsRepository();

            var debitMemo        = _debitMemoRepository.GetDebitMemo(memo.DebitMemoId);
            var dynamicsCustomer = _customerDynamicsRepository.GetCustomer(memo.CustomerId);

            model.CreditMemoId      = memo.CreditMemoId;
            model.CreditMemoNumber  = (!string.IsNullOrEmpty(memo.Number)) ? memo.Number : "N/A";
            model.CustomerId        = memo.CustomerId;
            model.FoundryId         = (debitMemo != null) ? debitMemo.FoundryId : string.Empty;
            model.CustomerName      = (dynamicsCustomer != null && !string.IsNullOrEmpty(dynamicsCustomer.SHRTNAME)) ? dynamicsCustomer.SHRTNAME : "N/A";
            model.DebitMemoId       = memo.DebitMemoId;
            model.DebitMemoNumber   = (debitMemo != null && !string.IsNullOrEmpty(debitMemo.Number)) ? debitMemo.Number : "N/A";
            model.CreditMemoDate    = memo.CreditMemoDate;
            model.CreditMemoDateStr = memo.CreditMemoDate.ToShortDateString();
            model.CreditAmount      = memo.Amount;
            model.RmaNumber         = (debitMemo != null && !string.IsNullOrEmpty(debitMemo.RmaNumber)) ? debitMemo.RmaNumber : "N/A";

            if (_debitMemoRepository != null)
            {
                _debitMemoRepository.Dispose();
                _debitMemoRepository = null;
            }

            if (_customerDynamicsRepository != null)
            {
                _customerDynamicsRepository.Dispose();
                _customerDynamicsRepository = null;
            }

            return(model);
        }
        public string CreateEntity(string accessToken, string realmID, string refreshToken, int entityType, string XML, bool IsProd)
        {
            try
            {
                if (!string.IsNullOrEmpty(accessToken) && !string.IsNullOrEmpty(realmID))
                {
                    string         output         = "";
                    ServiceContext serviceContext = BuildServiceContext(accessToken, realmID, IsProd);
                    DataService    dataService    = new DataService(serviceContext);
                    QBObjectType   QBEntityType   = (QBObjectType)entityType;

                    Output("Making CreateEntity " + QBEntityType + " API Call.");

                    switch (QBEntityType)
                    {
                    case QBObjectType.Customer:
                        XmlSerializer customerSerializer = new XmlSerializer(typeof(Customer));
                        StringReader  customerReader     = new StringReader(XML);
                        Customer      customer           = (Customer)customerSerializer.Deserialize(customerReader);
                        Customer      newCustomer        = dataService.Add(customer);

                        StringWriter customerWriter = new StringWriter();
                        customerSerializer.Serialize(customerWriter, newCustomer);

                        output = customerWriter.ToString();
                        break;

                    case QBObjectType.Invoice:
                        XmlSerializer invoiceSerializer = new XmlSerializer(typeof(Invoice));
                        StringReader  invoiceReader     = new StringReader(XML);
                        Invoice       invoice           = (Invoice)invoiceSerializer.Deserialize(invoiceReader);
                        Invoice       newInvoice        = dataService.Add(invoice);

                        StringWriter invoiceWriter = new StringWriter();
                        invoiceSerializer.Serialize(invoiceWriter, newInvoice);

                        output = invoiceWriter.ToString();
                        break;

                    case QBObjectType.InvoiceCreditMemo:
                        XmlSerializer creditMemoSerializer = new XmlSerializer(typeof(CreditMemo));
                        StringReader  creditMemoReader     = new StringReader(XML);
                        CreditMemo    creditMemo           = (CreditMemo)creditMemoSerializer.Deserialize(creditMemoReader);
                        CreditMemo    newCreditMemo        = dataService.Add(creditMemo);

                        StringWriter creditMemoWriter = new StringWriter();
                        creditMemoSerializer.Serialize(creditMemoWriter, newCreditMemo);

                        output = creditMemoWriter.ToString();
                        break;

                    case QBObjectType.Vendor:
                    case QBObjectType.VendorDeduction:
                        XmlSerializer vendorSerializer = new XmlSerializer(typeof(Vendor));
                        StringReader  reader           = new StringReader(XML);
                        Vendor        vendor           = (Vendor)vendorSerializer.Deserialize(reader);
                        Vendor        newVendor        = dataService.Add(vendor);

                        StringWriter vendorWriter = new StringWriter();
                        vendorSerializer.Serialize(vendorWriter, newVendor);

                        output = vendorWriter.ToString();
                        break;

                    case QBObjectType.CarrierPay:
                    case QBObjectType.DriverPay:
                        XmlSerializer billSerializer = new XmlSerializer(typeof(Bill));
                        StringReader  billReader     = new StringReader(XML);
                        Bill          bill           = (Bill)billSerializer.Deserialize(billReader);
                        Bill          newBill        = dataService.Add(bill);

                        StringWriter billWriter = new StringWriter();
                        billSerializer.Serialize(billWriter, newBill);

                        output = billWriter.ToString();
                        break;

                    case QBObjectType.DriverDeduction:
                        XmlSerializer vendorCreditSerializer = new XmlSerializer(typeof(VendorCredit));
                        StringReader  vendorCreditReader     = new StringReader(XML);
                        VendorCredit  vendorCredit           = (VendorCredit)vendorCreditSerializer.Deserialize(vendorCreditReader);
                        VendorCredit  newVendorCredit        = dataService.Add(vendorCredit);

                        StringWriter vendorCreditWriter = new StringWriter();
                        vendorCreditSerializer.Serialize(vendorCreditWriter, newVendorCredit);

                        output = vendorCreditWriter.ToString();
                        break;

                    case QBObjectType.TaxCode:
                        XmlSerializer taxCodeSerializer = new XmlSerializer(typeof(TaxCode));
                        StringReader  taxCodeReader     = new StringReader(XML);
                        TaxCode       taxCode           = (TaxCode)taxCodeSerializer.Deserialize(taxCodeReader);
                        TaxCode       newTaxCode        = dataService.Add(taxCode);

                        StringWriter taxCodeWriter = new StringWriter();
                        taxCodeSerializer.Serialize(taxCodeWriter, newTaxCode);

                        output = taxCodeWriter.ToString();
                        break;

                    case QBObjectType.TaxRate:
                        XmlSerializer taxRateSerializer = new XmlSerializer(typeof(TaxRate));
                        StringReader  taxRateReader     = new StringReader(XML);
                        TaxRate       taxRate           = (TaxRate)taxRateSerializer.Deserialize(taxRateReader);
                        TaxRate       newTaxRate        = dataService.Add(taxRate);

                        StringWriter taxRateWriter = new StringWriter();
                        taxRateSerializer.Serialize(taxRateWriter, newTaxRate);

                        output = taxRateWriter.ToString();
                        break;
                    }
                    Output("QBO CreateEntity successful.");
                    return(output);
                }
                else
                {
                    Output("AccessToken or RealmID cannot be empty");
                }
            }
            catch (IdsException ex)
            {
                if (ex.Message == "Unauthorized-401")
                {
                    Output("Invalid/Expired Access Token.");

                    RefreshTokens(refreshToken);

                    if (oauthTokens.ContainsKey("accessToken") && oauthTokens.ContainsKey("refreshToken"))
                    {
                        Output("Refreshed Access Token");
                        return(CreateEntity(oauthTokens["accessToken"], realmID, oauthTokens["refreshToken"], entityType, XML, IsProd));
                    }
                    else
                    {
                        Output("Error while refreshing tokens");
                        return("REVOKE");
                    }
                }
                else if (ex.Message == "429")
                {
                    Output("Too Many Concurrent Requests - Retrying in 1 minute...");
                    System.Threading.Thread.Sleep(60000);
                    return(CreateEntity(accessToken, realmID, refreshToken, entityType, XML, IsProd));
                }
                else
                {
                    Output("IdsException = " + ex.Message);
                    return(ex.Message);
                }
            }
            catch (Exception ex)
            {
                Output("Exception = " + ex.Message);
                return(ex.Message);
            }
            return("");
        }
        public string MakeQBOQuery(string accessToken, string realmID, string refreshToken, int queryType, string query, bool IsProd)
        {
            try
            {
                if (!string.IsNullOrEmpty(accessToken) && !string.IsNullOrEmpty(realmID))
                {
                    ServiceContext serviceContext = BuildServiceContext(accessToken, realmID, IsProd);
                    string         output         = "";
                    QBObjectType   QBQueryType    = (QBObjectType)queryType;

                    Output("Making MakeQBOQuery " + QBQueryType + " API Call.");

                    switch (QBQueryType)
                    {
                    case QBObjectType.cClass:
                        QueryService <Class> classQuerySvc = new QueryService <Class>(serviceContext);
                        Class classQuery = classQuerySvc.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer classSerializer = new XmlSerializer(typeof(Class));
                        StringWriter  classWriter     = new StringWriter();
                        classSerializer.Serialize(classWriter, classQuery);

                        output = classWriter.ToString();
                        break;

                    case QBObjectType.Customer:
                        QueryService <Customer> customerQuery = new QueryService <Customer>(serviceContext);
                        Customer customer = customerQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer customerSerializer = new XmlSerializer(typeof(Customer));
                        StringWriter  customerWriter     = new StringWriter();
                        customerSerializer.Serialize(customerWriter, customer);

                        output = customerWriter.ToString();
                        break;

                    case QBObjectType.Invoice:
                        QueryService <Invoice> invoiceQuery = new QueryService <Invoice>(serviceContext);
                        Invoice invoice = invoiceQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer invoiceSerializer = new XmlSerializer(typeof(Invoice));
                        StringWriter  invoiceWriter     = new StringWriter();
                        invoiceSerializer.Serialize(invoiceWriter, invoice);

                        output = invoiceWriter.ToString();
                        break;

                    case QBObjectType.InvoiceCreditMemo:
                        QueryService <CreditMemo> creditMemoQuery = new QueryService <CreditMemo>(serviceContext);
                        CreditMemo creditMemo = creditMemoQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer creditMemoSerializer = new XmlSerializer(typeof(CreditMemo));
                        StringWriter  creditMemoWriter     = new StringWriter();
                        creditMemoSerializer.Serialize(creditMemoWriter, creditMemo);

                        output = creditMemoWriter.ToString();
                        break;

                    case QBObjectType.Vendor:
                    case QBObjectType.VendorDeduction:
                        QueryService <Vendor> vendorQuery = new QueryService <Vendor>(serviceContext);
                        Vendor vendor = vendorQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer vendorSerializer = new XmlSerializer(typeof(Vendor));
                        StringWriter  vendorWriter     = new StringWriter();
                        vendorSerializer.Serialize(vendorWriter, vendor);

                        output = vendorWriter.ToString();
                        break;

                    case QBObjectType.CarrierPay:
                    case QBObjectType.DriverPay:
                        QueryService <Bill> billQuery = new QueryService <Bill>(serviceContext);
                        Bill bill = billQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer billSerializer = new XmlSerializer(typeof(Bill));
                        StringWriter  billWriter     = new StringWriter();
                        billSerializer.Serialize(billWriter, bill);

                        output = billWriter.ToString();
                        break;

                    case QBObjectType.DriverDeduction:
                        QueryService <VendorCredit> vendorCreditQuery = new QueryService <VendorCredit>(serviceContext);
                        VendorCredit vendorCredit = vendorCreditQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer vendorCreditSerializer = new XmlSerializer(typeof(VendorCredit));
                        StringWriter  vendorCreditWriter     = new StringWriter();
                        vendorCreditSerializer.Serialize(vendorCreditWriter, vendorCredit);

                        output = vendorCreditWriter.ToString();
                        break;

                    case QBObjectType.Term:
                        QueryService <Term> termQuery = new QueryService <Term>(serviceContext);
                        Term term = termQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer termSerializer = new XmlSerializer(typeof(Term));
                        StringWriter  termWriter     = new StringWriter();
                        termSerializer.Serialize(termWriter, term);

                        output = termWriter.ToString();
                        break;

                    case QBObjectType.COA:
                        QueryService <Account> accountQuery = new QueryService <Account>(serviceContext);
                        Account account = accountQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer accountSerializer = new XmlSerializer(typeof(Account));
                        StringWriter  accountWriter     = new StringWriter();
                        accountSerializer.Serialize(accountWriter, account);

                        output = accountWriter.ToString();
                        break;

                    case QBObjectType.TaxCode:
                        QueryService <TaxCode> taxCodeQuery = new QueryService <TaxCode>(serviceContext);
                        TaxCode taxCode = taxCodeQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer taxCodeSerializer = new XmlSerializer(typeof(TaxCode));
                        StringWriter  taxCodeWriter     = new StringWriter();
                        taxCodeSerializer.Serialize(taxCodeWriter, taxCode);

                        output = taxCodeWriter.ToString();
                        break;

                    case QBObjectType.TaxRate:
                        QueryService <TaxRate> taxRateQuery = new QueryService <TaxRate>(serviceContext);
                        TaxRate taxRate = taxRateQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer taxRateSerializer = new XmlSerializer(typeof(TaxRate));
                        StringWriter  taxRateWriter     = new StringWriter();
                        taxRateSerializer.Serialize(taxRateWriter, taxRate);

                        output = taxRateWriter.ToString();
                        break;

                    case QBObjectType.Item:
                        QueryService <Item> itemQuery = new QueryService <Item>(serviceContext);
                        Item item = itemQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer itemSerializer = new XmlSerializer(typeof(Item));
                        StringWriter  itemWriter     = new StringWriter();
                        itemSerializer.Serialize(itemWriter, item);

                        output = itemWriter.ToString();
                        break;
                    }

                    Output("MakeQBOQuery call successful.");
                    return(output);
                }
                else
                {
                    Output("AccessToken or RealmID cannot be empty");
                }
            }
            catch (IdsException ex)
            {
                if (ex.Message == "Unauthorized-401")
                {
                    Output("Invalid/Expired Access Token.");

                    RefreshTokens(refreshToken);

                    if (oauthTokens.ContainsKey("accessToken") && oauthTokens.ContainsKey("refreshToken"))
                    {
                        Output("Refreshed Access Token");
                        return(MakeQBOQuery(oauthTokens["accessToken"], realmID, oauthTokens["refreshToken"], queryType, query, IsProd));
                    }
                    else
                    {
                        Output("Error while refreshing tokens");
                        return("REVOKE");
                    }
                }
                else if (ex.Message == "429")
                {
                    Output("Too Many Concurrent Requests - Retrying in 1 minute...");
                    System.Threading.Thread.Sleep(60000);
                    return(MakeQBOQuery(accessToken, realmID, refreshToken, queryType, query, IsProd));
                }
                else
                {
                    Output("IdsException = " + ex.Message);
                }
            }
            catch (Exception ex)
            {
                Output("Exception = " + ex.Message);
                Output("StackTrace = " + ex.StackTrace);
                Output("HelpLink = " + ex.HelpLink);
                Output("InnerException.Message = " + ex.InnerException.Message);
            }
            return("");
        }
Exemple #29
0
        /// <summary>
        /// convert memo to view model
        /// </summary>
        /// <param name="memo"></param>
        /// <returns></returns>
        public CreditMemoViewModel ConvertToView(CreditMemo memo)
        {
            CreditMemoViewModel model = new CreditMemoViewModel();

            var _debitMemoRepository           = new DebitMemoRepository();
            var _customerDynamicsRepository    = new CustomerDynamicsRepository();
            var _salespersonDynamicsRepository = new SalespersonDynamicsRepository();
            var _creditMemoRepository          = new CreditMemoRepository();

            var debitMemo           = _debitMemoRepository.GetDebitMemo(memo.DebitMemoId);
            var dynamicsCustomer    = _customerDynamicsRepository.GetCustomer(memo.CustomerId);
            var dyanmicsSalesperson = _salespersonDynamicsRepository.GetSalesperson(!string.IsNullOrEmpty(memo.SalespersonId) ? memo.SalespersonId : "N/A");
            var items = _creditMemoRepository.GetCreditMemoItems().Where(x => x.CreditMemoId == memo.CreditMemoId).ToList();

            model.CreditMemoId      = memo.CreditMemoId;
            model.DebitMemoId       = memo.DebitMemoId;
            model.DebitMemoNumber   = (debitMemo != null && !string.IsNullOrEmpty(debitMemo.Number)) ? debitMemo.Number : "N/A";
            model.CreditMemoNumber  = (!string.IsNullOrEmpty(memo.Number)) ? memo.Number : "N/A";
            model.CreditMemoDate    = memo.CreditMemoDate;
            model.CreditMemoDateStr = memo.CreditMemoDate.ToShortDateString();
            model.CustomerId        = memo.CustomerId;
            model.CustomerName      = (dynamicsCustomer != null && !string.IsNullOrEmpty(dynamicsCustomer.SHRTNAME)) ? dynamicsCustomer.SHRTNAME : "N/A";
            model.SalespersonId     = memo.SalespersonId;
            model.SalespersonName   = (dyanmicsSalesperson != null && !string.IsNullOrEmpty(memo.SalespersonId)) ? dyanmicsSalesperson.SLPRSNFN + " " + dyanmicsSalesperson.SPRSNSLN : "N/A";
            model.CreditAmount      = memo.Amount;
            model.CreditMemoNotes   = (!string.IsNullOrEmpty(memo.Number)) ? memo.Notes : "N/A";

            if (items != null && items.Count > 0)
            {
                var creditMemoItems = new List <CreditMemoItemViewModel>();

                foreach (var item in items)
                {
                    CreditMemoItemViewModel creditMemoItem = new CreditMemoItemConverter().ConvertToView(item);

                    creditMemoItems.Add(creditMemoItem);
                }

                model.CreditMemoItems = creditMemoItems;
            }

            if (_debitMemoRepository != null)
            {
                _debitMemoRepository.Dispose();
                _debitMemoRepository = null;
            }

            if (_customerDynamicsRepository != null)
            {
                _customerDynamicsRepository.Dispose();
                _customerDynamicsRepository = null;
            }

            if (_salespersonDynamicsRepository != null)
            {
                _salespersonDynamicsRepository.Dispose();
                _salespersonDynamicsRepository = null;
            }

            if (_creditMemoRepository != null)
            {
                _creditMemoRepository.Dispose();
                _creditMemoRepository = null;
            }

            return(model);
        }
Exemple #30
0
        protected void ToolbarButtonClick(object sender, RadToolBarEventArgs e)
        {
            switch (e.Item.Text)
            {
            case "Request":
                if (IsValid)
                {
                    var cInvoice = new CInvoice();
                    var original = cInvoice.Get(InvoiceId);
                    if (original != null)
                    {
                        original.Status    = (int)CConstValue.InvoiceStatus.Invoiced_Hold;
                        original.UpdatedId = CurrentUserId;

                        if (cInvoice.Update(original))
                        {
                            var cRefundInvoice = new CInvoice();
                            var refundInvoice  = new Erp2016.Lib.Invoice();
                            CGlobal.Copy(original, refundInvoice);
                            refundInvoice.OriginalInvoiceId = original.InvoiceId;
                            switch (original.InvoiceType)
                            {
                            case (int)CConstValue.InvoiceType.General:
                            case (int)CConstValue.InvoiceType.Simple:
                            case (int)CConstValue.InvoiceType.Manual:
                                refundInvoice.InvoiceType = (int)CConstValue.InvoiceType.Refund_RF;
                                break;

                            case (int)CConstValue.InvoiceType.Homestay:
                                refundInvoice.InvoiceType = (int)CConstValue.InvoiceType.Refund_HR;
                                break;

                            case (int)CConstValue.InvoiceType.Dormitory:
                                refundInvoice.InvoiceType = (int)CConstValue.InvoiceType.Refund_DR;
                                break;
                            }
                            refundInvoice.Status      = (int)CConstValue.InvoiceStatus.Pending;
                            refundInvoice.CreatedId   = CurrentUserId;
                            refundInvoice.CreatedDate = DateTime.Now;

                            var invoiceId = cRefundInvoice.Add(refundInvoice);
                            if (invoiceId > 0)
                            {
                                var refundInvoiceItems = new CInvoiceItem();
                                refundInvoiceItems.RefundItemsUpdate(original.InvoiceId, invoiceId, Convert.ToDecimal(RefundInfo1.GetRefundRate().Value), CurrentUserId);

                                var cCreditMemo = new CCreditMemo();
                                var creditMemo  = new CreditMemo();

                                creditMemo.CreditMemoType           = (int)CConstValue.CreditMemoType.Refund;
                                creditMemo.InvoiceId                = invoiceId; //Refund Invoice Id
                                creditMemo.OriginalCreditMemoAmount = 0;
                                creditMemo.CreatedId                = CurrentUserId;
                                creditMemo.CreatedDate              = DateTime.Now;
                                creditMemo.IsActive = false;

                                var creditMemoId = cCreditMemo.Add(creditMemo);
                                if (creditMemoId > 0)
                                {
                                    var cCreditMemoPayout = new CCreditMemoPayout();
                                    var creditMemoPayout  = new CreditMemoPayout();

                                    creditMemoPayout.CreditMemoId = creditMemoId;
                                    creditMemoPayout.Amount       = 0;
                                    creditMemoPayout.IsActive     = false;
                                    creditMemoPayout.CreatedId    = CurrentUserId;
                                    creditMemoPayout.CreatedDate  = DateTime.Now;

                                    var creditMemoPayoutId = cCreditMemoPayout.Add(creditMemoPayout);
                                    if (creditMemoPayoutId > 0)
                                    {
                                        var cRefund = new CRefund();
                                        var refund  = new Refund();

                                        refund.CreditMemoPayoutId = creditMemoPayoutId;
                                        refund.InvoiceId          = invoiceId;
                                        refund.RefundDate         = Convert.ToDateTime(RefundInfo1.RadActualDate().SelectedDate);
                                        refund.RefundRate         = Convert.ToDouble(RefundInfo1.GetRefundRate().Value);
                                        refund.RefundReason       = RefundInfo1.GetReason().Text;
                                        refund.IsActive           = false;
                                        refund.CreatedId          = CurrentUserId;
                                        refund.CreatedDate        = DateTime.Now;

                                        if (cRefund.Add(refund) > 0)
                                        {
                                            // save uploading file
                                            FileDownloadList1.SaveFile(refund.RefundId);

                                            RunClientScript("Close();");
                                        }
                                        ShowMessage("failed to update inqury (Add Refund Info)");
                                    }
                                    else
                                    {
                                        ShowMessage("failed to update inqury (Add CreditMemoPayout)");
                                    }
                                }
                                else
                                {
                                    ShowMessage("failed to update inqury (Add CreditMemo)");
                                }
                            }
                            else
                            {
                                ShowMessage("failed to update inqury (Add Refund Invoice)");
                            }
                        }
                        else
                        {
                            ShowMessage("failed to update inqury (Update Original Invoice)");
                        }
                    }
                    else
                    {
                        ShowMessage("failed to update inqury (Original Invoice is null)");
                    }
                }
                break;

            case "Close":
                RunClientScript("Close();");
                break;
            }
        }