BLUE
PHP 7.4.33
Path:
/var/www/invoice-sync.bitkit.dk/httpdocs/routes
Run
Logout
Edit File
Size: 18.69 KB
Close
/var/www/invoice-sync.bitkit.dk/httpdocs/routes/console.php
Text
Base64
<?php use App\Http\Controllers\TestController; use App\Http\Modules\Auth\PodioAuthentication; use App\Http\Modules\DataFormatter\ToPodio\BookedInvoice as ToPodioBookedInvoice; use App\Http\Modules\DataFormatter\ToPodio\BookedInvoiceCreation as ToPodioInvoice; use App\Http\Modules\DataFormatter\ToPodio\InvoiceLine as ToPodioInvoiceLine; use App\Http\Modules\DataFormatter\ToPodio\Product as ToPodioProduct; use App\Http\Service\Economic\EconomicInvoiceSync; use App\Http\Service\Economic\EconomicProductSync; use App\Http\Service\Podio\PodioInvoiceSync; use App\Http\Modules\ApiWrapper\EconomicApi; use App\Http\Modules\ApiWrapper\PodioApi; use App\Jobs\HookHandler; use App\Models\HookDetails; use App\Models\Hooks; use App\Models\Client; use App\Models\Product; use App\Http\Modules\DataFormatter\ToPodio\Client as ToPodioClient; use App\Models\UnprocessedHooks; use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Log; /* |-------------------------------------------------------------------------- | Console Routes |-------------------------------------------------------------------------- | | This file is where you may define all of your Closure based console | commands. Each Closure is bound to a command instance allowing a | simple approach to interacting with each command's IO methods. | */ Artisan::command('inspire', function () { $this->comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); Artisan::command('/test-product-api', function () { $test = new TestController(); $test->getProductDetails(); }); Artisan::command('/test-invoice-api', function () { $test = new TestController(); $test->getinvoiceDetails(); }); Artisan::command('/get-draft-no', function () { $test = new TestController(); $test->getDraftNo(); }); Artisan::command('get-vatZones', function () { $test = new TestController(); $test->getVatZones(); }); Artisan::command('/job-test', function () { $hook = Hooks::first(); HookHandler::dispatch($hook); }); Artisan::command('/test-product-service', function () { $hook = Hooks::first(); $sync = new EconomicProductSync($hook); $sync->processProductItem(); }); Artisan::command('/test-invoice-service', function () { $hook = Hooks::first(); $sync = new EconomicInvoiceSync($hook); $sync->processInvoiceItem(); }); Artisan::command('/test-invoice-create', function () { $hook = Hooks::first(); $sync = new PodioInvoiceSync($hook); $sync->processPodioInvoiceSync(); }); Artisan::command('/test-client-service', function () { $hook = Hooks::first(); $sync = new \App\Http\Service\Podio\PodioClientSync($hook); $sync->processPodioClientItem(); }); Artisan::command('update-economic', function () { $economicApi = new EconomicApi(); $properties = [ 'currency' => 'DKK', 'recipient' => [ 'name' => 'E-CONOMIC DANMARK A/S', 'vatZone' => [ 'vatZoneNumber' => 1 ] ], 'references' => [ 'other' => "33333" ], 'customer' => [ 'customerNumber' => 1 ], 'date' => '2022-11-01', 'paymentTerms' => [ 'paymentTermsNumber' => 1 ], ]; $economicApi->updateInvoiceItemId($properties, 30065); }); //------------------------------------------------------------------------------------------------------------ //script for syncing all items from economic to podio //To add all customers from economic to podio Artisan::command('/sync-clients', function () { $economicApi = new EconomicApi(); $podioApi = new PodioApi(); $endpoint = "customers"; $allClients = $economicApi->callCurlApi($endpoint)['collection']; foreach ($allClients as $client) { if (is_array($client)) { if (array_key_exists('customerNumber', $client)) { $custNo = $client['customerNumber']; if (isset($custNo)) { $toPodio = new ToPodioClient($client); $attributes = $toPodio->getData(); Log::info($custNo . ' : ' . $client['name']); //check if exist in podio $searchAttributes = [ 'query' => (string)$custNo, 'ref_type' => 'item', ]; $podioApi->podioAuth(config('podio.app_auth.client.app_id'), config('podio.app_auth.client.app_secret')); $itemCollection = Podio::post("/search/app/24706407/", $searchAttributes)->json_body(); $count = count($itemCollection); if ($count == 0) { Log::info('create client'); $response = $podioApi->podioItemCreate(config('podio.app_auth.client.app_id'), $attributes); if ($response) { Client::create(['client_no' => $client['customerNumber'], 'name' => $client['name'], 'email' => $client['email'], 'source' => 'economic', 'podio_item_id' => $response->item_id]); } } else { Log::info('update client'); $itemId = null; foreach ($itemCollection as $item) { $itemId = $item['item']['item_id']; } $podioApi->podioItemUpdate($itemId, $attributes); Client::create(['client_no' => $client['customerNumber'], 'name' => $client['name'], 'email' => $client['email'], 'source' => 'economic', 'podio_item_id' => $itemId]); } } } } } }); Artisan::command('/sync-products', function () { $economicApi = new EconomicApi(); $podioApi = new PodioApi(); //https://restapi.e-conomic.com/products?skippages=0&pagesize=20 $endpoint = "products?skippages=4&pagesize=20"; $allProducts = $economicApi->callCurlApi($endpoint)['collection']; foreach ($allProducts as $product) { if (is_array($product)) { if (array_key_exists('productNumber', $product)) { $prodNo = null; $prodNo = $product['productNumber']; if (isset($prodNo)) { $toPodio = new ToPodioProduct($product); $attributes = $toPodio->getData(); Log::info($prodNo . ' : ' . $product['name']); //check if exist in podio $searchAttributes = [ 'query' => $prodNo, 'ref_type' => 'item', ]; $podioApi->podioAuth(config('podio.app_auth.product.app_id'), config('podio.app_auth.product.app_secret')); $itemCollection = Podio::post("/search/app/23723784/", $searchAttributes)->json_body(); $count = count($itemCollection); if ($count == 0) { Log::info('create product'); $response = $podioApi->podioItemCreate(config('podio.app_auth.product.app_id'), $attributes); if ($response) { Product::create(['product_no' => $prodNo, 'name' => $product['name'], 'source' => 'economic', 'podio_item_id' => $response->item_id]); } } else { Log::info('update product'); $itemId = null; foreach ($itemCollection as $item) { $itemId = $item['item']['item_id']; } $podioApi->podioItemUpdate($itemId, $attributes); Product::create(['product_no' => $prodNo, 'name' => $product['name'], 'source' => 'economic', 'podio_item_id' => $itemId]); } } } } } }); Artisan::command('/sync-invoice-drafts', function () { $economicApi = new EconomicApi(); $podioApi = new PodioApi(); $allDrafts = $economicApi->getAllInvoiceDrafts(); foreach ($allDrafts as $allDraft) { foreach ($allDraft as $draft) { $draftNo = $draft['draftInvoiceNumber']; $toPodio = new ToPodioInvoice($draft); $attributes = $toPodio->getData(); //check if exist in podio $filterAttributes = array( 'filters' => array( 'e-invoice-draft-no' => $draftNo ), 'limit' => 1, 'offset' => 0 ); $itemCollection = $podioApi->filterPodioItems($filterAttributes, config('podio.app_auth.invoice.app_id')); $count = count($itemCollection); $options = ['silent' => true, 'hook' => false]; if ($count == 0) { //create new $response = $this->podioApi->podioItemCreate(config('podio.app_auth.invoice.app_id'), $attributes, $options); if ($response) { $hookDetails = HookDetails::whereObjectNo($draftNo) ->whereType('invoice') ->whereNull('podio_item_id') ->first(); if (!$hookDetails) { $newHook = HookDetails::create(['object_no' => $draftNo, 'type' => 'invoice', 'source' => 'economic', 'podio_item_id' => $response->item_id]); UnprocessedHooks::create(['object_no' => $draftNo, 'type' => 'invoice', 'hookDetailsId' => $newHook->id, 'podio_item_id' => $response->item_id, 'processed' => 'true']); } } } else { //update existing $itemId = null; foreach ($itemCollection as $item) { $itemId = $item->item_id; } $response = $podioApi->podioItemUpdate($itemId, $attributes); if ($response) { $hookDetails = HookDetails::whereObjectNo($draftNo) ->whereType('invoice') ->whereNull('podio_item_id') ->first(); if (!$hookDetails) { $newHook = HookDetails::create(['object_no' => $draftNo, 'type' => 'invoice', 'source' => 'economic', 'podio_item_id' => $response->item_id]); UnprocessedHooks::create(['object_no' => $draftNo, 'type' => 'invoice', 'hookDetailsId' => $newHook->id, 'podio_item_id' => $response->item_id, 'processed' => 'true']); } } } } } }); Artisan::command('sync-booked-invoices', function () { $podioAuth = new \App\Http\Modules\Auth\PodioAuthentication(); $podioAuth->authenticatePodio(); $economicApi = new EconomicApi(); $podioApi = new PodioApi(); // date > 2021-01-01 // 'results' => 1257, // 'resultsWithoutFilter' => 4685, // 'firstPage' => 'https://restapi.e-conomic.com/invoices/booked?filter=date%24gt%3A2021-01-01&skippages=0&pagesize=20', // 'nextPage' => 'https://restapi.e-conomic.com/invoices/booked?filter=date%24gt%3A2021-01-01&skippages=1&pagesize=20', // 'lastPage' => 'https://restapi.e-conomic.com/invoices/booked?filter=date%24gt%3A2021-01-01&skippages=63&pagesize=20', //$endpoint = "invoices/booked"; $date = '2021-01-01'; $no = 4909; // $endpoint = 'invoices/booked?filter=date$gt:' . $date . '&skippages=63&pagesize=20'; // $endpoint = 'invoices/booked?filter=bookedInvoiceNumber$gt:' . $no; $endpoint = 'invoices/booked?filter=references.other$eq:2596031168'; // $endpoint = 'invoices/drafts?filter=soap.currentInvoiceHandle.id$eq:946'; $bookedInvoices = $economicApi->callCurlApi($endpoint); //dd($bookedInvoices); if (count($bookedInvoices['collection']) > 0) { foreach ($bookedInvoices['collection'] as $bookedInvoice) { if (array_key_exists('bookedInvoiceNumber', $bookedInvoice)) { $invoiceNo = $bookedInvoice['bookedInvoiceNumber']; $lineItemsId = []; $invoiceItem = null; //check if exist in podio $searchAttributes = [ 'query' => $invoiceNo, 'ref_type' => 'item', ]; $itemCollection = Podio::get("/search/app/24554205/v2", $searchAttributes)->json_body(); $invoiceItemId = null; $proceed = true; $updateInvoice = true; $lineUpdate = false; $economicInvoiceNo = null; foreach ($itemCollection['results'] as $collection) { $invoiceItemId = null; $invoiceItemId = $collection['item']['item_id']; $itemDetails = PodioItem::get($invoiceItemId); foreach ($itemDetails->fields as $field) { if ($field->external_id == 'e-invoice-no' && $field->values == $invoiceNo) { $economicInvoiceNo = $field->values; $invoiceItem = $itemDetails; $proceed = false; $lineUpdate = true; } } } $endpoint = 'invoices/booked/' . $invoiceNo; $invoiceDetails = $economicApi->callCurlApi($endpoint); $toPodio = new ToPodioInvoice($invoiceDetails); if (!empty($invoiceItem)) { if ($economicInvoiceNo === $invoiceNo) { foreach ($invoiceItem->fields as $field) { switch ($field->external_id) { case 'e-invoice-no': Log::info('invoice exist for : ' . $invoiceNo); break; case 'payment-status': if ($field->values[0]['id'] == 2) { Log::info('paid invoice'); $updateInvoice = false; } break; case 'line-items': foreach ($field->values as $value) { $lineItemsId[] = $value->item_id; } break; } } if ($updateInvoice === true) { Log::info('------------------------------updating the exiting one : ' . $invoiceItemId); $attributes = $toPodio->getData($lineUpdate, $lineItemsId); $podioApi->podioItemUpdate($invoiceItemId, $attributes); } } } else { if ($proceed) { //create new Log::info('-----------------------------creating invoice for : ' . $invoiceNo); $attributes = $toPodio->getData($lineUpdate, $lineItemsId); $podioApi->podioItemCreate(config('podio.app_auth.invoice.app_id'), $attributes); } } } } } }); Artisan::command('/check-rate-limit', function () { $podioApi = new \App\Http\Modules\Auth\PodioAuthentication(); $podioApi->authenticatePodio(); PodioItem::get(2310013977); $response = \Podio::rate_limit_remaining(); dd($response); }); Artisan::command('sync-invoice', function () { $podioAuth = new \App\Http\Modules\Auth\PodioAuthentication(); $podioAuth->authenticatePodio(); $economicApi = new EconomicApi(); $podioApi = new PodioApi(); $endpoint = 'invoices/booked?filter=references.other$eq:2538895917'; $bookedInvoices = $economicApi->callCurlApi($endpoint); //dd($bookedInvoices); $lines = []; foreach ($bookedInvoices['collection'] as $bookedInvoice) { // dd($bookedInvoice); $invoiceNo = $bookedInvoice['bookedInvoiceNumber']; $endpoint = 'invoices/booked/' . $invoiceNo; $bookedInvoice = $economicApi->callCurlApi($endpoint); if (array_key_exists('references', $bookedInvoice)) $invoiceItemID = $bookedInvoice['references']['other'] ?? NULL; if (isset($invoiceItemID)) { $invoiceDetails = $podioApi->getInvoiceData($invoiceItemID); if (array_key_exists('line-items', $invoiceDetails)) { foreach ($invoiceDetails['line-items'] as $line) { $attributes1 = array( 'fields' => array( 'e-invoice-id' => (string)$invoiceNo, ) ); $podioApi->podioItemUpdate($line['item_id'], $attributes1, ['silent' => true, 'hook' => false]); } } $toPodio = new ToPodioBookedInvoice($bookedInvoice); $attributes = $toPodio->getData(); $podioApi->podioItemUpdate($invoiceItemID, $attributes); } } }); Artisan::command('cleanup-clients', function () { $test = new TestController(); $test->cleanUpClients(); exit; }); Artisan::command('update-hours', function () { $test = new TestController(); // $test->updateTotalHoursInWS(); $test->updateHoursTrigger(); exit; }); Artisan::command('delete-client', function () { $podioAuth = new PodioAuthentication(); $podioAuth->authenticatePodio(); $podioApi = new PodioApi(); $filterAttributes = array( 'filters' => array( 'duplicate' => [2] ), 'limit' => 200, 'offset' => 0 ); $itemCollection = $podioApi->filterPodioItems($filterAttributes, config('podio.app_auth.client.app_id')); $count = count($itemCollection); Log::info($count); foreach ($itemCollection as $item) { $itemId = $item->item_id; Log::info('----' . $itemId); try { $res = PodioItem::delete($itemId, array(), ['silent' => true, 'hook' => false]); if ($res) Log::info($itemId . ' : Item deleted'); } catch (Exception $e) { Log::info($e); } } });
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 0 × Files: 4
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
api.php
589 B
lrw-r--r--
2023-12-20 04:43:52
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
channels.php
576 B
lrw-r--r--
2023-12-20 04:43:47
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
console.php
18.69 KB
lrw-r--r--
2023-12-20 04:43:51
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
web.php
1.88 KB
lrw-r--r--
2023-12-20 04:43:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).