Jump to content
Sign in to follow this  
Balram

Whmcs bank transfer

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Marijo
      Hello,
      As some of you may know we in Croatia are obligated to have currency on HRK inside invoice, this makes stuff hard for me and my friend cause we're based on international marketplace and not only Croatia. Sadly we we're trying to come up with a solution and its been real pain in the ass trying to figure something out. As much as I know its not possible to use hooks inside php, so we have no idea how it would be possible to have currency exchange inside pdf that is being delivered by email. Really any help would be appreciated.
      We tried looking up on older posts but haven't found a solution yet, so please help 2 guys out :D
    • By Fany
      Hi friends,
      I tried to find an invoice template that would meet EU regulations. I didn't find it, maybe I'm looking wrong.
      According to EU rules, the type and amount of VAT must be specified for each item.
      I give an example of what an invoice should look like in the attachment.
      Can anyone solve this problem? Or do you know of a teplat that would meet these rules?
      Black texts: are firmly in the template
      Green texts: data generated from WHMCS
      Because I use the Czech language, the Czech names of the items are listed in the template
      I gave an example of generating products on an invoice.
      I am willing to evaluate the help financially. I need to change both the HTML and PDF invoice.

    • By Davor
      Hello,
      How to update the Credit Balance for a client after changing the Invoice and InvoiceItems?
      I'm using Paddle for processing my payments.
      When sending the invoice data to Paddle I send it without taxes. 
      Then Paddle handles the taxes and at the Subscription Payment Success webhook I get if there are any taxes.
      Then I change the Invoice Items and the Invoice.
      ((((Don't know if UpdateClientProduct autorecalc is not working in v8.2 or it is used for something else))))
      At the end I also update the Invoice with tax amount and the new total with taxes.
      I'm new with WHMCS (2 months now) and PHP (3 months).
      Now, I can't find the way how to update or trigger something to update the Credit Balance on the Summary for Client. It is still the old value that was before adding taxes to Invoices.
      Is there an API to update the Clients amounts, including Credit Balance and do I need to update something else after my changes to the Invoices?
       
      Here the part of the code that is doing this:
       
      $withoutTax = $fields['balance_fee'] + $fields['balance_earnings']; $taxAmount = $fields['balance_tax']; $withTax = $fields['balance_gross']; if ( $withoutTax <> 0 ) { $taxPercent = round(($taxAmount / $withoutTax) * 100, 2); } else { $taxPercent = 0; } if ( $taxPercent <> 0 ) { $itemTaxed = 1; } else { $itemTaxed = 0; } $command = 'GetInvoice'; $values = array( 'invoiceid' => $invoiceId, ); //$adminUsername = 'ADMIN_USERNAME'; // Optional for WHMCS 7.2 and later // Call the localAPI function $invoice = localAPI($command, $values, $adminUsername); logModuleCall('paddle_checkout_gateway_callback', 'UpdateInvoice_localAPI_invoice', $invoice, ""); if ($invoice['result'] == 'success') { foreach ($invoice['items']['item'] as $item) { //error_log($vars['invoiceid'].' item '.$item['id'].' has description of "'.$item['description'].'"'); $text = $item['description']; $updatedInfo = array( 'invoiceid' => $invoiceId, 'taxrate' => $taxPercent, 'itemdescription' => array($item['id'] => $text), 'itemamount' => array($item['id'] => $item['amount']), 'itemtaxed' => array($item['id'] => $itemTaxed) ); $updatedInvoice = localAPI('UpdateInvoice', $updatedInfo, $adminUsername); logModuleCall('paddle_checkout_gateway_callback', 'UpdateInvoice', $updatedInfo, $updatedInvoice); } } else { //echo "An Error Occurred: " . $results['result']; } // let's now trigger the recalculate of each hostingId from this updated invoiceid // I think that this is not working in v8.2 or the UpdateClientProduct autorecalc is used for something else $invoiceitems = Capsule::table('tblinvoiceitems') ->where('invoiceid', $invoiceId) ->where('type', 'Hosting')->get(); //->first(); foreach( $invoiceitems as $invoiceitem ){ //$invoiceitem->relid this is the id from the tblHosting table $resultOfAPI = localAPI('UpdateClientProduct', array('serviceid' => $invoiceitem->relid, 'autorecalc' => true), $adminUsername); logModuleCall('paddle_checkout_gateway_callback', 'recalculateProductItems', $invoiceitem->relid, $resultOfAPI); } // 20210927 maybe a bug in v8.2 // not updating the tax and the total amount of the invoice with UpdateClientProduct 'autorecalc' // manualy updating the table tblinvoices try { Capsule::table('tblinvoices') ->where('id', $invoiceId) ->update([ "tax" => $taxAmount, "total" => $withTax ]); } catch (\Exception $e) { logModuleCall('paddle_checkout_gateway_callback', 'recalculateProductItems_ERROR', "tax " .$taxAmount . " total " .$withtax ,$e); echo "Error in updating tblInvoices. {$e->getMessage()}"; }  
    • By mohd
      the problem is when the cust buys 2 item and only of them has promo but the invoice somehow calculate both it together in the same promo.
      this is not promotion setting problem. Can anyone help out? 
    • By Cubeboy
      this is a snippet of my quote/contract script
      it seems to know the recurring but not the onetime, it shows the "unit price" but no the "total price
      I need to have the one time and payments show up in the contract
      the 2 hooks you need to add in
      //term is the call 
      // 1 displays the number of months
      [term: 1]
      [recur:36]
      <?php
      $pdf->Image(ROOTDIR.'/assets/img/rwclogo.png', 63,10,75,'c');
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',11);
      $pdf->Cell(175,40,"CONTRACT FOR $subject ONLINE MARKETING SERVICES",25,1,'C');
      $total_onetime = 0;
      $total_recur = array();
      foreach ($lineitems AS $item) {
       
      $description = $item["description"]; 

      # find term 
      $matches = array();
      preg_match('/\[term:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $term = ''; 
      }
      else { 
      $term = strtolower(trim($matches[1])); 
      $description = str_replace($matches[0], '', $description); 
      }

      # find recur 
      $matches = array();
      preg_match('/\[recur:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $recur = ''; 
      }
      else { 
      $recur = strtolower(trim($matches[1])); 
      $description = trim(str_replace($matches[0], '', $description)); 
      }

      # get unit price and total price 
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['unitprice'], $matches); 
      $item_unitprice = (float)$matches[0];
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['total'], $matches); 
      $item_total = (float)$matches[0];
       
      # add onetime and recurring totals
       
      if ($recur == '') { 
      $total_onetime += $item_total; 
      }
      else { 
      if (!array_key_exists($recur, $total_recur)) { 

      $total_recur[$recur] = 0; 
      }

      $total_recur[$recur] += $item_total; 
      }
      }
      $pdf->SetFont('freesans','B',9);
      if ($total_onetime > 0) { 
      }
      foreach (array('monthly', 'quarterly', 'semi-annually', 'annually', 'biennially') as $recur) { 
      if (isset($total_recur[$recur]) && $total_recur[$recur] > 0) { 
      }
      unset($total_recur[$recur]);
      }
      # any remaining recurs
      foreach ($total_recur as $recur => $amount) { 
      }
      #==========================================================================
      # determine weather to show the ONE TIME payment or not
      #if ( $total_onetime < 100 ) {
      #$ot_show = false;
      #} 
      #else {
      #$ot_show = true;
      #}

      #==========================================================================
      # determines weather or not to split the initial payment in half
      #if ( $total_onetime >= 10000 ) {
      #$bulk = $total_onetime / 2;
      #$addtl_payment_msg = 'and the second half of $' .$bulk. ', will be due within 60 days. ';
      #} else {
      #$bulk = $total_onetime;
      #$addtl_payment_msg = '';
      }
      #==========================================================================
      #calculate One time payment using monthly pymts as a varible
      #==========================================================================
      #$otpp = ( $total_recur[$recur] * $recur );
      #$ots = ( $otpp * .1);
      #$ots = round( $ots, 2, PHP_ROUND_HALF_UP );
      #$otp = $otpp - ($otpp * .1);
      #$otp = round( $otp, 2, PHP_ROUND_HALF_UP );
      #==========================================================================
      #calculate One time payment and monthly payment to come up with a total
      #$totalot = ( $total_recur[$recur] * $recur + $bulk );
      #$totalot10 = ( $totalot - $ots );
      #==========================================================================
      $pdf->SetDrawColor(255);
      $pdf->SetFillColor(255);
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Authorization:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,C); 
      $pdf->MultiCell(170,5,"
      This document defines the TERMS AND CONDITIONS (T&C) of our working relationship. All projects or services (“the work”) that AGENCY (or “we”) RWC ME 04401 may be contracted to produce or provide for CLIENT ($clientsdetails[companyname]) will be subject to and you the undersigned agree to the following:
      The CLIENT authorizes the AGENCY access CLIENT's current website, webhost, and all digital materials to transfer as needed from the CLIENT for the purposes of completeing the work on the domain $subject. The CLIENT authorizes use of CLIENT's logo and all brand identification in the creation of the website. The CLIENT understands they are entering into a$pdf->Cell $recur month contract with THE AGENCY.    
      The Agency will only begin work after CLIENT’s approval of the project authorization to proceed,(ATP) and the terms and conditions,(T&C) and after receipt of payment of the initial invoice $".$total_onetime.  ". Your signature/execution of the ATP and the T&C will constitute an AGREEMENT between us. 
                                                                                                                       ");
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Description of the work:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"$notes",0,1,'C');

      if ($proposal) {
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Installment Plan:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,$proposal                  );
      }
      $pdf->AddPage();
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Approvals:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Additions and Alterations:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,C); 
      $pdf->MultiCell(170,5,"                              ");
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','B',9);
      $pdf->Cell(170,5,"Payments:",0,0,'L');
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(170,5,"");
      $pdf->SetFont('freesans','',9,L); 
      $pdf->MultiCell(170,5,"The AGENCY is providing Online Marketing Services in advance of total payment. The CLIENT will have an initial down payment of $" . $bulk . ". that is due at the signing of this contract, " .$addtl_payment_msg. "Then an ongoing payment of $pdf->Cell $$total_recur[$recur], on a monthly basis for the following$pdf->Cell $recur months, starting from the date of signing this agreement.                                " );
      $pdf->MultiCell(170,5,"");
      $pdf->AddPage();
      $pdf->Image(ROOTDIR.'/assets/img/rwclogo.png', 63,10,75,'c');
      $pdf->SetFont('freesans','B',11);
      $pdf->Ln();

      $pdf->SetFont('freesans','B',9);
      $pdf->Ln();
      $pdf->SetFont('freesans','',9);
      $pdf->MultiCell(39,5,"");
      $pdf->Ln();
      $pdf->SetFont('freesans','B',9);
      $pdf->SetDrawColor(200);
      $pdf->SetFillColor(239);
      $pdf->SetFont('freesans','',9);
      $pdf->Cell(10,6,"Qty",1,0,'C','1');
      $pdf->Cell(80,6,"Description",1,0,'C','1');
      $pdf->Cell(20,6,"Recur",1,0,'C','1');
      $pdf->Cell(20,6,"Term",1,0,'C','1');
      $pdf->Cell(20,6,"Unit Price",1,0,'C','1');
      $pdf->Cell(20,6,"Total",1,0,'C','1');
      $pdf->Ln();
      $pdf->SetFont('freesans','B',9);
      $total_onetime = 0;
      $total_recur = array();
      foreach ($lineitems AS $item) {
       
      $description = $item["description"]; 
      #==========================================================================
      # find term 
      #==========================================================================
      $matches = array();
      preg_match('/\[term:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $term = ''; 
      }
      else { 
      $term = strtolower(trim($matches[1])); 
      $description = str_replace($matches[0], '', $description); 
      }
      #==========================================================================
      # find recur 
      #==========================================================================
      $matches = array();
      preg_match('/\[recur:(.*?)\]/i', $description, $matches); 
      if (empty($matches)) { 
      $recur = ''; 
      }
      else { 
      $recur = strtolower(trim($matches[1])); 
      $description = trim(str_replace($matches[0], '', $description)); 
      }
      #==========================================================================
      # get unit price and total price 
      #==========================================================================
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['unitprice'], $matches); 
      $item_unitprice = (float)$matches[0];
      $matches = array(); 
      preg_match('/\d+\.\d+/', $item['total'], $matches); 
      $item_total = (float)$matches[0];
      #==========================================================================
      # add onetime and recurring totals
      #========================================================================== 
      if ($recur == '') { 
      $total_onetime += $item_total; 
      }
      else { 
      if (!array_key_exists($recur, $total_recur)) { 

      $total_recur[$recur] = 0; 
      }

      $total_recur[$recur] += $item_total; 
      }
      #==========================================================================
      # display line items
      #==========================================================================
      $numlines = ceil(strlen($description)/55); 
      $cellheight = $numlines * 8;
      $pdf->MultiCell(10,$cellheight,$item["qty"],1,'C','',0);
      $pdf->MultiCell(80,$cellheight,$description,1,'L','',0);
      $pdf->MultiCell(20,$cellheight,$recur,'1','C','',0);
      $pdf->MultiCell(20,$cellheight,$term,'1','C','',0);
      $pdf->MultiCell(20,$cellheight,sprintf('$%.2f',$item_unitprice),1,'C','',0);
      $pdf->MultiCell(20,$cellheight,sprintf('$%.2f',$item_total),1,'C','',1);
      }
      $pdf->SetFont('freesans','B',9);
      /*
      $pdf->Cell(145,6,"Subtotal",1,0,'R','1');
      $pdf->Cell(25,6,$currencysymbol.$subtotal,1,0,'C','1');
      $pdf->Ln();
      if ($taxlevel1["rate"]>0) {
          $pdf->Cell(145,6,$taxlevel1["name"]." @ ".$taxlevel1["rate"]."%",1,0,'R','1');
          $pdf->Cell(25,6,$currencysymbol.$tax1,1,0,'C','1');
          $pdf->Ln();
      }
      if ($taxlevel2["rate"]>0) {
          $pdf->Cell(145,6,$taxlevel2["name"]." @ ".$taxlevel2["rate"]."%",1,0,'R','1');
          $pdf->Cell(25,6,$currencysymbol.$tax2,1,0,'C','1');
          $pdf->Ln();
      }
      $pdf->Cell(145,6,"Total",1,0,'R','1');
      $pdf->Cell(25,6,$currencysymbol.$total,1,0,'C','1');
      $pdf->Ln();
      */
      if ($total_onetime > 0) { 
      $pdf->Cell(150,6,'Pre-Pay',1,0,'R',1);
      $pdf->Cell(20,6,sprintf('$%.2f',$total_onetime),1,0,'C',1);
      $pdf->Ln();
      }
      foreach (array('monthly', 'quarterly', 'semi-annually', 'annually', 'biennially') as $recur) { 
      if (isset($total_recur[$recur]) && $total_recur[$recur] > 0) { 
      $pdf->Cell(150,6,ucfirst($recur) . ' Monthly Payments',1,0,'R',1);

      $pdf->Cell(20,6,sprintf('$%.2f',$total_recur[$recur]),1,0,'C',1);

      $pdf->Ln();
      }
      unset($total_recur[$recur]);
      }
      #==========================================================================
      # any remaining recurs
      #==========================================================================
      foreach ($total_recur as $recur => $amount) { 
      $pdf->Cell(150,6,ucfirst($recur) . ' Monthly Payments',1,0,'R',1); 
      $pdf->Cell(20,6,sprintf('$%.2f',$amount),1,0,'C',1);
      $pdf->Ln();
      }

      $pdf->SetFont('freesans','',9,l);
      $pdf->MultiCell(170,5,"
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated