186 lines
11 KiB
PHP
186 lines
11 KiB
PHP
<?php
|
|
|
|
function getMockData() {
|
|
$mockData = [
|
|
[
|
|
'id' => 1, 'invoiceNumber' => 'RE-2025-001', 'customerName' => 'Musterfirma GmbH', 'billingAddressId' => 1,
|
|
'invoiceDate' => strtotime('2025-09-11'), 'dueDate' => strtotime('2025-09-25'), 'totalAmount' => 948.00, 'status' => 'paid',
|
|
'positions' => json_encode([
|
|
['product_name' => 'IT-Support-Stunden', 'product_info' => 'Remote-Hilfe für Mitarbeiter', 'start_date' => '2025-09-10', 'end_date' => '2025-09-10', 'amount' => 2, 'price' => 120.00, 'vatrate' => 20],
|
|
['product_name' => 'Netzwerk-Switch 24-Port', 'product_info' => 'Modell: XYZ-24G', 'start_date' => '2025-09-10', 'end_date' => '2025-09-10', 'amount' => 1, 'price' => 550.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Vielen Dank für Ihren Auftrag.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 2, 'invoiceNumber' => 'RE-2025-002', 'customerName' => 'Beispiel AG', 'billingAddressId' => 2,
|
|
'invoiceDate' => strtotime('2025-09-14'), 'dueDate' => strtotime('2025-09-28'), 'totalAmount' => 720.00, 'status' => 'sent',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Beratung Digitalisierungsstrategie', 'product_info' => 'Workshop am 05.09.2025', 'start_date' => '2025-09-05', 'end_date' => '2025-09-05', 'amount' => 4, 'price' => 150.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Wir freuen uns auf eine weiterhin gute Zusammenarbeit.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 3, 'invoiceNumber' => 'RE-2025-003', 'customerName' => 'John Doe Services', 'billingAddressId' => 3,
|
|
'invoiceDate' => strtotime('2025-09-16'), 'dueDate' => strtotime('2025-09-30'), 'totalAmount' => 912.00, 'status' => 'draft',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Kabelverlegung LWL', 'product_info' => 'Inhouse-Verkabelung Bürogebäude', 'start_date' => '2025-09-15', 'end_date' => '2025-09-15', 'amount' => 8, 'price' => 85.00, 'vatrate' => 20],
|
|
['product_name' => 'LWL-Kabel 8 Fasern', 'product_info' => 'Pro Meter', 'start_date' => '2025-09-15', 'end_date' => '2025-09-15', 'amount' => 100, 'price' => 0.80, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Bei Fragen stehen wir Ihnen gerne zur Verfügung.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 4, 'invoiceNumber' => 'RE-2025-004', 'customerName' => 'Bau & Co KG', 'billingAddressId' => 4,
|
|
'invoiceDate' => strtotime('2025-09-06'), 'dueDate' => strtotime('2025-09-20'), 'totalAmount' => 1890.00, 'status' => 'paid',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Netzwerk-Grundinstallation Baustelle', 'product_info' => 'Containerdorf Einrichtung', 'start_date' => '2025-09-02', 'end_date' => '2025-09-02', 'amount' => 1, 'price' => 1200.00, 'vatrate' => 20],
|
|
['product_name' => 'Stunden Elektriker', 'product_info' => 'Anpassungen Verteilerkasten', 'start_date' => '2025-09-02', 'end_date' => '2025-09-02', 'amount' => 5, 'price' => 75.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Vielen Dank für Ihren Auftrag.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 5, 'invoiceNumber' => 'RE-2025-005', 'customerName' => 'Creative Solutions', 'billingAddressId' => 5,
|
|
'invoiceDate' => strtotime('2025-09-15'), 'dueDate' => strtotime('2025-09-29'), 'totalAmount' => 1920.00, 'status' => 'sent',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Web-Entwicklung', 'product_info' => 'Umsetzung Landingpage "Herbst-Aktion"', 'start_date' => '2025-09-01', 'end_date' => '2025-09-12', 'amount' => 10, 'price' => 110.00, 'vatrate' => 20],
|
|
['product_name' => 'Domain-Registrierung (.at)', 'product_info' => 'herbst-aktion.at', 'start_date' => '2025-09-01', 'end_date' => '2026-08-31', 'amount' => 1, 'price' => 500.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Wir freuen uns auf eine weiterhin gute Zusammenarbeit.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 6, 'invoiceNumber' => 'RE-2025-006', 'customerName' => 'Logistik Express', 'billingAddressId' => 6,
|
|
'invoiceDate' => strtotime('2025-08-28'), 'dueDate' => strtotime('2025-09-11'), 'totalAmount' => 3432.00, 'status' => 'paid',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Software-Lizenz WMS Pro', 'product_info' => 'Jahreslizenz für 10 User', 'start_date' => '2025-09-01', 'end_date' => '2026-08-31', 'amount' => 1, 'price' => 2500.00, 'vatrate' => 20],
|
|
['product_name' => 'Mitarbeiterschulung WMS', 'product_info' => 'Vor Ort am 27.08.2025', 'start_date' => '2025-08-27', 'end_date' => '2025-08-27', 'amount' => 4, 'price' => 90.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Vielen Dank für Ihren Auftrag.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 7, 'invoiceNumber' => 'RE-2025-007', 'customerName' => 'Gastro Profi', 'billingAddressId' => 7,
|
|
'invoiceDate' => strtotime('2025-09-10'), 'dueDate' => strtotime('2025-09-24'), 'totalAmount' => 2577.60, 'status' => 'draft',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Kassensystem "GastroTouch"', 'product_info' => '2x Terminal, 1x Bondrucker', 'start_date' => '2025-09-09', 'end_date' => '2025-09-09', 'amount' => 2, 'price' => 899.00, 'vatrate' => 20],
|
|
['product_name' => 'Installationspauschale', 'product_info' => 'Inkl. Einschulung', 'start_date' => '2025-09-09', 'end_date' => '2025-09-09', 'amount' => 1, 'price' => 350.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Bei Fragen stehen wir Ihnen gerne zur Verfügung.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 8, 'invoiceNumber' => 'RE-2025-008', 'customerName' => 'Sicherheitsdienst Huber', 'billingAddressId' => 8,
|
|
'invoiceDate' => strtotime('2025-09-01'), 'dueDate' => strtotime('2025-09-15'), 'totalAmount' => 1782.00, 'status' => 'sent',
|
|
'positions' => json_encode([
|
|
['product_name' => 'IP Kamera 4K Dome', 'product_info' => 'Modell SEC-4K-D', 'start_date' => '2025-08-29', 'end_date' => '2025-08-29', 'amount' => 8, 'price' => 180.00, 'vatrate' => 20],
|
|
['product_name' => 'Monatliche Wartungspauschale', 'product_info' => 'September 2025', 'start_date' => '2025-09-01', 'end_date' => '2025-09-30', 'amount' => 1, 'price' => 45.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Wir freuen uns auf eine weiterhin gute Zusammenarbeit.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 9, 'invoiceNumber' => 'RE-2025-009', 'customerName' => 'Praxis Dr. Eder', 'billingAddressId' => 9,
|
|
'invoiceDate' => strtotime('2025-09-12'), 'dueDate' => strtotime('2025-09-26'), 'totalAmount' => 3090.00, 'status' => 'draft',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Arbeitsstunden IT-Migration', 'product_info' => 'Serverumzug und Client-Setup', 'start_date' => '2025-09-11', 'end_date' => '2025-09-11', 'amount' => 5, 'price' => 95.00, 'vatrate' => 20],
|
|
['product_name' => 'Server-Hardware "MedServ"', 'product_info' => 'Spez. für Arztpraxen', 'start_date' => '2025-09-11', 'end_date' => '2025-09-11', 'amount' => 1, 'price' => 1800.00, 'vatrate' => 20],
|
|
['product_name' => 'Datensicherungslösung "CloudSafe"', 'product_info' => 'Einrichtungspauschale', 'start_date' => '2025-09-11', 'end_date' => '2025-09-11', 'amount' => 1, 'price' => 300.00, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Bei Fragen stehen wir Ihnen gerne zur Verfügung.', 'taxText' => ''
|
|
],
|
|
[
|
|
'id' => 10, 'invoiceNumber' => 'RE-2025-010', 'customerName' => 'Architekturbüro Planweit', 'billingAddressId' => 10,
|
|
'invoiceDate' => strtotime('2025-09-08'), 'dueDate' => strtotime('2025-09-22'), 'totalAmount' => 357.60, 'status' => 'paid',
|
|
'positions' => json_encode([
|
|
['product_name' => 'Plotter Service', 'product_info' => 'Wartung und Reinigung', 'start_date' => '2025-09-04', 'end_date' => '2025-09-04', 'amount' => 1, 'price' => 250.00, 'vatrate' => 20],
|
|
['product_name' => 'Netzwerkkabel Cat7', 'product_info' => 'Pro Meter', 'start_date' => '2025-09-04', 'end_date' => '2025-09-04', 'amount' => 40, 'price' => 1.20, 'vatrate' => 20],
|
|
]),
|
|
'closingText' => 'Vielen Dank für Ihren Auftrag.', 'taxText' => ''
|
|
],
|
|
];
|
|
|
|
return $mockData;
|
|
}
|
|
|
|
|
|
class ManualInvoiceModel extends TTCrudBaseModel {
|
|
public int $id;
|
|
public ?string $invoiceNumber;
|
|
public ?int $invoiceDate;
|
|
public ?int $dueDate;
|
|
public int $billingAddressId;
|
|
public ?string $customerName;
|
|
public ?float $totalAmount;
|
|
public string $status;
|
|
public string $positions;
|
|
public string $closingText;
|
|
public string $taxText;
|
|
|
|
private static function applyFilter(array $data, array $filter): array {
|
|
if (empty($filter)) {
|
|
return $data;
|
|
}
|
|
return array_filter($data, function ($row) use ($filter) {
|
|
foreach ($filter as $key => $value) {
|
|
if (!isset($row[$key]) || empty($value)) {
|
|
continue;
|
|
}
|
|
if (is_array($value)) { // Handle date ranges
|
|
if (isset($value['from']) && $row[$key] < $value['from']) return false;
|
|
if (isset($value['to']) && $row[$key] > $value['to']) return false;
|
|
} else if (is_array($row[$key])) {
|
|
if (!in_array($value, $row[$key])) return false;
|
|
} else if (stripos($row[$key], $value) === false) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
public static function getAll($filter = [], $limit = null, $offset = 0, $order = ["key" => null]): array
|
|
|
|
{
|
|
$mockData = getMockData();
|
|
$filteredData = self::applyFilter($mockData, $filter);
|
|
|
|
if ($order['key'] !== null) {
|
|
usort($filteredData, function ($a, $b) use ($order) {
|
|
if ($a[$order['key']] == $b[$order['key']]) return 0;
|
|
if ($order['order'] === 'ASC') {
|
|
return $a[$order['key']] < $b[$order['key']] ? -1 : 1;
|
|
} else {
|
|
return $a[$order['key']] > $b[$order['key']] ? -1 : 1;
|
|
}
|
|
});
|
|
}
|
|
|
|
if ($limit !== null) {
|
|
return array_slice($filteredData, $offset, $limit);
|
|
}
|
|
return $filteredData;
|
|
}
|
|
|
|
public static function count($filter = []): int {
|
|
$mockData = getMockData();
|
|
return count(self::applyFilter($mockData, $filter));
|
|
}
|
|
|
|
public static function get($id) {
|
|
$mockData = getMockData();
|
|
foreach ($mockData as $row)
|
|
if ($row['id'] == $id)
|
|
return new self($row);
|
|
return null;
|
|
}
|
|
|
|
public static function create($data) {
|
|
error_log("ManualInvoiceModel::create called with: " . json_encode($data));
|
|
return time();
|
|
}
|
|
|
|
public static function update($data) {
|
|
error_log("ManualInvoiceModel::update called with: " . json_encode($data));
|
|
return 1;
|
|
}
|
|
|
|
public static function delete($id) {
|
|
error_log("ManualInvoiceModel::delete called with ID: " . $id);
|
|
return 1;
|
|
}
|
|
} |