gitea init

This commit is contained in:
skryper
2025-10-08 21:28:30 +04:00
commit d4651a423d
2518 changed files with 522832 additions and 0 deletions
@@ -0,0 +1,26 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
InvoicesModel::setDb($pdo);
// ინვოისის ნომრის გენერაცია
$generatedInvoiceNumber = InvoicesModel::generateNextInvoiceNumber();
// კლიენტების სია dropdown-სთვის
$clients = InvoicesModel::getClientsList();
// პროდუქტების სია
$products = InvoicesModel::getProductList();
require_once __DIR__ . '/../../views/invoices/create.php';
?>
@@ -0,0 +1,29 @@
<?php
// კონტროლერი: ინვოისის წაშლა
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
use App\Config;
// ბაზასთან დაკავშირება
InvoicesModel::setDb($pdo);
// GET ID გადამოწმება
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
exit('არასწორი ID.');
}
$id = (int)$_GET['id'];
// წაშლა
InvoicesModel::deleteInvoice($id);
// გადამისამართება ინვოისების სიაზე
require_once __DIR__ . '/../../views/invoices/list.php';
@@ -0,0 +1,31 @@
<?php
// 📄 რედაქტირება
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
InvoicesModel::setDb($pdo);
// ID შემოწმება
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
exit('არასწორი ID.');
}
$id = (int)$_GET['id'];
// ინვოისის წამოღება
$invoice = InvoicesModel::getInvoiceById($id);
if (!$invoice) {
exit('ინვოისი ვერ მოიძებნა.');
}
// სელექტისთვის საჭირო მონაცემები
$clients = InvoicesModel::getClientsList();
$products = InvoicesModel::getProductList();
// ვიუ ჩატვირთვა
require_once __DIR__ . '/../../views/invoices/edit.php';
@@ -0,0 +1,54 @@
<?php
// 📄 ინვოისის PDF გენერაცია - Controller
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../vendor/autoload.php';
use Dompdf\Dompdf;
use Dompdf\Options;
use App\Config;
InvoicesModel::setDb($pdo);
// 🧾 ინვოისის ID გადმოსვლა GET-ით
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
exit('არასწორი ID');
}
$id = (int)$_GET['id'];
// 🧾 ინვოისის მონაცემების წამოღება
$invoice = InvoicesModel::getInvoiceById($id);
if (!$invoice) {
exit('ინვოისი ვერ მოიძებნა.');
}
$client_name = $invoice['first_name'] . ' ' . $invoice['last_name'];
// 📄 PDF კონფიგურაცია
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);
// 📄 შაბლონის HTML ჩატვირთვა
ob_start();
require_once realpath(Config::basePath() . '/admin/modules/billing/models/invoices/invoice_template.php');
$html = ob_get_clean();
$dompdf->loadHtml($html, 'UTF-8');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
// 📄 PDF-ის შენახვა დროებით
$pdfOutput = $dompdf->output();
$pdfPath = '/tmp/invoice_' . $invoice['id'] . '.pdf';
file_put_contents($pdfPath, $pdfOutput);
// გადამისამართება ან ჩამოტვირთვა შეგიძლიათ დაამატოთ აქ
@@ -0,0 +1,19 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
use App\Config;
// ვუკავშირებთ ბაზას მოდელს
InvoicesModel::setDb($pdo);
// ინვოისების წამოღება
$invoices = InvoicesModel::getAllInvoices();
// ვიუს ჩატვირთვა
require_once __DIR__ . '/../../views/invoices/list.php';
@@ -0,0 +1,104 @@
<!-- გაგზავნის ლოგიკა -->
<?php
// ინვოისის გაგზავნა ელფოსტაზე PDF-ით
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
require_once __DIR__ . '/../../../../libs/phpmailer/src/PHPMailer.php';
require_once __DIR__ . '/../../../../libs/phpmailer/src/SMTP.php';
require_once __DIR__ . '/../../../../libs/phpmailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
InvoicesModel::setDb($pdo);
// use Dompdf\Dompdf;
// use Dompdf\Options;
// $options = new Options();
// $options->set('isRemoteEnabled', true);
// // ️➡️ უთხარი Dompdf-ს სად არის შენი შრიფტი
// $options->setChroot(__DIR__ . '/../../'); // აქედან იმუშავებს relative path-ებით
// $options->set('defaultFont', 'bpg_glaho');
// $dompdf = new Dompdf($options);
InvoicesModel::setDb($pdo);
// 1. აიდი
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if (!$id) {
exit("არასწორი ინვოისის ID.");
}
// 2. მოიტანე ინვოისი და ნივთები
$invoice = InvoicesModel::getInvoiceWithItems($id);
if (!$invoice) {
exit("ინვოისი ვერ მოიძებნა.");
}
// 3. გენერაცია PDF ფაილის
$pdfPath = InvoicesModel::generateInvoicePDF($invoice);
// Email გაგზავნა
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'vps-7146dd3a.vps.ovh.ca'; // შეცვალე
$mail->SMTPAuth = true;
$mail->Username = 'noreply@selfhosting.ge'; // შეცვალე
$mail->Password = 'FSZtTIIIlubk'; // შეცვალე
$mail->SMTPSecure = 'ssl'; // ან ssl
$mail->Port = 465; // ან 465
$mail->setFrom('noreply@selfhosting.ge', 'ბილინგ სერვისი');
$mail->addAddress($invoice['email'], $invoice['first_name'] . ' ' . $invoice['last_name']);
$mail->CharSet = 'UTF-8'; // ✅ ეს არის მთავარი!
$mail->Encoding = 'base64'; // ხშირად დაეხმარება UTF-8-ის სწორ გადაცემას
$mail->isHTML(true);
$mail->Subject = "ინვოისი #" . $invoice['invoice_number'];
$mail->Body = "
გამარჯობა {$invoice['first_name']},<br><br>
თქვენთვის შემუშავებულია ახალი ინვოისი ჯამური თანხით <strong>{$invoice['total_amount']} ₾</strong>.<br>
გადახდის ვადა: {$invoice['due_date']}<br><br>
იხილეთ დეტალურად: ინვოისის სანახავად იხილეთ მიმაგრებული ფაილი<br><br>
მადლობა თანამშრომლობისთვის.
";
$invoice = InvoicesModel::getInvoiceWithClientById($id);
$invoice['company_name'] = $invoice['client_company_name'];
$invoice['vat_number'] = $invoice['client_vat_number'];
$invoice['address1'] = $invoice['client_address1'];
$client_name = $invoice['first_name'] . ' ' . $invoice['last_name'];
// ინვოისის HTML
$html = InvoicesModel::renderInvoiceHTML($invoice);
$mail->addAttachment($pdfPath, 'Invoice_' . $invoice['invoice_number'] . '.pdf');
$mail->send();
// ✅ წარმატებული გაგზავნის შემდეგ
header("Location: dashboard.php?module=billing&submodule=invoices&action=view&id={$invoice['id']}&sent=1");
exit;
} catch (Exception $e) {
echo "შეცდომა გაგზავნისას: {$mail->ErrorInfo}";
}
?>
@@ -0,0 +1,50 @@
<?php
// 📬 გადახდის შეხსენების გაგზავნა
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require '../../libs/phpmailer/src/PHPMailer.php';
require '../../libs/phpmailer/src/SMTP.php';
require '../../libs/phpmailer/src/Exception.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
foreach ($invoices as $invoice) {
$mail = new PHPMailer(true);
try {
// SMTP პარამეტრები
$mail->isSMTP();
$mail->Host = 'vps-7146dd3a.vps.ovh.ca';
$mail->SMTPAuth = true;
$mail->Username = 'levan@arabuli.info';
$mail->Password = 'Aqsxcs@1211';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$clientName = $invoice['first_name'] . ' ' . $invoice['last_name'];
$mail->setFrom('levan@arabuli.info', 'Billing System');
$mail->addAddress($invoice['email'], $clientName);
$mail->CharSet = 'UTF-8';
$mail->isHTML(true);
$mail->Subject = "გადახდის შეხსენება ინვოისზე #{$invoice['invoice_number']}";
$mail->Body = "
გამარჯობა {$clientName},<br><br>
გთხოვთ გადაიხადოთ ინვოისი #{$invoice['invoice_number']} <strong>{$invoice['total_amount']} ₾</strong><br>
გადახდის ბოლო ვადაა: <strong>{$invoice['due_date']}</strong><br><br>
იხილეთ ინვოისი: <a href='https://yourdomain.com/dashboard.php?module=billing&submodule=invoices&action=view&id={$invoice['id']}'>იხილეთ ინვოისი</a>
";
$mail->send();
echo "✅ შეხსენება გაიგზავნა {$clientName} ({$invoice['email']})<br>";
} catch (Exception $e) {
echo "❌ შეცდომა: {$mail->ErrorInfo}<br>";
}
}
@@ -0,0 +1,36 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
InvoicesModel::setDb($pdo);
// POST მონაცემების დამუშავება
$data = $_POST;
$data['recurring'] = isset($data['recurring']) ? 1 : 0;
// სტატუსის ვალიდაცია
if (!InvoicesModel::isValidStatus($data['status'])) {
die('არასწორი სტატუსის მნიშვნელობა');
}
// 🔢 ინვოისის ნომრის გენერაცია
if (empty($data['invoice_number'])) {
$data['invoice_number'] = InvoicesModel::generateInvoiceNumber();
}
// დუბლიკატის შემოწმება
if (InvoicesModel::isDuplicateInvoiceNumber($data['invoice_number'])) {
die('ინვოისის ნომერი უკვე გამოიყენება!');
}
// ჩასმა მოდელის მეშვეობით
$invoice_id = InvoicesModel::createInvoiceWithItems($data);
// გადამისამართება
header("Location: dashboard.php?module=billing&submodule=invoices&action=view&id=" . $invoice_id);
exit;
@@ -0,0 +1,28 @@
<?php
// ⚙️ ინვოისის განახლება
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
InvoicesModel::setDb($pdo);
// 📨 მონაცემების მიღება
if (!isset($_POST['id']) || !is_numeric($_POST['id'])) {
exit('არასწორი ID.');
}
$id = (int)$_POST['id'];
$data = $_POST;
// ინვოისის განახლება
InvoicesModel::updateInvoice($id, $data);
// ↪️ გადამისამართება
header("Location: dashboard.php?module=billing&submodule=invoices&action=view&id=$id");
exit;
@@ -0,0 +1,37 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/invoicesmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
use App\Config;
// ბაზასთან დაკავშირება
InvoicesModel::setDb($pdo);
// ID შემოწმება
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
echo "არასწორი ID.";
exit;
}
$id = (int) $_GET['id'];
$showAlert = isset($_GET['sent']) && $_GET['sent'] == 1;
// ინვოისის წამოღება
$invoice = InvoicesModel::getInvoiceWithClient($id);
if (!$invoice) {
echo "ინვოისი ვერ მოიძებნა.";
exit;
}
// პროდუქტის items
$productItems = InvoicesModel::getInvoiceItems($id);
// ვიუ ფაილის ჩატვირთვა
require_once __DIR__ . '/../../views/invoices/view.php';
@@ -0,0 +1,21 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/transactionsmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
TransactionsModel::setDb($pdo);
// მომხმარებლები და ინვოისები ფორმის select-ებისთვის
$clients = TransactionsModel::getClients();
$invoices = TransactionsModel::getInvoices();
// POST დამუშავება
$errors = TransactionsModel::handleTransactionFormSubmission();
require_once __DIR__ . '/../../views/transactions/create.php';
@@ -0,0 +1,24 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/transactionsmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
TransactionsModel::setDb($pdo);
// ID გადმოსვლის შემოწმება
$id = $_GET['id'] ?? null;
if (!$id || !is_numeric($id)) {
exit('არასწორი ID.');
}
// წაშლის მცდელობა
TransactionsModel::deleteTransaction((int)$id);
// გადამისამართება
header('Location: dashboard.php?module=billing&submodule=transactions&action=list&deleted=1');
exit;
@@ -0,0 +1,36 @@
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/transactionsmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
TransactionsModel::setDb($pdo);
$id = $_GET['id'] ?? null;
$transaction = TransactionsModel::getTransactionById($id);
if (!$transaction) {
echo "ტრანზაქცია ვერ მოიძებნა.";
exit;
}
// შენახვა
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = [
'status' => $_POST['status'],
'method' => $_POST['method'],
'notes' => $_POST['notes'],
];
TransactionsModel::updateTransaction($id, $data);
header("Location: dashboard.php?module=billing&submodule=transactions&action=list&updated=1");
exit;
}
require_once __DIR__ . '/../../views/transactions/edit.php';
@@ -0,0 +1,25 @@
<!-- გადახდების ისტორია -->
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/transactionsmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
TransactionsModel::setDb($pdo);
$clientId = $_GET['client_id'] ?? null;
$client = TransactionsModel::getClientInfo($clientId);
if (!$client) {
echo "კლიენტი ვერ მოიძებნა.";
exit;
}
$transactions = TransactionsModel::getClientTransactions($clientId);
require_once __DIR__ . '/../../views/transactions/history.php';
@@ -0,0 +1,29 @@
<!-- ტრანზაქციების სია -->
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once __DIR__ . '/../../../../includes/init.php';
require_once __DIR__ . '/../../models/transactionsmodel.php';
require_once __DIR__ . '/../../../../../vendor/autoload.php';
// წაკითხვა GET-პარამეტრებიდან
$successMessage = null;
if (isset($_GET['added']) && $_GET['added'] == 1) {
$successMessage = "ტრანზაქცია წარმატებით დაემატა.";
} elseif (isset($_GET['updated']) && $_GET['updated'] == 1) {
$successMessage = "ტრანზაქცია წარმატებით განახლდა.";
} elseif (isset($_GET['deleted']) && $_GET['deleted'] == 1) {
$successMessage = "ტრანზაქცია წარმატებით წაიშალა.";
}
TransactionsModel::setDb($pdo);
$transactions = TransactionsModel::getAllTransactions();
require_once __DIR__ . '/../../views/transactions/list.php';