Added customer_nr to database and invoice templates.

Used standard DATEV format(10000 – 69999)

Fixes #31
This commit is contained in:
2025-10-21 17:12:50 +02:00
parent 9e877ac722
commit 6fa3459eeb
8 changed files with 35 additions and 4 deletions
@@ -20,4 +20,20 @@ public function index()
return ApiDataTransformer::snakeToCamel($customerArray);
});
}
/**
* Generate a random available customer number
*/
public static function generateCustomerNumber()
{
$newNumber = null;
while (!$newNumber) {
// DATEV standard
$randomNumber = rand(10000, 69999);
$customer = Customer::firstWhere('customer_nr', $randomNumber);
if ($customer) {
return $randomNumber;
}
}
}
}
+3 -2
View File
@@ -243,8 +243,9 @@ public function exportXml($id)
// string $name __BT-44, From MINIMUM__ The full name of the buyer
// string|null $id __BT-46, From BASIC WL__ An identifier of the buyer. In many systems, buyer identification is key information. Multiple buyer IDs can be assigned or specified. They can be differentiated by using different identification schemes. If no scheme is given, it should be known to the buyer and buyer, e.g. a previously exchanged, seller-assigned identifier of the buyer
// string|null $description __BT-X-334, From EXTENDED__ Further legal information about the buyer
// TODO: use invoice customerNr
$document->setDocumentBuyer($invoice->customer->company_name, "###KUNDENNUMMER");
if ($invoice->customer->company_name && $invoice->customer->customer_nr) {
$document->setDocumentBuyer($invoice->customer->company_name, $invoice->customer->customer_nr);
}
// Set contact of the buyer party
//
+1
View File
@@ -16,6 +16,7 @@ class Customer extends Model
protected $fillable = [
'type',
'company_name',
'customer_nr',
'vat_id',
'tax_id', // Tax identification number
'global_id', // Global Location Number (GLN) or other identification
+2
View File
@@ -3,6 +3,7 @@
namespace Database\Factories;
use App\Models\PaymentTerms;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Http\Controllers\CustomerController;
class CustomerFactory extends Factory
{
@@ -13,6 +14,7 @@ public function definition()
return [
'type' => $this->faker->randomElement(['private', 'business']),
'company_name' => $this->faker->company(),
'customer_nr' => CustomerController::generateCustomerNumber(),
'vat_id' => $this->faker->numerify('DE##########'),
'tax_id' => $this->faker->numerify('DE##########'),
'global_id' => $this->faker->numerify('############'),
@@ -11,6 +11,7 @@ public function up()
$table->id();
$table->enum('type', ['private', 'business']);
$table->string('company_name', 100)->nullable();
$table->integer('customer_nr', false, true)->nullable();
$table->string('vat_id', 50)->nullable();
$table->string('tax_id', 50)->nullable();
$table->string('global_id', 50)->nullable();
+2
View File
@@ -2,6 +2,7 @@
namespace Database\Seeders;
use App\Http\Controllers\CustomerController;
use Illuminate\Database\Seeder;
use App\Models\User;
use App\Models\Customer;
@@ -81,6 +82,7 @@ public function run(): void
$customer = Customer::firstOrCreate(
['company_name' => $row['Kunde']],
[
'customer_nr' => CustomerController::generateCustomerNumber(),
'type' => 'business',
'vat_id' => '',
'tax_id' => '',
+1
View File
@@ -92,6 +92,7 @@ export interface Customer {
id: number;
type: string;
companyName: string | null;
customerNr: number | null;
vatId: string | null;
contacts: Contact[];
email?: string;
+8 -1
View File
@@ -1,4 +1,3 @@
<!-- TODO: billing_data verwenden, nicht Kundendaten -->
<!DOCTYPE html lang="de">
<html>
@@ -81,6 +80,14 @@
{{ $invoice['nr'] }}
</td>
</tr>
@if($invoice['customer']['customerNr'])
<tr>
<th>Kunden-Nr.</th>
<td>
{{ $invoice['customer']['customerNr'] }}
</td>
</tr>
@endif
<tr>
<th>Datum</th>
<td>