mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Working on our bot
This commit is contained in:
parent
837fbe3763
commit
f1a278e4ff
File diff suppressed because one or more lines are too long
@ -5,15 +5,22 @@ class BaseIntent
|
|||||||
{
|
{
|
||||||
protected $parameters;
|
protected $parameters;
|
||||||
|
|
||||||
public function __construct($parameters)
|
public function __construct($data)
|
||||||
{
|
{
|
||||||
$this->parameters = $parameters;
|
$this->data = $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function createIntent($intentType, $parameters)
|
public static function createIntent($data)
|
||||||
{
|
{
|
||||||
|
if ( ! count($data->intents)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$intent = $data->intents[0];
|
||||||
|
$intentType = $intent->intent;
|
||||||
|
|
||||||
$className = "App\\Ninja\\Intents\\{$intentType}Intent";
|
$className = "App\\Ninja\\Intents\\{$intentType}Intent";
|
||||||
return new $className($parameters);
|
return new $className($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function process()
|
public function process()
|
||||||
|
@ -4,20 +4,15 @@ class CreateInvoiceIntent extends BaseIntent
|
|||||||
{
|
{
|
||||||
public function process()
|
public function process()
|
||||||
{
|
{
|
||||||
$clientRepo = app('App\Ninja\Repositories\ClientRepository');
|
|
||||||
$invoiceRepo = app('App\Ninja\Repositories\InvoiceRepository');
|
$invoiceRepo = app('App\Ninja\Repositories\InvoiceRepository');
|
||||||
$client = false;
|
|
||||||
|
|
||||||
foreach ($this->parameters as $param) {
|
$client = $this->parseClient();
|
||||||
if ($param->type == 'client') {
|
$invoiceItems = $this->parseInvoiceItems();
|
||||||
$client = $clientRepo->findPhonetically($param->entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($client) {
|
if ($client) {
|
||||||
$data = [
|
$data = [
|
||||||
'client_id' => $client->id,
|
'client_id' => $client->id,
|
||||||
'invoice_items' => [],
|
'invoice_items' => $invoiceItems,
|
||||||
];
|
];
|
||||||
|
|
||||||
$invoice = $invoiceRepo->save($data);
|
$invoice = $invoiceRepo->save($data);
|
||||||
@ -25,19 +20,53 @@ class CreateInvoiceIntent extends BaseIntent
|
|||||||
return view('bots.skype.invoice', [
|
return view('bots.skype.invoice', [
|
||||||
'invoice' => $invoice
|
'invoice' => $invoice
|
||||||
])->render();
|
])->render();
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if ($invoice->amount > 0) {
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return view('bots.skype.card', [
|
return view('bots.skype.message', [
|
||||||
'title' => 'Testing',
|
'message' => trans('texts.client_not_found')
|
||||||
'subtitle' => $invoice->invoice_number,
|
|
||||||
])->render();
|
])->render();
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
|
|
||||||
|
private function parseClient()
|
||||||
|
{
|
||||||
|
$clientRepo = app('App\Ninja\Repositories\ClientRepository');
|
||||||
|
|
||||||
|
$client = false;
|
||||||
|
|
||||||
|
foreach ($this->data->entities as $param) {
|
||||||
|
if ($param->type == 'Client') {
|
||||||
|
$client = $clientRepo->findPhonetically($param->entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $client;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function parseInvoiceItems()
|
||||||
|
{
|
||||||
|
$productRepo = app('App\Ninja\Repositories\ProductRepository');
|
||||||
|
|
||||||
|
$invoiceItems = [];
|
||||||
|
|
||||||
|
foreach ($this->data->compositeEntities as $entity) {
|
||||||
|
if ($entity->parentType == 'InvoiceItem') {
|
||||||
|
$product = false;
|
||||||
|
$qty = 1;
|
||||||
|
foreach ($entity->children as $child) {
|
||||||
|
if ($child->type == 'Product') {
|
||||||
|
$product = $productRepo->findPhonetically($child->value);
|
||||||
|
} else {
|
||||||
|
$qty = $child->value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$item = $product->toArray();
|
||||||
|
$item['qty'] = $qty;
|
||||||
|
$invoiceItems[] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $invoiceItems;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -56,4 +56,32 @@ class ProductRepository extends BaseRepository
|
|||||||
return $product;
|
return $product;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findPhonetically($productName)
|
||||||
|
{
|
||||||
|
$productNameMeta = metaphone($productName);
|
||||||
|
|
||||||
|
$map = [];
|
||||||
|
$max = 0;
|
||||||
|
$productId = 0;
|
||||||
|
|
||||||
|
$products = Product::scope()->get(['product_key', 'notes', 'cost']);
|
||||||
|
|
||||||
|
foreach ($products as $product) {
|
||||||
|
if ( ! $product->product_key) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$map[$product->id] = $product;
|
||||||
|
$similar = similar_text($productNameMeta, metaphone($product->product_key), $percent);
|
||||||
|
|
||||||
|
if ($percent > $max) {
|
||||||
|
$productId = $product->id;
|
||||||
|
$max = $percent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $map[$productId];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2052,6 +2052,8 @@ $LANG = array(
|
|||||||
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
|
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
|
||||||
'payment_type_on_file' => ':type on file',
|
'payment_type_on_file' => ':type on file',
|
||||||
'invoice_for_client' => 'Invoice :invoice for :client',
|
'invoice_for_client' => 'Invoice :invoice for :client',
|
||||||
|
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
|
||||||
|
'client_not_found' => 'We weren\'t able to find the client',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user