PHP code example of kg-bot / rackbeat-integration-dashboard
1. Go to this page and download the library: Download kg-bot/rackbeat-integration-dashboard library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
kg-bot / rackbeat-integration-dashboard example snippets
bash
$ php artisan migrate
// App\Jobs\Webhooks\TransferInvoice.php
namespace App\Jobs\Webhooks;
use App\Connection;
use App\Transformers\CustomerTransformer;
use App\Transformers\InvoiceTransformer;
use App\Transformers\SupplierTransformer;
use App\Transformers\TransformerInterface;
use Illuminate\Support\Facades\Log;
use KgBot\Billy\Billy;
use KgBot\Billy\Models\Customer;
use KgBot\Billy\Models\Supplier;
use KgBot\RackbeatDashboard\Classes\DashboardJob;
use KgBot\RackbeatDashboard\Models\Job;
use Rackbeat\Utils\Model;
class TransferInvoice extends DashboardJob
{
/**
* @var $conn Connection
*/
protected $conn;
/**
* @var $type string
*/
protected $type;
/**
* @var $request array
*/
protected $request;
protected $tries = 1;
protected $timeout = 0;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct( Job $job, $connection, $request, string $type = 'customer' ) {
parent::__construct( $job );
$connection = Connection::find( $connection->id );
$this->conn = $connection;
$this->type = $type;
$this->request = (array) $request;
}
/**
* Execute the job.
*
* @return void
*/
public function execute() {
$this->conn->focus();
// todo Determine is this supplier or customer invoice so we know what integration to check if enabled
try {
if ( $this->type === 'customer' ) {
$invoice = $this->conn->createRackbeatClient()->rb->customer_invoices()->find( $this->request['key'] );
if ( ! $this->conn->hasDebtorIntegration() ) {
return;
}
} else {
$invoice = $this->conn->createRackbeatClient()->rb->supplier_invoices()->find( $this->request['key'] );
if ( ! $this->conn->hasCreditorIntegration() ) {
return;
}
}
$this->jobModel->updateProgress( 10 );
} catch ( \Exception $exception ) {
$this->jobModel->updateProgress( 5 );
Log::error( 'Can\'t get invoice from webhook: ' . $exception->getMessage() );
throw $exception;
}
$this->createInvoice( $this->conn, $invoice );
$this->jobModel->updateProgress( 100 );
}
/**
* @param Connection $connection
* @param Model $invoice
*
* @return bool
*/
protected function createInvoice( Connection $connection, Model $invoice ) {
$billy = $connection->createBillyClient();
$rackbeat = $connection->createRackbeatClient();
$type = ( $invoice->getEntity() === 'supplier-invoices' ) ? 'supplier' : 'customer';
$rb_entity = $type . 's';
$contact = $this->findOrCreateContact( $rackbeat->rb->{$rb_entity}()->find( $invoice->{$type . '_id'} ), $billy, $type );
$this->jobModel->updateProgress( 50 );
$invoice = InvoiceTransformer::rackbeat( $connection, $invoice );
$invoice['contactId'] = $contact->id;
if ( $type === 'customer' ) {
$this->jobModel->updateProgress( 80 );
$this->createBillyInvoice( $invoice, $billy );
} else {
$this->jobModel->updateProgress( 80 );
$this->createBillyBill( $invoice, $billy );
}
return true;
}
/**
* @param $contact Model
* @param $billy Billy
* @param string $type string
*
* @return Supplier|Customer
*/
protected function findOrCreateContact( $contact, $billy, $type = 'supplier' ) {
switch ( $type ) {
case 'customer':
$billy = $billy->customers();
/**
* @var $transformer TransformerInterface
*/
$transformer = new CustomerTransformer( $this->conn );
break;
default:
$billy = $billy->suppliers();
$transformer = new SupplierTransformer( $this->conn );
}
$billy_contact = $billy->get( [
[ 'contactNo', '=', $contact->number ]
] )->first();
if ( ! $billy_contact ) {
$billy_contact = $billy->create( $transformer->fromRackbeat( $contact ) );
}
return $billy_contact;
}
/**
* @param $invoice
* @param $billy Billy
*/
protected function createBillyInvoice( $invoice, $billy ) {
$billy->invoices()->create( $invoice );
}
/**
* @param $invoice
* @param $billy Billy
*/
protected function createBillyBill( $invoice, $billy ) {
$billy->bills()->create( $invoice );
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.