<?php namespace App\Classes\External\Accounting; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; use QuickBooksOnline\API\Data\IPPCustomer; use App\Classes\External\Accounting as Base; use App\Models\User; class Quickbooks extends Base { private $api = NULL; public function __construct(User $uo) { if (Auth::user()) throw new \Exception('User logged in - *TODO* handle this'); Auth::loginUsingId($uo->id); $this->api = app('Spinen\QuickBooks\Client'); } public function getCustomers($refresh=FALSE): Collection { if ($refresh) Cache::forget(__METHOD__); return Cache::remember(__METHOD__,86400,function() { return collect($this->api->getDataService()->Query('SELECT * FROM Customer')); }); } public function getInvoice(int $id,$refresh=FALSE) { if ($refresh) Cache::forget(__METHOD__.$id); return Cache::remember(__METHOD__.$id,86400,function() use ($id) { return $this->api->getDataService()->Query(sprintf("SELECT * FROM Invoice where id = '%s'",$id)); }); } public function getInvoices($refresh=FALSE): Collection { if ($refresh) Cache::forget(__METHOD__); return Cache::remember(__METHOD__,86400,function() { return collect($this->api->getDataService()->Query('SELECT * FROM Invoice')); }); } public function updateCustomer(IPPCustomer $r,array $args) { $r->sparse = TRUE; foreach ($args as $k=>$v) { $r->{$k} = $v; } return $this->api->getDataService()->Update($r); } }