Fixes for e-invoices

This commit is contained in:
David Bomba 2023-04-28 20:16:54 +10:00
parent ece86c64a3
commit edd8269c08
11 changed files with 54 additions and 167 deletions

View File

@ -102,11 +102,13 @@ class Response
public function __construct($data) public function __construct($data)
{ {
if(!$data)
return $this;
foreach($data as $key => $value){ if($data) {
$this->{$key} = $value;
foreach($data as $key => $value) {
$this->{$key} = $value;
}
} }
} }

View File

@ -30,12 +30,10 @@ class CompanyFactory
public function create(int $account_id) :Company public function create(int $account_id) :Company
{ {
$company = new Company; $company = new Company;
// $company->name = '';
$company->account_id = $account_id; $company->account_id = $account_id;
$company->company_key = $this->createHash(); $company->company_key = $this->createHash();
$company->settings = CompanySettings::defaults(); $company->settings = CompanySettings::defaults();
$company->db = config('database.default'); $company->db = config('database.default');
//$company->custom_fields = (object) ['invoice1' => '1', 'invoice2' => '2', 'client1'=>'3'];
$company->custom_fields = (object) []; $company->custom_fields = (object) [];
$company->client_registration_fields = ClientRegistrationFields::generate(); $company->client_registration_fields = ClientRegistrationFields::generate();

View File

@ -30,13 +30,19 @@ class StoreInvoiceRequest extends Request
*/ */
public function authorize() : bool public function authorize() : bool
{ {
return auth()->user()->can('create', Invoice::class); /** @var \App\Models\User $user */
$user = auth()->user();
return $user->can('create', Invoice::class);
} }
public function rules() public function rules()
{ {
$rules = []; $rules = [];
/** @var \App\Models\User $user */
$user = auth()->user();
if ($this->file('documents') && is_array($this->file('documents'))) { if ($this->file('documents') && is_array($this->file('documents'))) {
$rules['documents.*'] = $this->file_validation; $rules['documents.*'] = $this->file_validation;
} elseif ($this->file('documents')) { } elseif ($this->file('documents')) {
@ -49,12 +55,11 @@ class StoreInvoiceRequest extends Request
$rules['file'] = $this->file_validation; $rules['file'] = $this->file_validation;
} }
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0'; $rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.$user->company()->id.',is_deleted,0';
// $rules['client_id'] = ['required', Rule::exists('clients')->where('company_id', auth()->user()->company()->id)];
$rules['invitations.*.client_contact_id'] = 'distinct'; $rules['invitations.*.client_contact_id'] = 'distinct';
$rules['number'] = ['bail', 'nullable', Rule::unique('invoices')->where('company_id', auth()->user()->company()->id)]; $rules['number'] = ['bail', 'nullable', Rule::unique('invoices')->where('company_id', $user->company()->id)];
$rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())]; $rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())];
$rules['is_amount_discount'] = ['boolean']; $rules['is_amount_discount'] = ['boolean'];

View File

@ -31,8 +31,11 @@ class UpdateInvoiceRequest extends Request
* @return bool * @return bool
*/ */
public function authorize() : bool public function authorize() : bool
{ {
return auth()->user()->can('edit', $this->invoice); /** @var \App\Models\User $user */
$user = auth()->user();
return $user->can('edit', $this->invoice);
} }
public function rules() public function rules()

View File

@ -64,6 +64,8 @@ class BaseImport
public ?bool $skip_header; public ?bool $skip_header;
public array $entity_count = [];
public function __construct(array $request, Company $company) public function __construct(array $request, Company $company)
{ {
$this->company = $company; $this->company = $company;
@ -80,9 +82,10 @@ class BaseImport
auth()->login($this->company->owner(), true); auth()->login($this->company->owner(), true);
auth() /** @var \App\Models\User $user */
->user() $user = auth()->user();
->setCompany($this->company);
$user->setCompany($this->company);
} }
public function getCsvData($entity_type) public function getCsvData($entity_type)
@ -579,12 +582,12 @@ class BaseImport
$quote_data, $quote_data,
$quote_repository $quote_repository
) { ) {
if (! empty($invoice_data['archived'])) { if (! empty($quote_data['archived'])) {
$quote_repository->archive($quote); $quote_repository->archive($quote);
$quote->fresh(); $quote->fresh();
} }
if (! empty($invoice_data['viewed'])) { if (! empty($quote_data['viewed'])) {
$quote = $quote $quote = $quote
->service() ->service()
->markViewed() ->markViewed()

View File

@ -22,6 +22,8 @@ use App\Repositories\InvoiceRepository;
class Invoicely extends BaseImport class Invoicely extends BaseImport
{ {
public array $entity_count = [];
public function import(string $entity) public function import(string $entity)
{ {
if ( if (

View File

@ -89,7 +89,7 @@ class CompanyImport implements ShouldQueue
private $account; private $account;
public $company; public Company $company;
public $user; public $user;
@ -215,8 +215,8 @@ class CompanyImport implements ShouldQueue
* *
* @param Company $company * @param Company $company
* @param User $user * @param User $user
* @param string $hash - the cache hash of the import data. * @param string $file_location - the cache hash of the import data.
* @param array $request->all() * @param array $request_array
*/ */
public function __construct(Company $company, User $user, string $file_location, array $request_array) public function __construct(Company $company, User $user, string $file_location, array $request_array)
{ {

View File

@ -70,7 +70,6 @@ class CreateEInvoice implements ShouldQueue
return (new FacturaEInvoice($this->invoice, str_replace("Facturae_", "", $e_invoice_type)))->run(); return (new FacturaEInvoice($this->invoice, str_replace("Facturae_", "", $e_invoice_type)))->run();
default: default:
return (new ZugferdEInvoice($this->invoice, $this->alterPDF, $this->custom_pdf_path))->run(); return (new ZugferdEInvoice($this->invoice, $this->alterPDF, $this->custom_pdf_path))->run();
break;
} }

View File

@ -32,11 +32,11 @@ use Laracasts\Presenter\PresentableTrait;
* @property int|null $industry_id * @property int|null $industry_id
* @property string|null $ip * @property string|null $ip
* @property string $company_key * @property string $company_key
* @property int $convert_products * @property bool $convert_products
* @property int $fill_products * @property bool $fill_products
* @property int $update_products * @property bool $update_products
* @property int $show_product_details * @property bool $show_product_details
* @property int $client_can_register * @property bool $client_can_register
* @property int $custom_surcharge_taxes1 * @property int $custom_surcharge_taxes1
* @property int $custom_surcharge_taxes2 * @property int $custom_surcharge_taxes2
* @property int $custom_surcharge_taxes3 * @property int $custom_surcharge_taxes3
@ -86,12 +86,12 @@ use Laracasts\Presenter\PresentableTrait;
* @property int $use_comma_as_decimal_place * @property int $use_comma_as_decimal_place
* @property int $report_include_drafts * @property int $report_include_drafts
* @property array|null $client_registration_fields * @property array|null $client_registration_fields
* @property int $convert_rate_to_client * @property bool $convert_rate_to_client
* @property int $markdown_email_enabled * @property bool $markdown_email_enabled
* @property int $stop_on_unpaid_recurring * @property bool $stop_on_unpaid_recurring
* @property int $use_quote_terms_on_conversion * @property bool $use_quote_terms_on_conversion
* @property int $enable_applying_payments * @property int $enable_applying_payments
* @property int $track_inventory * @property bool $track_inventory
* @property int $inventory_notification_threshold * @property int $inventory_notification_threshold
* @property int $stock_notification * @property int $stock_notification
* @property string|null $matomo_url * @property string|null $matomo_url
@ -198,134 +198,6 @@ use Laracasts\Presenter\PresentableTrait;
* @property-read int|null $vendors_count * @property-read int|null $vendors_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Webhook> $webhooks * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Webhook> $webhooks
* @property-read int|null $webhooks_count * @property-read int|null $webhooks_count
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel company()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel exclude($columns)
* @method static \Database\Factories\CompanyFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder|Company newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Company newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Company query()
* @method static \Illuminate\Database\Eloquent\Builder|BaseModel scope()
* @method static \Illuminate\Database\Eloquent\Builder|Company whereAccountId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereAutoStartTasks($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCalculateExpenseTaxByAmount($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereClientCanRegister($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereClientRegistrationFields($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCompanyKey($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereConvertExpenseCurrency($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereConvertPaymentCurrency($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereConvertProducts($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereConvertRateToClient($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCustomFields($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCustomSurchargeTaxes1($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCustomSurchargeTaxes2($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCustomSurchargeTaxes3($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereCustomSurchargeTaxes4($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereDb($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereDefaultAutoBill($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereDefaultPasswordTimeout($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereDefaultQuantity($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereDefaultTaskIsDateBased($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableApplyingPayments($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableModules($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableProductCost($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableProductDiscount($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableProductQuantity($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnableShopApi($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnabledExpenseTaxRates($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnabledItemTaxRates($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnabledModules($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereEnabledTaxRates($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereExpenseInclusiveTaxes($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereFillProducts($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereFirstDayOfWeek($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereFirstMonthOfYear($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereGoogleAnalyticsKey($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereIndustryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInventoryNotificationThreshold($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceExpenseDocuments($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskDatelog($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskDocuments($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskHours($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskLock($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskProject($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereInvoiceTaskTimelog($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereIp($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereIsDisabled($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereIsLarge($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMarkExpensesInvoiceable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMarkExpensesPaid($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMarkdownEmailEnabled($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMarkdownEnabled($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMatomoId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereMatomoUrl($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereNotifyVendorWhenPaid($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereOauthPasswordRequired($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company wherePortalDomain($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company wherePortalMode($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereReportIncludeDeleted($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereReportIncludeDrafts($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereSessionTimeout($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereSettings($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereShowProductCost($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereShowProductDetails($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereShowTaskEndDate($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereShowTasksTable($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereSizeId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereSlackWebhookUrl($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereStockNotification($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereStopOnUnpaidRecurring($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereSubdomain($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereTrackInventory($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUpdateProducts($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUseCommaAsDecimalPlace($value)
* @method static \Illuminate\Database\Eloquent\Builder|Company whereUseQuoteTermsOnConversion($value)
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $activities
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Activity> $all_activities
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $all_documents
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankIntegration> $bank_integrations
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankTransactionRule> $bank_transaction_rules
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\BankTransaction> $bank_transactions
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $client_contacts
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientGatewayToken> $client_gateway_tokens
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Client> $clients
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyGateway> $company_gateways
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyUser> $company_users
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClientContact> $contacts
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Credit> $credits
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Design> $designs
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Document> $documents
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ExpenseCategory> $expense_categories
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\GroupSetting> $group_settings
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\GroupSetting> $groups
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Invoice> $invoices
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyLedger> $ledger
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PaymentTerm> $payment_terms
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Payment> $payments
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Project> $projects
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PurchaseOrder> $purchase_orders
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Quote> $quotes
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringExpense> $recurring_expenses
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\RecurringInvoice> $recurring_invoices
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Scheduler> $schedulers
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Subscription> $subscriptions
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\SystemLog> $system_log_relation
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\SystemLog> $system_logs
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Scheduler> $task_schedulers
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\TaskStatus> $task_statuses
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Task> $tasks
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\TaxRate> $tax_rates
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\CompanyToken> $tokens_hashed
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Design> $user_designs
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\PaymentTerm> $user_payment_terms
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\User> $users
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Vendor> $vendors
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Webhook> $webhooks
* @property int $calculate_taxes * @property int $calculate_taxes
* @property mixed $tax_data * @property mixed $tax_data
* @method \App\Models\User|null owner() * @method \App\Models\User|null owner()

View File

@ -33,7 +33,7 @@ use Laracasts\Presenter\PresentableTrait;
* @property int|null $created_at * @property int|null $created_at
* @property int|null $updated_at * @property int|null $updated_at
* @property int|null $deleted_at * @property int|null $deleted_at
* @property int $is_primary * @property bool $is_primary
* @property string|null $first_name * @property string|null $first_name
* @property string|null $last_name * @property string|null $last_name
* @property string|null $email * @property string|null $email
@ -42,10 +42,10 @@ use Laracasts\Presenter\PresentableTrait;
* @property string|null $custom_value2 * @property string|null $custom_value2
* @property string|null $custom_value3 * @property string|null $custom_value3
* @property string|null $custom_value4 * @property string|null $custom_value4
* @property int $send_email * @property bool $send_email
* @property string|null $email_verified_at * @property string|null $email_verified_at
* @property string|null $confirmation_code * @property string|null $confirmation_code
* @property int $confirmed * @property bool $confirmed
* @property string|null $last_login * @property string|null $last_login
* @property int|null $failed_logins * @property int|null $failed_logins
* @property string|null $oauth_user_id * @property string|null $oauth_user_id
@ -57,7 +57,7 @@ use Laracasts\Presenter\PresentableTrait;
* @property string|null $avatar_size * @property string|null $avatar_size
* @property string $password * @property string $password
* @property string|null $token * @property string|null $token
* @property int $is_locked * @property bool $is_locked
* @property string|null $contact_key * @property string|null $contact_key
* @property string|null $remember_token * @property string|null $remember_token
* @property-read \App\Models\Company $company * @property-read \App\Models\Company $company

View File

@ -37,7 +37,6 @@ trait CleanLineItems
/** /**
* Sets default values for the line_items. * Sets default values for the line_items.
* @param $item * @param $item
* @return $this
*/ */
private function cleanLineItem($item) private function cleanLineItem($item)
{ {
@ -63,9 +62,13 @@ trait CleanLineItems
$item['type_id'] = '1'; $item['type_id'] = '1';
} }
// if($item['type_id'] == '2'){ if (! array_key_exists('tax_id', $item)) {
// str_replace() $item['tax_id'] = '1';
// } }
elseif(array_key_exists('tax_id', $item) && $item['tax_id'] == '') {
$item['tax_id'] = '1';
}
} }
if (array_key_exists('id', $item)) { if (array_key_exists('id', $item)) {