mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-09 20:52:56 +01:00
Fixes for expense engine
This commit is contained in:
parent
ff695cdad0
commit
db7c21e761
@ -26,17 +26,17 @@ class InboundMail
|
|||||||
public ?string $subject = null;
|
public ?string $subject = null;
|
||||||
|
|
||||||
public ?string $body = null;
|
public ?string $body = null;
|
||||||
|
|
||||||
public ?UploadedFile $body_document = null;
|
public ?UploadedFile $body_document = null;
|
||||||
|
|
||||||
public string $text_body;
|
public string $text_body;
|
||||||
|
|
||||||
/** @var array[?\Illuminate\Http\UploadedFile] $documents */
|
/** @var array $documents */
|
||||||
public array $documents = [];
|
public array $documents = [];
|
||||||
|
|
||||||
public ?Carbon $date = null;
|
public ?Carbon $date = null;
|
||||||
|
|
||||||
function __constructor()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,14 +34,15 @@ class InboundMailEngine
|
|||||||
use GeneratesCounter, SavesDocuments;
|
use GeneratesCounter, SavesDocuments;
|
||||||
|
|
||||||
private array $globalBlacklist;
|
private array $globalBlacklist;
|
||||||
private array $globalWhitelist; // only for global validation, not for allowing to send something into the company, should be used to disabled blocking for mass-senders
|
|
||||||
|
private array $globalWhitelist;
|
||||||
|
|
||||||
public function __construct(private Company $company)
|
public function __construct(private Company $company)
|
||||||
{
|
{
|
||||||
|
|
||||||
// only for global validation, not for allowing to send something into the company, should be used to disabled blocking for mass-senders
|
|
||||||
$this->globalBlacklist = Ninja::isSelfHost() ? explode(",", config('ninja.inbound_mailbox.global_inbound_blocklist')) : [];
|
$this->globalBlacklist = Ninja::isSelfHost() ? explode(",", config('ninja.inbound_mailbox.global_inbound_blocklist')) : [];
|
||||||
$this->globalWhitelist = Ninja::isSelfHost() ? explode(",", config('ninja.inbound_mailbox.global_inbound_whitelist')) : [];
|
$this->globalWhitelist = Ninja::isSelfHost() ? explode(",", config('ninja.inbound_mailbox.global_inbound_whitelist')) : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* if there is not a company with an matching mailbox, we only do monitoring
|
* if there is not a company with an matching mailbox, we only do monitoring
|
||||||
* reuse this method to add more mail-parsing behaviors
|
* reuse this method to add more mail-parsing behaviors
|
||||||
@ -51,20 +52,14 @@ class InboundMailEngine
|
|||||||
if ($this->isInvalidOrBlocked($email->from, $email->to))
|
if ($this->isInvalidOrBlocked($email->from, $email->to))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Expense Mailbox => will create an expense
|
|
||||||
// $company = MultiDB::findAndSetDbByExpenseMailbox($email->to);
|
|
||||||
// if (!$company) {
|
|
||||||
// $this->saveMeta($email->from, $email->to, true);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// check if company plan matches requirements
|
// check if company plan matches requirements
|
||||||
if (Ninja::isHosted() && !($this->company->account->isPaid() && $this->company->account->plan == 'enterprise')) {
|
if (Ninja::isHosted() && !($this->company->account->isPaid() && $this->company->account->plan == 'enterprise')) {
|
||||||
$this->saveMeta($email->from, $email->to);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->createExpenses($email);
|
$this->createExpenses($email);
|
||||||
|
|
||||||
$this->saveMeta($email->from, $email->to);
|
$this->saveMeta($email->from, $email->to);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +144,9 @@ class InboundMailEngine
|
|||||||
//@todo - refactor
|
//@todo - refactor
|
||||||
public function saveMeta(string $from, string $to, bool $isUnknownRecipent = false)
|
public function saveMeta(string $from, string $to, bool $isUnknownRecipent = false)
|
||||||
{
|
{
|
||||||
// save cache
|
if(Ninja::isHosted())
|
||||||
|
return;
|
||||||
|
|
||||||
Cache::add('inboundMailCountSender:' . $from, 0, now()->addHours(12));
|
Cache::add('inboundMailCountSender:' . $from, 0, now()->addHours(12));
|
||||||
Cache::increment('inboundMailCountSender:' . $from);
|
Cache::increment('inboundMailCountSender:' . $from);
|
||||||
|
|
||||||
@ -167,20 +164,21 @@ class InboundMailEngine
|
|||||||
{
|
{
|
||||||
// Skipping executions: will not result in not saving Metadata to prevent usage of these conditions, to spam
|
// Skipping executions: will not result in not saving Metadata to prevent usage of these conditions, to spam
|
||||||
if (!$this->company->expense_mailbox_active) {
|
if (!$this->company->expense_mailbox_active) {
|
||||||
$this->logBlocked($this->company, 'mailbox not active for this company. from: ' . $email->from);
|
$this->logBlocked('mailbox not active for this company. from: ' . $email->from);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!$this->validateExpenseSender($email)) {
|
if (!$this->validateExpenseSender($email)) {
|
||||||
$this->logBlocked($this->company, 'invalid sender of an ingest email for this company. from: ' . $email->from);
|
$this->logBlocked('invalid sender of an ingest email for this company. from: ' . $email->from);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (sizeOf($email->documents) == 0) {
|
if (count($email->documents) == 0) {
|
||||||
$this->logBlocked($this->company, 'email does not contain any attachments and is likly not an expense. from: ' . $email->from);
|
$this->logBlocked('email does not contain any attachments and is likly not an expense. from: ' . $email->from);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare data
|
// prepare data
|
||||||
$expense_vendor = $this->getVendor($email);
|
$expense_vendor = $this->getVendor($email);
|
||||||
|
|
||||||
$this->processHtmlBodyToDocument($email);
|
$this->processHtmlBodyToDocument($email);
|
||||||
|
|
||||||
$parsed_expense_ids = []; // used to check if an expense was already matched within this job
|
$parsed_expense_ids = []; // used to check if an expense was already matched within this job
|
||||||
@ -254,7 +252,7 @@ class InboundMailEngine
|
|||||||
private function processHtmlBodyToDocument(InboundMail $email)
|
private function processHtmlBodyToDocument(InboundMail $email)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ($email->body !== null)
|
if (!is_null($email->body))
|
||||||
$email->body_document = TempFile::UploadedFileFromRaw($email->body, "E-Mail.html", "text/html");
|
$email->body_document = TempFile::UploadedFileFromRaw($email->body, "E-Mail.html", "text/html");
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -295,14 +293,6 @@ class InboundMailEngine
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// private function getClient(InboundMail $email)
|
|
||||||
// {
|
|
||||||
// $clientContact = ClientContact::where("company_id", $this->company->id)->where("email", $email->from)->first();
|
|
||||||
// if (!$clientContact)
|
|
||||||
// return null;
|
|
||||||
|
|
||||||
// return $clientContact->client();
|
|
||||||
// }
|
|
||||||
private function getVendor(InboundMail $email)
|
private function getVendor(InboundMail $email)
|
||||||
{
|
{
|
||||||
$vendorContact = VendorContact::with('vendor')->where("company_id", $this->company->id)->where("email", $email->from)->first();
|
$vendorContact = VendorContact::with('vendor')->where("company_id", $this->company->id)->where("email", $email->from)->first();
|
||||||
@ -310,7 +300,7 @@ class InboundMailEngine
|
|||||||
return $vendorContact ? $vendorContact->vendor : null;
|
return $vendorContact ? $vendorContact->vendor : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function logBlocked(Company $company, string $data)
|
private function logBlocked(string $data)
|
||||||
{
|
{
|
||||||
nlog("[InboundMailEngine][company:" . $this->company->company_key . "] " . $data);
|
nlog("[InboundMailEngine][company:" . $this->company->company_key . "] " . $data);
|
||||||
|
|
||||||
@ -321,7 +311,7 @@ class InboundMailEngine
|
|||||||
SystemLog::EVENT_INBOUND_MAIL_BLOCKED,
|
SystemLog::EVENT_INBOUND_MAIL_BLOCKED,
|
||||||
SystemLog::TYPE_CUSTOM,
|
SystemLog::TYPE_CUSTOM,
|
||||||
null,
|
null,
|
||||||
$company
|
$this->company
|
||||||
)
|
)
|
||||||
)->handle();
|
)->handle();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user