asp.net - How to implement "apply credit" to existing invoices if credits are available for that customer via .Net C# code by using Interop.QBFC13Lib.dll? -


i got stuck when trying implement "apply credit" functionality of quickbooks existing invoices if credit available customer. able via quickbooks desktop ui not getting way implement via .net integrated app, written in c#. can 1 please guide on this.

code using implement "apply credit" quickbooks via c# code. getting error: "quickbooks found error when parsing provided xml text stream." below code.

public void applycreditsonprepayinvoices()     {       // open connection , begin session before data fetch - intentionally skipped code       imsgsetrequest msgset = null;       icreditmemoquery creditmemoquery = null;       string scustomername = string.empty;       if (this.getconnectedtoqb()) //this method call login quickbooks desktop       {         try         {           // during data fetch           msgset = m_sessionmanager.createmsgsetrequest("us", 8, 0);           creditmemoquery = msgset.appendcreditmemoqueryrq();           creditmemoquery.ortxnquery.txnfilter.ordaterangefilter.modifieddaterangefilter.frommodifieddate.setvalue(new datetime(2012, 3, 31), false);       imsgsetresponse msgres = m_sessionmanager.dorequests(msgset);       iresponselist responselist = msgres.responselist;       if (responselist.count > 0)       {         iresponse response = responselist.getat(0);         icreditmemoretlist creditmemolist = response.detail icreditmemoretlist;         if (creditmemolist == null)         {           return;         }         (int = 0; <= creditmemolist.count - 1; i++)         {           icreditmemoret qbcreditmemo = creditmemolist.getat(i);           if (this.getqbcustomerlistid(qbcreditmemo.customerref.fullname.getvalue()) != string.empty)           {             m_requestmsgset.clearrequests();             m_requestmsgset.attributes.onerror = enrqonerror.roecontinue;             iinvoiceadd invoiceaddrq = m_requestmsgset.appendinvoiceaddrq();             invoiceaddrq.customerref.fullname.setvalue(qbcreditmemo.customerref.fullname.getvalue());             isetcredit setcredit1 = invoiceaddrq.setcreditlist.append();             setcredit1.credittxnid.setvalue(qbcreditmemo.txnid.getvalue());             setcredit1.appliedamount.setvalue(qbcreditmemo.totalamount.getvalue());             imsgsetresponse responsesetinvoice = m_sessionmanager.dorequests(m_requestmsgset);             dataset dsinvoice = this.getextractresponsefromqb(responsesetinvoice);             string squeryresponse = stringcl.getvalue(dsinvoice.tables["invoiceaddrs"].rows[0]["statusmessage"]);             if (squeryresponse == "status ok")             {               console.writeline("credit no.:" + qbcreditmemo.txnid.getvalue() + " customer:" + qbcreditmemo.customerref.fullname.getvalue() + " total:" + qbcreditmemo.totalamount.getvalue());             }           }         }       }     }     catch (exception ex)     {       string ss = ex.message;       //handle exception here     }         {       if (msgset != null)       {         marshal.finalreleasecomobject(msgset);       }       if (creditmemoquery != null)       {         marshal.finalreleasecomobject(creditmemoquery);       }     }   }    // end session , close connection after data fetch - intentionally skipped code } 

thanks in advance!!

i got solution using below function:-

public void applycreditsonprepayinvoices(string smonth, string syear) {   imsgsetrequest imsgsetrequesttoqb = null;   icreditmemoquery icreditmemoquerytoqb = null;   string sinvoicetxnid = string.empty;   string sinvoicenumber = string.empty;   if (this.getconnectedtoqb())   {     try     {       imsgsetrequesttoqb = m_sessionmanager.createmsgsetrequest("us", 8, 0);       icreditmemoquerytoqb = imsgsetrequesttoqb.appendcreditmemoqueryrq();       icreditmemoquerytoqb.ortxnquery.txnfilter.ordaterangefilter.modifieddaterangefilter.frommodifieddate.setvalue(datetimecl.getvalue("1." + smonth + syear), true);       imsgsetresponse imsgsetresponsefromqb = m_sessionmanager.dorequests(imsgsetrequesttoqb);       iresponselist icreditlistmemoavailable = imsgsetresponsefromqb.responselist;       if (icreditlistmemoavailable.count > 0)       {         string scustomerlistidqb = string.empty;         string scustomeraccountnumber = string.empty;         string sqbimportprepayaccounts = path.combine(environment.currentdirectory, smonth + syear, "step11_qbimport_prepayaccounts.csv");         datatable dtqbimportprepayaccounts = utilcl.getdatatablefromcsvfile(sqbimportprepayaccounts);         iresponse icreditmemoavailable = icreditlistmemoavailable.getat(0);         icreditmemoretlist icreditmemolist = icreditmemoavailable.detail icreditmemoretlist;         if (icreditmemolist != null)         {           (int ictr = 0; ictr <= icreditmemolist.count - 1; ictr++)           {             icreditmemoret icreditmemo = icreditmemolist.getat(ictr);             datarow[] drinvoicenos = dtqbimportprepayaccounts.select("refnumber = '" + icreditmemo.refnumber.getvalue() + "'");             if (drinvoicenos.length > 0)             {               sinvoicenumber = stringcl.getvalue(drinvoicenos[0]["refnumber"]);               m_requestmsgset.clearrequests();               m_requestmsgset.attributes.onerror = enrqonerror.roecontinue;               ireceivepaymentadd ireceivepayment = m_requestmsgset.appendreceivepaymentaddrq();               sinvoicetxnid = this.getqbinvoicetxnidlist(icreditmemo.customerref.fullname.getvalue()); //to transaction id of invoice               ireceivepayment.customerref.fullname.setvalue(stringcl.getvalue(icreditmemo.customerref.fullname.getvalue()));               iappliedtotxnadd iappliedtotxnaddress = ireceivepayment.orapplypayment.appliedtotxnaddlist.append();               iappliedtotxnaddress.txnid.setvalue(sinvoicetxnid);               isetcredit isetcredittoinvoice = iappliedtotxnaddress.setcreditlist.append();               isetcredittoinvoice.credittxnid.setvalue(icreditmemo.txnid.getvalue());               isetcredittoinvoice.appliedamount.setvalue(icreditmemo.totalamount.getvalue());               imsgsetresponse responseapplycredit = m_sessionmanager.dorequests(m_requestmsgset);               dataset dsinvoice = this.getextractresponsefromqb(responseapplycredit);               string squeryresponse = stringcl.getvalue(dsinvoice.tables["receivepaymentaddrs"].rows[0]["statusmessage"]);               if (squeryresponse != "status ok")               {                 utilcl.logmessage("qb credit memo query response: " + squeryresponse);               }             }           }         }       }     }     catch (exception ex)     {       utilcl.logmessage(ex);     }         {       if (imsgsetrequesttoqb != null)       {         marshal.finalreleasecomobject(imsgsetrequesttoqb);       }       if (icreditmemoquerytoqb != null)       {         marshal.finalreleasecomobject(icreditmemoquerytoqb);       }     }   } } 

Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -