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)
{
if(!$data)
return $this;
foreach($data as $key => $value){
$this->{$key} = $value;
if($data) {
foreach($data as $key => $value) {
$this->{$key} = $value;
}
}
}

View File

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

View File

@ -30,13 +30,19 @@ class StoreInvoiceRequest extends Request
*/
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()
{
$rules = [];
/** @var \App\Models\User $user */
$user = auth()->user();
if ($this->file('documents') && is_array($this->file('documents'))) {
$rules['documents.*'] = $this->file_validation;
} elseif ($this->file('documents')) {
@ -49,12 +55,11 @@ class StoreInvoiceRequest extends Request
$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'] = ['required', Rule::exists('clients')->where('company_id', auth()->user()->company()->id)];
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.$user->company()->id.',is_deleted,0';
$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['is_amount_discount'] = ['boolean'];

View File

@ -31,8 +31,11 @@ class UpdateInvoiceRequest extends Request
* @return 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()

View File

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

View File

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

View File

@ -89,7 +89,7 @@ class CompanyImport implements ShouldQueue
private $account;
public $company;
public Company $company;
public $user;
@ -215,8 +215,8 @@ class CompanyImport implements ShouldQueue
*
* @param Company $company
* @param User $user
* @param string $hash - the cache hash of the import data.
* @param array $request->all()
* @param string $file_location - the cache hash of the import data.
* @param 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();
default:
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 string|null $ip
* @property string $company_key
* @property int $convert_products
* @property int $fill_products
* @property int $update_products
* @property int $show_product_details
* @property int $client_can_register
* @property bool $convert_products
* @property bool $fill_products
* @property bool $update_products
* @property bool $show_product_details
* @property bool $client_can_register
* @property int $custom_surcharge_taxes1
* @property int $custom_surcharge_taxes2
* @property int $custom_surcharge_taxes3
@ -86,12 +86,12 @@ use Laracasts\Presenter\PresentableTrait;
* @property int $use_comma_as_decimal_place
* @property int $report_include_drafts
* @property array|null $client_registration_fields
* @property int $convert_rate_to_client
* @property int $markdown_email_enabled
* @property int $stop_on_unpaid_recurring
* @property int $use_quote_terms_on_conversion
* @property bool $convert_rate_to_client
* @property bool $markdown_email_enabled
* @property bool $stop_on_unpaid_recurring
* @property bool $use_quote_terms_on_conversion
* @property int $enable_applying_payments
* @property int $track_inventory
* @property bool $track_inventory
* @property int $inventory_notification_threshold
* @property int $stock_notification
* @property string|null $matomo_url
@ -198,134 +198,6 @@ use Laracasts\Presenter\PresentableTrait;
* @property-read int|null $vendors_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Webhook> $webhooks
* @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 mixed $tax_data
* @method \App\Models\User|null owner()

View File

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

View File

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