تغییرات CRM

1- ذخیره فاکتورها با تاریخ صحیح : 

1) بهترین و کم‌ریسک‌ترین اصلاح داخل همین فایل

بالای فایل (بعد از defined(...))، jdf را include کن (اگر قبلاً در سیستم autoload نکردی):

require_once(APPPATH . 'helpers/jdf.php');

سپس داخل کلاس Invoices (مثلاً بعد از __construct) این دو تابع کمکی را اضافه کن:

private function pzh_fa_to_en_digits($str) { return strtr((string)$str, [ '۰'=>'0','۱'=>'1','۲'=>'2','۳'=>'3','۴'=>'4','۵'=>'5','۶'=>'6','۷'=>'7','۸'=>'8','۹'=>'9', '٠'=>'0','١'=>'1','٢'=>'2','٣'=>'3','٤'=>'4','٥'=>'5','٦'=>'6','٧'=>'7','٨'=>'8','٩'=>'9', ]); } /** * ورودی: 1404/10/08 یا 1404-10-08 * خروجی: 2026-01-?? (Y-m-d) یا null اگر معتبر نبود * اگر ورودی از قبل Y-m-d باشد همان را برمی‌گرداند. */ private function pzh_j2g_ymd($jdate) { $jdate = trim($this->pzh_fa_to_en_digits($jdate)); if ($jdate === '') return null; // اگر از قبل میلادی است if (preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $jdate)) { return $jdate; } $jdate = str_replace(['.','-'], '/', $jdate); $parts = explode('/', $jdate); if (count($parts) !== 3) return null; $jy = (int)$parts[0]; $jm = (int)$parts[1]; $jd = (int)$parts[2]; if ($jy < 1200) return null; $g = jalali_to_gregorian($jy, $jm, $jd); if (!is_array($g) || count($g) < 3) return null; return sprintf('%04d-%02d-%02d', $g[0], $g[1], $g[2]); }

2) حالا داخل متد invoice($id='') تبدیل را قبل از validate و قبل از add/update انجام بده

همین بخش ابتدای if ($this->input->post()) { را اینطور اصلاح کن (فقط همین قسمت):

public function invoice($id = '') { if ($this->input->post()) { $invoice_data = $this->input->post(); // ✅ تبدیل تاریخ شمسی به میلادی قبل از هر استفاده if (isset($invoice_data['date'])) { $g = $this->pzh_j2g_ymd($invoice_data['date']); if ($g) $invoice_data['date'] = $g; } if (isset($invoice_data['duedate']) && $invoice_data['duedate'] !== '') { $g = $this->pzh_j2g_ymd($invoice_data['duedate']); if ($g) $invoice_data['duedate'] = $g; } if ($id == '') { ...

با همین کار:

  • to_sql_date($invoice_data['date']) از این به بعد میلادی می‌گیرد و درست کار می‌کند.

  • مقدار نهایی که به مدل می‌رود میلادی است و در دیتابیس میلادی ذخیره می‌شود.


آیا این مقاله مفید بود؟