193 lines
7.5 KiB
Markdown
193 lines
7.5 KiB
Markdown
# 📅 راهنمای کامل شمسیسازی سیستم برای ایران
|
||
|
||
## ✅ تغییرات انجام شده
|
||
|
||
### 1. نصب پکیج تقویم شمسی
|
||
- افزودن `morilog/jalali` به `composer.json` برای تبدیل تاریخ میلادی به شمسی
|
||
- پکیج در دسترس برای استفاده در همه بخشهای سیستم
|
||
|
||
### 2. بهروزرسانی توابع تاریخ در PHP
|
||
#### فایل: `app/Utils/Util.php`
|
||
- تابع `format_date()`: تبدیل تاریخ میلادی به شمسی و نمایش با اعداد فارسی
|
||
- تابع `uf_date()`: تبدیل تاریخ شمسی ورودی کاربر به میلادی برای ذخیره در دیتابیس
|
||
- تابع `format_time()`: نمایش زمان با اعداد فارسی
|
||
|
||
### 3. بهروزرسانی Blade Directives
|
||
#### فایل: `app/Providers/AppServiceProvider.php`
|
||
- `@format_date`: نمایش تاریخ شمسی در View ها
|
||
- `@format_time`: نمایش زمان با اعداد فارسی
|
||
- `@format_datetime`: نمایش تاریخ و زمان شمسی
|
||
|
||
### 4. بهروزرسانی JavaScript
|
||
#### فایل: `resources/views/layouts/partials/javascripts.blade.php`
|
||
- افزودن کتابخانه `persian-datepicker` برای انتخاب تاریخ شمسی
|
||
- افزودن کتابخانه `moment-jalaali` برای کار با تاریخ شمسی در JavaScript
|
||
- تنظیم فرمت تاریخ پیشفرض برای فارسی: `Y/m/d` (1403/01/01)
|
||
- تنظیم فرمت moment برای فارسی: `jYYYY/jMM/jDD`
|
||
|
||
#### فایل: `public/js/common.js`
|
||
- بهروزرسانی تنظیمات datepicker برای استفاده از تقویم شمسی
|
||
- بهروزرسانی datetimepicker برای پشتیبانی از تقویم شمسی
|
||
- بهروزرسانی date range picker برای استفاده از moment-jalaali
|
||
|
||
#### فایل: `public/js/app.js`
|
||
- بهروزرسانی تمام date picker ها برای استفاده از Persian Date Picker
|
||
- پشتیبانی از `.start-date-picker`, `#user_dob`, `.dob-date-picker`
|
||
|
||
### 5. Helper Functions فارسی
|
||
#### فایل: `app/Http/persian_helpers.php`
|
||
توابع موجود:
|
||
- `persian_number()`: تبدیل اعداد انگلیسی به فارسی
|
||
- `english_number()`: تبدیل اعداد فارسی به انگلیسی
|
||
- `persian_date()`: تبدیل تاریخ میلادی به شمسی
|
||
- `persian_price()`: فرمت قیمت با اعداد فارسی
|
||
- `persian_month_name()`: نام ماههای شمسی
|
||
- `persian_day_name()`: نام روزهای هفته
|
||
- `persian_words()`: تبدیل عدد به حروف فارسی
|
||
- `is_persian_lang()`: بررسی فعال بودن زبان فارسی
|
||
|
||
## 🚀 نحوه نصب و راهاندازی
|
||
|
||
### مرحله 1: نصب پکیجها
|
||
```bash
|
||
composer install
|
||
```
|
||
|
||
یا اگر قبلاً نصب شده:
|
||
```bash
|
||
composer update morilog/jalali
|
||
```
|
||
|
||
### مرحله 2: پاکسازی Cache
|
||
```bash
|
||
php artisan cache:clear
|
||
php artisan config:clear
|
||
php artisan view:clear
|
||
composer dump-autoload
|
||
```
|
||
|
||
### مرحله 3: تنظیم زبان پیشفرض
|
||
در فایل `.env`:
|
||
```env
|
||
APP_LOCALE=fa
|
||
APP_TIMEZONE=Asia/Tehran
|
||
```
|
||
|
||
### مرحله 4: تنظیم تاریخ پیشفرض کسبوکار
|
||
در تنظیمات کسبوکار، فرمت تاریخ را به `Y/m/d` تغییر دهید.
|
||
|
||
## 📋 نحوه استفاده
|
||
|
||
### در PHP (Backend)
|
||
```php
|
||
use App\Utils\Util;
|
||
|
||
$util = new Util();
|
||
|
||
// نمایش تاریخ شمسی
|
||
$date = $util->format_date('2024-01-01'); // 1402/10/11
|
||
|
||
// تبدیل تاریخ شمسی به میلادی برای ذخیره
|
||
$gregorian = $util->uf_date('1403/01/01'); // 2024-03-20
|
||
|
||
// استفاده از helper function
|
||
$persian_date = persian_date(now(), 'Y/m/d'); // 1403/01/01
|
||
```
|
||
|
||
### در Blade Template
|
||
```blade
|
||
{{-- نمایش تاریخ شمسی --}}
|
||
@format_date($transaction->transaction_date)
|
||
|
||
{{-- نمایش تاریخ و زمان شمسی --}}
|
||
@format_datetime($transaction->created_at)
|
||
|
||
{{-- نمایش زمان با اعداد فارسی --}}
|
||
@format_time($transaction->created_at)
|
||
```
|
||
|
||
### در JavaScript
|
||
```javascript
|
||
// استفاده از moment-jalaali
|
||
var today = moment.jDate(); // تاریخ امروز شمسی
|
||
var formatted = moment.jDate().format('jYYYY/jMM/jDD'); // 1403/01/01
|
||
|
||
// استفاده از Persian Date Picker
|
||
$('.date-picker').persianDatepicker({
|
||
calendarType: 'persian',
|
||
format: 'YYYY/MM/DD',
|
||
autoClose: true
|
||
});
|
||
```
|
||
|
||
## ⚙️ تنظیمات پیشفرض برای ایران
|
||
|
||
### فرمت تاریخ
|
||
- **فرمت پیشفرض:** `Y/m/d` (1403/01/01)
|
||
- **فرمت کامل:** `Y/m/d H:i` (1403/01/01 14:30)
|
||
|
||
### منطقه زمانی
|
||
- **پیشفرض:** `Asia/Tehran`
|
||
|
||
### ارز (نیاز به تنظیم دستی)
|
||
برای تنظیم ریال ایران، در تنظیمات کسبوکار ارز را به "Iranian Rial (IRR)" تغییر دهید.
|
||
|
||
## 🔄 تبدیل تاریخ
|
||
|
||
### میلادی به شمسی
|
||
```php
|
||
$jalali = \Morilog\Jalali\Jalalian::fromCarbon(\Carbon\Carbon::now());
|
||
echo $jalali->format('Y/m/d'); // 1403/01/01
|
||
```
|
||
|
||
### شمسی به میلادی
|
||
```php
|
||
$jalali = \Morilog\Jalali\Jalalian::fromFormat('Y/m/d', '1403/01/01');
|
||
$carbon = $jalali->toCarbon();
|
||
echo $carbon->format('Y-m-d'); // 2024-03-20
|
||
```
|
||
|
||
## 📝 نکات مهم
|
||
|
||
1. **ذخیرهسازی در دیتابیس:** همه تاریخها به صورت میلادی (Gregorian) در دیتابیس ذخیره میشوند.
|
||
|
||
2. **نمایش به کاربر:** تاریخها به صورت شمسی (Jalali) با اعداد فارسی نمایش داده میشوند.
|
||
|
||
3. **ورودی کاربر:** کاربر تاریخ را به صورت شمسی وارد میکند و سیستم آن را به میلادی تبدیل میکند.
|
||
|
||
4. **پشتیبانی چندزبانه:** سیستم هم از تاریخ میلادی و هم شمسی پشتیبانی میکند و بر اساس زبان فعال کاربر انتخاب میشود.
|
||
|
||
## 🐛 عیبیابی
|
||
|
||
### اگر تاریخها نمایش داده نمیشوند:
|
||
1. بررسی کنید که زبان سیستم روی `fa` تنظیم شده باشد
|
||
2. Cache را پاک کنید: `php artisan cache:clear`
|
||
3. بررسی کنید که پکیج `morilog/jalali` نصب شده باشد: `composer show morilog/jalali`
|
||
|
||
### اگر Date Picker کار نمیکند:
|
||
1. بررسی کنید که کتابخانههای JavaScript لود شدهاند (در Developer Tools مرورگر)
|
||
2. بررسی کنید که متغیر `is_persian_lang` در JavaScript تعریف شده باشد
|
||
3. بررسی Console مرورگر برای خطاهای JavaScript
|
||
|
||
## ✅ چکلیست تست
|
||
|
||
- [ ] تاریخهای نمایش داده شده به صورت شمسی هستند
|
||
- [ ] اعداد تاریخ به فارسی نمایش داده میشوند (۰-۹)
|
||
- [ ] Date Picker تاریخ شمسی را نمایش میدهد
|
||
- [ ] ورود تاریخ شمسی از کاربر به درستی تبدیل میشود
|
||
- [ ] گزارشها تاریخ شمسی را نمایش میدهند
|
||
- [ ] فاکتورها تاریخ شمسی را نمایش میدهند
|
||
|
||
## 📞 پشتیبانی
|
||
|
||
در صورت بروز مشکل، لطفاً موارد زیر را بررسی کنید:
|
||
1. نسخه PHP (حداقل 8.0)
|
||
2. نصب بودن تمام پکیجهای Composer
|
||
3. پاک بودن Cache
|
||
4. تنظیمات زبان در `.env`
|
||
|
||
---
|
||
|
||
**نکته مهم:** پس از انجام تغییرات، حتماً Cache را پاک کرده و `composer dump-autoload` را اجرا کنید.
|
||
|