2016-08-08 8 views
0

Ich verwende Active Collab 5.8.7 mit PHP 5.6. Ich verwende die API, um eine Rechnung zu erstellen. Ich befolge die API per this Dokumentation. Mein Problem ist, dass die Post eine Rechnungsnummer erfordert, und ich habe keine Möglichkeit zu sagen, was die nächste Rechnungsnummer sein soll.Aktive Collab-API - Nächste Rechnungsnummer abrufen

Ich mag würde wissen, ob eine Möglichkeit besteht, die API zu verwenden, um das nächste Rechnungsnummer inline zu erhalten oder eine Rechnung und lassen Sie das System wählt eine Rechnungsnummer für Sie hinzufügen.

Derzeit verwende ich eine zufällige Folge von Zeichen, wenn ich eine Rechnung über die API erstellen und dann, wenn wir versuchen, eine Rechnung manuell hinzuzufügen, die Rechnungsnummer Feld leer. Es muss eine einfachere und einheitlichere Möglichkeit geben, mit Rechnungsnummern umzugehen.

Danke, Larry

Antwort

0

Ich dachte, dies auf meinem eigenen und wollte es hier bei schreiben jemand muss es anders:

//get next invoice number 
function get_next_ac_invoice_number($client) { 
    //get all invoices 
    $result = $client->get('/reports/run?type=InvoicesFilter')->getJson(); 
    $invoices = $result['all']['invoices']; 
    usort($invoices,'sortbyInvoiceId'); 
    $next_invoice_id = strval(intval(explode('-',$invoices[0]['number'])[0]) + 1) . '-' . date("Y"); 
    return $next_invoice_id; 
} 
function sortbyInvoiceId($a,$b){ 
    if ($a == $b) { 
    return 0; 
    } 
    return ($b < $a) ? -1 : 1; 
} 

EDIT 22. Februar '17

Es gibt eine Menge von Crust hier für Braintree, aber Sie sollten in der Lage sein, das Wesentliche davon zu bekommen. Eine Sache, die ich in Betracht ziehen würde, ist, dass Sie den Papierkorb von AC vor der Buchung löschen, da die nächste Rechnungs-ID-Funktion keine gelöschten Rechnungen zurückgibt und einen doppelten Rechnungs-ID-Fehler verursacht.

//get next invoice number 
function get_next_ac_invoice_number($client) { 

#get all invoices 
$trashit = $client->delete('/trash'); 
$result = $client->get('/reports/run?type=InvoicesFilter')->getJson(); 
$invoices = $result['all']['invoices']; 
usort($invoices,'sortbyInvoiceId'); 
$next_invoice_id = strval(intval(explode('-',$invoices[0]['number'])[0]) + 1) . '-' . date("Y"); 
return $next_invoice_id; 
} 

//creates an invoice in active collab 
function create_ac_invoice($customer, $subscription, $transaction, $client) { 
//get the next invoice ID 
get_next_ac_invoice_number($client); 
$plans = Braintree_Plan::all(); 
$plan; 
foreach ($plans AS $myplan) { 
    if (strtolower($myplan->id) == strtolower($subscription->planId)) { 
     $plan = $myplan; 
    } 
} 

if (isset($transaction->discounts[0])) { 
    $result = $client->post('invoices', [ 
     'company_id' => $customer['company_id'], 
     'number' => get_next_ac_invoice_number($client), 
     'items' => [ 
      [ 
       'description' => $plan->name . " - " . $plan->description, 
       'quantity' => 1, 
       'unit_cost' => $subscription->price 
      ], 
      [ 
       'description' => 'Promo Code Discount - ' . $transaction->discounts[0]->name, 
       'quantity' => 1, 
       'unit_cost' => (float) $transaction->discounts[0]->amount * -1 
      ] 
     ], 
     'private_note' => 'Auto-generated by Braintree' 
    ]); 
} else { 
    $result = $client->post('invoices', [ 
     'company_id' => $customer['company_id'], 
     'number' => get_next_ac_invoice_number($client), 
     'items' => [ 
      [ 
       'description' => $plan->name . " - " . $plan->description, 
       'quantity' => 1, 
       'unit_cost' => $subscription->price 
      ] 
     ], 
     'private_note' => 'Auto-generated by Braintree' 
    ]); 
} 

$invoice = $result->getJson(); 
if (isset($invoice['message'])) { 
    //we have an error, let's log and send email 
    $dump = print_r($invoice, true) . print_r($customer, true) . print_r($subscription, true); 
    logit('ERROR', $dump); 
    sendEmail($dump, 'Braintree Webhook Error Creating AC Invoice'); 
} 

//mark the invoice as paid 
$result = $client->post('payments', [ 

    'parent_type' => 'Invoice', 
    'parent_id' => $invoice['single']['id'], 
    'amount' => getTotalCost($subscription, $transaction), 
    'comment' => 'Paid in full' 
]); 
$result = $result->getJson(); 
if (isset($result['message'])) { 
    //we have an error, let's log and send email 
    $dump = print_r($invoice, true) . print_r($customer, true) . print_r($subscription, true); 
    logit('ERROR', $dump); 
    sendEmail($dump, 'Braintree Webhook Error Creating AC Payment'); 
} 
//send the invoice 
$result = $client->put('invoices/' . $invoice['single']['id'] . '/send', [ 
    'recipients' => [ 
     $customer['email'] 
    ], 
    'subject' => "New Invoice", 
    'message' => "Thanks!", 
    'allow_payments' => 2 
]); 
$result = $result->getJson(); 
if (isset($result['message'])) { 
    //we have an error, let's log and send email 
    $dump = print_r($invoice, true) . print_r($customer, true) . print_r($subscription, true); 
    logit('ERROR', $dump); 
    sendEmail($dump, 'Braintree Webhook Error Sending AC Invoice Email'); 
} 

return $invoice; 
} 
+0

Wären Sie bereit, Ihren Code zu teilen, der tatsächlich die Rechnung über die API erstellt? – eleclair