نماذج المستندات القابلة للطباعة لـ Eloquent في 0 سطر من التعليمات البرمجية

مؤخرًا ، في مشروع على Laravel + Eloquent ، كنت بحاجة إلى عمل نماذج قابلة للطباعة من المستندات - الفواتير والعقود بتنسيق Word. نظرًا لوجود العديد من المستندات المختلفة في النظام ، فقد قررت جعله عالميًا بحيث يمكن استخدامه لاحقًا في مشاريع أخرى.



والنتيجة هي تنفيذ يتطلب حدًا أدنى من التكاليف للاندماج في المشروع.





كما اعتدت على عمل نماذج قابلة للطباعة. تستخدم أساليب مختلفة



  • تم وضع العلامات في قالب المستند واستبدالها أثناء الإنشاء.
  • .
  • html word.
  • , , .


. Eloquent, , .



,



composer require mnvx/eloquent-print-form


Eloquent, . , .



use Illuminate\Database\Eloquent\Model;

/**
 * @property string $number
 * @property string $start_at
 * @property Customer $customer
 * @property ContractAppendix[] $appendixes
 */
class Contract extends Model
{

    public function customer()
    {
        return $this->belongsTo(Customer::class);
    }

    public function appendixes()
    {
        return $this->hasMany(ContractAppendix::class);
    }
}

/**
 * @property string $name
 * @property CustomerCategory $category
 */
class Customer extends Model
{
    public function category()
    {
        return $this->belongsTo(CustomerCategory::class);
    }

}

/**
 * @property string $number
 * @property string $date
 * @property float $tax
 */
class ContractAppendix extends Model
{

    public function getTaxAttribute()
    {
        $tax = 0;
        foreach ($this->items as $item) {
            $tax += $item->total_amount * (1 - 100 / (100+($item->taxStatus->vat_rate ?? 0)));
        }
        return $tax;
    }
}


,





(Contract), (Customer), . (ContractAppendix).



— . docx





Eloquent. , , , ${customer.category.name}.



, |, ${number|placeholder}. , , ${start_at|date|placeholder}.





  • placeholder — "____",
  • date — 24.12.2020,
  • dateTime — - 24.12.2020 23:11,
  • int — 2`145,
  • decimal — 2`145.07.


. ${entities.#row_number}.



الآن بعد أن تم وصف المستند ، يبقى مجرد البدء في إنشاء نسخة قابلة للطباعة



use Mnvx\EloquentPrintForm\PrintFormProcessor;

$entity = Contract::find($id);
$printFormProcessor = new PrintFormProcessor();
$templateFile = resource_path('path_to_print_forms/your_print_form.docx');
$tempFileName = $printFormProcessor->process($templateFile, $entity);


$tempFileNameسيحتوي الملف الذي تم إنشاؤه على نسخة جاهزة للطباعة.



في مشروع Laravel ، قد تبدو طريقة التحكم المسؤولة عن توليد المواد القابلة للطباعة بهذا الشكل



public function downloadPrintForm(FormRequest $request)
{
    $id = $request->get('id');
    $entity = Contract::find($id);
    $printFormProcessor = new PrintFormProcessor();
    $templateFile = resource_path('path_to_print_forms/your_print_form.docx');
    $tempFileName = $printFormProcessor->process($templateFile, $entity);
    $filename = 'contract_' . $id;
    return response()
        ->download($tempFileName, $filename . '.docx')
        ->deleteFileAfterSend();
}


باختصار ، سأقول إنني أفرغت نفسي بشكل لائق من خلال إنشاء هذه المكتبة الصغيرة في مشروع به الكثير من النماذج القابلة للطباعة. لست بحاجة إلى كتابة الكود الفريد الخاص بي لكل منهم. أنا فقط أصف المتغيرات على النحو الوارد أعلاه وأحصل على النتيجة بسرعة كبيرة. سأكون سعيدًا إذا كانت الحزمة ستساعدك على توفير الوقت.



رابط المشروع على جيثب




All Articles