mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-08 12:12:48 +01:00
Fixes for validation tests
This commit is contained in:
parent
2ec9d31212
commit
6d93b98016
@ -38,40 +38,48 @@ class UpdateEInvoiceConfiguration extends Request
|
||||
public function rules()
|
||||
{
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return [
|
||||
'entity' => 'required|bail|in:invoice,client,company',
|
||||
'payment_means' => 'sometimes|bail|array',
|
||||
'payment_means.code' => ['required_with:payment_means', 'bail', Rule::in(PaymentMeans::getPaymentMeansCodelist())],
|
||||
'payment_means.bic' => ['bail',
|
||||
'payment_means.bic_swift' => ['bail',
|
||||
Rule::requiredIf(function () {
|
||||
return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']);
|
||||
}),
|
||||
$code = $this->input('payment_means.code');
|
||||
$requirements = PaymentMeans::$payment_means_requirements_codes[$code] ?? [];
|
||||
return in_array('bic_swift', $requirements);
|
||||
}),
|
||||
],
|
||||
'payment_means.iban' => ['bail', 'string', 'min:8', 'max:11',
|
||||
Rule::requiredIf(function () {
|
||||
return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']);
|
||||
}),
|
||||
$code = $this->input('payment_means.code');
|
||||
$requirements = PaymentMeans::$payment_means_requirements_codes[$code] ?? [];
|
||||
return in_array('iban', $requirements);
|
||||
}),
|
||||
],
|
||||
'payment_means.account_name' => ['bail', 'string', 'min:15', 'max:34',
|
||||
'payment_means.account_holder' => ['bail', 'string', 'min:15', 'max:34',
|
||||
Rule::requiredIf(function () {
|
||||
return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']);
|
||||
}),
|
||||
$code = $this->input('payment_means.code');
|
||||
$requirements = PaymentMeans::$payment_means_requirements_codes[$code] ?? [];
|
||||
return in_array('account_holder', $requirements);
|
||||
}),
|
||||
],
|
||||
'payment_means.information' => ['bail', 'sometimes', 'string'],
|
||||
'payment_means.card_type' => ['bail', 'string', 'min:4',
|
||||
Rule::requiredIf(function () {
|
||||
return in_array($this->input('payment_means.code'), ['48']);
|
||||
}),
|
||||
$code = $this->input('payment_means.code');
|
||||
$requirements = PaymentMeans::$payment_means_requirements_codes[$code] ?? [];
|
||||
return in_array('card_type', $requirements);
|
||||
}),
|
||||
],
|
||||
'payment_means.cardholder_name' => ['bail','string', 'min:4',
|
||||
'payment_means.card_holder' => ['bail','string', 'min:4',
|
||||
Rule::requiredIf(function () {
|
||||
return in_array($this->input('payment_means.code'), ['48']);
|
||||
}),
|
||||
$code = $this->input('payment_means.code');
|
||||
$requirements = PaymentMeans::$payment_means_requirements_codes[$code] ?? [];
|
||||
return in_array('card_holder', $requirements);
|
||||
}),
|
||||
],
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
public function prepareForValidation()
|
||||
|
@ -102,6 +102,538 @@ class PaymentMeans implements PaymentMeansInterface
|
||||
'ZZZ' => 'Mutually defined',
|
||||
];
|
||||
|
||||
public static array $payment_means_requirements = [
|
||||
'1' => [], // Instrument not defined
|
||||
'2' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH credit
|
||||
'3' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH debit
|
||||
'4' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand debit reversal
|
||||
'5' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand credit reversal
|
||||
'6' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand credit
|
||||
'7' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand debit
|
||||
'8' => [], // Hold
|
||||
'9' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // National or regional clearing
|
||||
'10' => [], // In cash
|
||||
'11' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings credit reversal
|
||||
'12' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings debit reversal
|
||||
'13' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings credit
|
||||
'14' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings debit
|
||||
'15' => [
|
||||
'PayeeFinancialAccount.Name',
|
||||
'PayeeFinancialAccount.ProprietaryID'
|
||||
], // Bookentry credit
|
||||
'16' => [
|
||||
'PayeeFinancialAccount.Name',
|
||||
'PayeeFinancialAccount.ProprietaryID'
|
||||
], // Bookentry debit
|
||||
'17' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CCD credit
|
||||
'18' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CCD debit
|
||||
'19' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CTP credit
|
||||
'20' => [], // Cheque
|
||||
'21' => [], // Banker's draft
|
||||
'22' => [], // Certified banker's draft
|
||||
'23' => [], // Bank cheque
|
||||
'24' => [], // Bill of exchange awaiting acceptance
|
||||
'25' => [], // Certified cheque
|
||||
'26' => [], // Local cheque
|
||||
'27' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CTP debit
|
||||
'28' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CTX credit
|
||||
'29' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CTX debit
|
||||
'30' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Credit transfer
|
||||
'31' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Debit transfer
|
||||
'32' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CCD+ credit
|
||||
'33' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH demand CCD+ debit
|
||||
'34' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH PPD
|
||||
'35' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CCD credit
|
||||
'36' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CCD debit
|
||||
'37' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CTP credit
|
||||
'38' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CTP debit
|
||||
'39' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CTX credit
|
||||
'40' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CTX debit
|
||||
'41' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CCD+ credit
|
||||
'42' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Payment to bank account
|
||||
'43' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // ACH savings CCD+ debit
|
||||
'44' => [], // Accepted bill of exchange
|
||||
'45' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Referenced home-banking credit transfer
|
||||
'46' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Interbank debit transfer
|
||||
'47' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Home-banking debit transfer
|
||||
'48' => [
|
||||
'PayeeFinancialAccount.NetworkID',
|
||||
'PayeeFinancialAccount.ID'
|
||||
], // Bank card
|
||||
'49' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Direct debit
|
||||
'50' => [
|
||||
'PayeeFinancialAccount.Name'
|
||||
], // Payment by postgiro
|
||||
'51' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // FR, norme 6 97-Telereglement CFONB
|
||||
'52' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Urgent commercial payment
|
||||
'53' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Urgent Treasury Payment
|
||||
'54' => [
|
||||
'CardAccount.NetworkID',
|
||||
'CardAccount.PrimaryAccountNumberID',
|
||||
'CardAccount.HolderName'
|
||||
], // Credit card
|
||||
'55' => [
|
||||
'CardAccount.NetworkID',
|
||||
'CardAccount.PrimaryAccountNumberID',
|
||||
'CardAccount.HolderName'
|
||||
], // Debit card
|
||||
'56' => [
|
||||
'PayeeFinancialAccount.Name'
|
||||
], // Bankgiro
|
||||
'57' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Standing agreement
|
||||
'58' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // SEPA credit transfer
|
||||
'59' => [
|
||||
'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // SEPA direct debit
|
||||
'60' => [], // Promissory note
|
||||
'61' => [], // Promissory note signed by debtor
|
||||
'62' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Promissory note signed by debtor and endorsed by bank
|
||||
'63' => [], // Promissory note signed by debtor and endorsed
|
||||
'64' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Promissory note signed by bank
|
||||
'65' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Promissory note signed by bank and endorsed by another
|
||||
'66' => [], // Promissory note signed by third party
|
||||
'67' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Promissory note signed by third party and endorsed by bank
|
||||
'68' => [
|
||||
'PayeeFinancialAccount.ID'
|
||||
], // Online payment service
|
||||
'69' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Transfer Advice
|
||||
'70' => [], // Bill drawn by creditor on debtor
|
||||
'74' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Bill drawn by creditor on bank
|
||||
'75' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Bill drawn by creditor, endorsed by bank
|
||||
'76' => [
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Bill drawn by creditor on bank and endorsed
|
||||
'77' => [], // Bill drawn by creditor on third party
|
||||
'78' => [], // Bill drawn by creditor on third party, accepted
|
||||
'91' => [], // Not transferable banker's draft
|
||||
'92' => [], // Not transferable local cheque
|
||||
'93' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Reference giro
|
||||
'94' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Urgent giro
|
||||
'95' => [
|
||||
'PayeeFinancialAccount.ID',
|
||||
'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID'
|
||||
], // Free format giro
|
||||
'96' => [], // Requested method not used
|
||||
'97' => [
|
||||
'PayeeFinancialAccount.Name'
|
||||
], // Clearing between partners
|
||||
'ZZZ' => [], // Mutually defined
|
||||
];
|
||||
|
||||
public static array $payment_means_requirements_codes = [
|
||||
'1' => [], // Instrument not defined
|
||||
'2' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH credit
|
||||
'3' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH debit
|
||||
'4' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand debit reversal
|
||||
'5' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand credit reversal
|
||||
'6' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand credit
|
||||
'7' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand debit
|
||||
'8' => [], // Hold
|
||||
'9' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // National or regional clearing
|
||||
'10' => [], // In cash
|
||||
'11' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings credit reversal
|
||||
'12' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings debit reversal
|
||||
'13' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings credit
|
||||
'14' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings debit
|
||||
'15' => [
|
||||
'account_holder',
|
||||
'bsb_sort'
|
||||
], // Bookentry credit
|
||||
'16' => [
|
||||
'account_holder',
|
||||
'bsb_sort'
|
||||
], // Bookentry debit
|
||||
'17' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand CCD credit
|
||||
'18' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand CCD debit
|
||||
'19' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand CTP credit
|
||||
'20' => [], // Cheque
|
||||
'21' => [], // Banker's draft
|
||||
'22' => [], // Certified banker's draft
|
||||
'23' => [], // Bank cheque
|
||||
'24' => [], // Bill of exchange awaiting acceptance
|
||||
'25' => [], // Certified cheque
|
||||
'26' => [], // Local cheque
|
||||
'27' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand CTP debit
|
||||
'28' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand CTX credit
|
||||
'29' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand CTX debit
|
||||
'30' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Credit transfer
|
||||
'31' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Debit transfer
|
||||
'32' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH demand CCD+ credit
|
||||
'33' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH demand CCD+ debit
|
||||
'34' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH PPD
|
||||
'35' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings CCD credit
|
||||
'36' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings CCD debit
|
||||
'37' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings CTP credit
|
||||
'38' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings CTP debit
|
||||
'39' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings CTX credit
|
||||
'40' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings CTX debit
|
||||
'41' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // ACH savings CCD+ credit
|
||||
'42' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Payment to bank account
|
||||
'43' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // ACH savings CCD+ debit
|
||||
'44' => [], // Accepted bill of exchange
|
||||
'45' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Referenced home-banking credit transfer
|
||||
'46' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Interbank debit transfer
|
||||
'47' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Home-banking debit transfer
|
||||
'48' => [
|
||||
'card_type',
|
||||
'iban'
|
||||
], // Bank card
|
||||
'49' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // Direct debit
|
||||
'50' => [
|
||||
'account_holder'
|
||||
], // Payment by postgiro
|
||||
'51' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // FR, norme 6 97-Telereglement CFONB
|
||||
'52' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Urgent commercial payment
|
||||
'53' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Urgent Treasury Payment
|
||||
'54' => [
|
||||
'card_type',
|
||||
'card_number',
|
||||
'card_holder'
|
||||
], // Credit card
|
||||
'55' => [
|
||||
'card_type',
|
||||
'card_number',
|
||||
'card_holder'
|
||||
], // Debit card
|
||||
'56' => [
|
||||
'account_holder'
|
||||
], // Bankgiro
|
||||
'57' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Standing agreement
|
||||
'58' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // SEPA credit transfer
|
||||
'59' => [
|
||||
'payer_bank_account',
|
||||
'bic_swift'
|
||||
], // SEPA direct debit
|
||||
'60' => [], // Promissory note
|
||||
'61' => [], // Promissory note signed by debtor
|
||||
'62' => [
|
||||
'bic_swift'
|
||||
], // Promissory note signed by debtor and endorsed by bank
|
||||
'63' => [], // Promissory note signed by debtor and endorsed
|
||||
'64' => [
|
||||
'bic_swift'
|
||||
], // Promissory note signed by bank
|
||||
'65' => [
|
||||
'bic_swift'
|
||||
], // Promissory note signed by bank and endorsed by another
|
||||
'66' => [], // Promissory note signed by third party
|
||||
'67' => [
|
||||
'bic_swift'
|
||||
], // Promissory note signed by third party and endorsed by bank
|
||||
'68' => [
|
||||
'iban'
|
||||
], // Online payment service
|
||||
'69' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Transfer Advice
|
||||
'70' => [], // Bill drawn by creditor on debtor
|
||||
'74' => [
|
||||
'bic_swift'
|
||||
], // Bill drawn by creditor on bank
|
||||
'75' => [
|
||||
'bic_swift'
|
||||
], // Bill drawn by creditor, endorsed by bank
|
||||
'76' => [
|
||||
'bic_swift'
|
||||
], // Bill drawn by creditor on bank and endorsed
|
||||
'77' => [], // Bill drawn by creditor on third party
|
||||
'78' => [], // Bill drawn by creditor on third party, accepted
|
||||
'91' => [], // Not transferable banker's draft
|
||||
'92' => [], // Not transferable local cheque
|
||||
'93' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Reference giro
|
||||
'94' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Urgent giro
|
||||
'95' => [
|
||||
'iban',
|
||||
'bic_swift'
|
||||
], // Free format giro
|
||||
'96' => [], // Requested method not used
|
||||
'97' => [
|
||||
'account_holder'
|
||||
], // Clearing between partners
|
||||
'ZZZ' => [], // Mutually defined
|
||||
];
|
||||
|
||||
public static array $payment_means_field_map = [
|
||||
'iban' => 'PayeeFinancialAccount.ID',
|
||||
'bic_swift' => 'PayeeFinancialAccount.FinancialInstitutionBranch.FinancialInstitution.ID',
|
||||
'payer_bank_account' => 'PaymentMandate.PayerFinancialAccount.ID',
|
||||
'account_holder' => 'PayeeFinancialAccount.Name',
|
||||
'bsb_sort' => 'PayeeFinancialAccount.ProprietaryID',
|
||||
'card_type' => 'CardAccount.NetworkID',
|
||||
'card_number' => 'CardAccount.PrimaryAccountNumberID',
|
||||
'card_holder' => 'CardAccount.HolderName'
|
||||
];
|
||||
|
||||
|
||||
public string $code = '1';
|
||||
|
||||
public ?string $information = null;
|
||||
@ -197,6 +729,6 @@ class PaymentMeans implements PaymentMeansInterface
|
||||
|
||||
public static function getPaymentMeansCodelist()
|
||||
{
|
||||
return array_keys(self::$payment_means_codelist);
|
||||
return array_keys(self::$payment_means_requirements_codes);
|
||||
}
|
||||
}
|
||||
|
@ -5403,8 +5403,19 @@ $lang = array(
|
||||
'payment_updated' => 'Payment Updated',
|
||||
'search_placeholder' => 'Find invoices, clients, and more',
|
||||
'invalid_vat_number' => "The VAT number is not valid for the selected country. Format should be Country Code followed by number only ie, DE123456789",
|
||||
'acts_as_sender' => 'Acts as Sender',
|
||||
'acts_as_receiver' => 'Acts as Receiver',
|
||||
'acts_as_sender' => 'Send E Documents',
|
||||
'acts_as_receiver' => 'Receive E Documents',
|
||||
'iban_help' => 'The full IBAN number',
|
||||
'bic_swift' => 'BIC/Swift code',
|
||||
'bic_swift_help' => 'The Bank identifer',
|
||||
'payer_bank_account' => 'Payer Bank Account Number',
|
||||
'payer_bank_account_help' => 'The bank account number of the payer',
|
||||
'bsb_sort' => 'BSB / Sort Code',
|
||||
'bsb_sort_help' => 'Bank Branch Code',
|
||||
'card_type' => 'Card Type',
|
||||
'card_type_help' => 'ie. VISA, AMEX',
|
||||
'card_number_help' => 'last 4 digits only',
|
||||
'card_holder' => 'Card Holder Name',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -0,0 +1,183 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\EInvoice\RequestValidation;
|
||||
|
||||
use App\Http\Requests\EInvoice\UpdateEInvoiceConfiguration;
|
||||
use Illuminate\Routing\Middleware\ThrottleRequests;
|
||||
use Tests\TestCase;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class UpdateEInvoiceConfigurationTest extends TestCase
|
||||
{
|
||||
protected UpdateEInvoiceConfiguration $request;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->withoutMiddleware(
|
||||
ThrottleRequests::class
|
||||
);
|
||||
|
||||
$this->request = new UpdateEInvoiceConfiguration();
|
||||
}
|
||||
|
||||
public function testConfigValidationFails()
|
||||
{
|
||||
$data = [
|
||||
'entddity' => 'invoice',
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
}
|
||||
|
||||
public function testConfigValidation()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testConfigValidationInvalidcode()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => 'invalidcodehere'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
}
|
||||
|
||||
public function testValidatesPaymentMeansForBankTransfer()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '30',
|
||||
'iban' => '12345678',
|
||||
'bic_swift' => 'DEUTDEFF',
|
||||
'account_holder' => 'John Doe Company Limited'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testValidatesPaymentMeansForCardPayment()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '48',
|
||||
'card_type' => 'VISA',
|
||||
'iban' => '12345678'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testValidatesPaymentMeansForCreditCard()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '54',
|
||||
'card_type' => 'VISA',
|
||||
'card_number' => '************1234',
|
||||
'card_holder' => 'John Doe'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testFailsValidationWhenRequiredFieldsAreMissing()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '30',
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertTrue($validator->errors()->has('payment_means.iban'));
|
||||
$this->assertTrue($validator->errors()->has('payment_means.bic_swift'));
|
||||
}
|
||||
|
||||
public function testFailsValidationWithInvalidPaymentMeansCode()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '999',
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertTrue($validator->errors()->has('payment_means.code'));
|
||||
}
|
||||
|
||||
public function testValidatesPaymentMeansForDirectDebit()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '49',
|
||||
'payer_bank_account' => '12345678',
|
||||
'bic_swift' => 'DEUTDEFF'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testValidatesPaymentMeansForBookEntry()
|
||||
{
|
||||
$data = [
|
||||
'entity' => 'invoice',
|
||||
'payment_means' => [
|
||||
'code' => '15',
|
||||
'account_holder' => 'John Doe Company Limited',
|
||||
'bsb_sort' => '123456'
|
||||
]
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@ class AddTaxIdentifierRequestTest extends TestCase
|
||||
{
|
||||
protected AddTaxIdentifierRequest $request;
|
||||
|
||||
private array $vat_regex_patterns = [
|
||||
private array $vat_regex_patterns = [
|
||||
'DE' => '/^DE\d{9}$/',
|
||||
'AT' => '/^ATU\d{8}$/',
|
||||
'BE' => '/^BE0\d{9}$/',
|
||||
@ -48,20 +48,26 @@ class AddTaxIdentifierRequestTest extends TestCase
|
||||
|
||||
public function testValidInput()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'country' => 'DE',
|
||||
'vat_number' => 'DE123456789',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testInvalidCountry()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'country' => 'US',
|
||||
'vat_number' => 'DE123456789',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertArrayHasKey('country', $validator->errors()->toArray());
|
||||
@ -73,24 +79,9 @@ class AddTaxIdentifierRequestTest extends TestCase
|
||||
'country' => 'DE',
|
||||
'vat_number' => 'DE12345', // Too short
|
||||
];
|
||||
|
||||
$rules = [
|
||||
'country' => ['required', 'bail'],
|
||||
'vat_number' => [
|
||||
'required',
|
||||
'string',
|
||||
'bail',
|
||||
function ($attribute, $value, $fail) use ($data){
|
||||
if ( isset($this->vat_regex_patterns[$data['country']])) {
|
||||
if (!preg_match($this->vat_regex_patterns[$data['country']], $value)) {
|
||||
$fail(ctrans('texts.invalid_vat_number'));
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
];
|
||||
|
||||
$validator = Validator::make($data, $rules);
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertArrayHasKey('vat_number', $validator->errors()->toArray());
|
||||
@ -98,9 +89,12 @@ class AddTaxIdentifierRequestTest extends TestCase
|
||||
|
||||
public function testMissingCountry()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'vat_number' => 'DE123456789',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertArrayHasKey('country', $validator->errors()->toArray());
|
||||
@ -108,9 +102,12 @@ class AddTaxIdentifierRequestTest extends TestCase
|
||||
|
||||
public function testMissingVatNumber()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'country' => 'DE',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertArrayHasKey('vat_number', $validator->errors()->toArray());
|
||||
|
@ -5,8 +5,6 @@ namespace Tests\Feature\EInvoice\Validation;
|
||||
use Tests\TestCase;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Requests\EInvoice\Peppol\StoreEntityRequest;
|
||||
use App\Models\Country;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class CreateRequestTest extends TestCase
|
||||
{
|
||||
@ -20,36 +18,40 @@ class CreateRequestTest extends TestCase
|
||||
|
||||
public function testValidInput()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'party_name' => 'Test Company',
|
||||
'line1' => '123 Test St',
|
||||
'city' => 'Test City',
|
||||
'country' => 'DE', // Assuming 1 is the ID for Germany
|
||||
'country' => 'DE',
|
||||
'zip' => '12345',
|
||||
'county' => 'Test County',
|
||||
'acts_as_sender' => true,
|
||||
'acts_as_receiver' => true,
|
||||
'tenant_id' => 'testcompanykey',
|
||||
];
|
||||
|
||||
], $this->request->rules());
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testInvalidCountry()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'party_name' => 'Test Company',
|
||||
'line1' => '123 Test St',
|
||||
'city' => 'Test City',
|
||||
'country' => 999, // Invalid country ID
|
||||
'country' => 999,
|
||||
'zip' => '12345',
|
||||
'county' => 'Test County',
|
||||
'acts_as_sender' => true,
|
||||
'acts_as_receiver' => true,
|
||||
'tenant_id' => 'testcompanykey',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$this->assertArrayHasKey('country', $validator->errors()->toArray());
|
||||
@ -57,9 +59,12 @@ class CreateRequestTest extends TestCase
|
||||
|
||||
public function testMissingRequiredFields()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'line2' => 'Optional line',
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertFalse($validator->passes());
|
||||
$errors = $validator->errors()->toArray();
|
||||
@ -73,7 +78,7 @@ class CreateRequestTest extends TestCase
|
||||
|
||||
public function testOptionalLine2()
|
||||
{
|
||||
$validator = Validator::make([
|
||||
$data = [
|
||||
'party_name' => 'Test Company',
|
||||
'line1' => '123 Test St',
|
||||
'line2' => 'Optional line',
|
||||
@ -81,20 +86,25 @@ class CreateRequestTest extends TestCase
|
||||
'country' => 'AT',
|
||||
'zip' => '12345',
|
||||
'county' => 'Test County',
|
||||
'tenant_id' => 'testcompanykey',
|
||||
'tenant_id' => 'testcompanykey',
|
||||
'acts_as_sender' => true,
|
||||
'acts_as_receiver' => true,
|
||||
], $this->request->rules());
|
||||
];
|
||||
|
||||
$this->request->initialize($data);
|
||||
$validator = Validator::make($data, $this->request->rules());
|
||||
|
||||
$this->assertTrue($validator->passes());
|
||||
}
|
||||
|
||||
public function testCountryPreparation()
|
||||
{
|
||||
$request = new StoreEntityRequest([
|
||||
'country' => '276', // Assuming 1 is the ID for Germany
|
||||
]);
|
||||
$data = [
|
||||
'country' => '276', // Numeric code for Germany
|
||||
];
|
||||
|
||||
$request = new StoreEntityRequest();
|
||||
$request->initialize($data);
|
||||
$request->prepareForValidation();
|
||||
|
||||
$this->assertEquals('DE', $request->input('country'));
|
||||
|
Loading…
Reference in New Issue
Block a user