OcrController.php 5.8 KB
<?php

namespace App\Http\Controllers;

use App\Models\DtTemplate;
use App\Models\MstTemplate;
use Illuminate\Http\Request;

class OcrController extends Controller
{
    public function index()
    {
        return view('ocr.index');
    }


    public function store(Request $request)
    {

//        dd($request->all());
        $request->validate([
            'customer_name_text' => 'required|string',
            'customer_name_xy' => 'required|string',
            'template_name' => 'required|string|unique:mst_template,tpl_name',
        ]);

        try {
            // Lưu vào bảng mst_template
            $mst = MstTemplate::create([
                'tpl_name' => $request->template_name,
                'tpl_text' => $request->customer_name_text,
                'tpl_xy'   => $request->customer_name_xy,
            ]);

            // Lưu các field khác vào dt_template
            foreach ($request->fields as $field => $value) {
                DtTemplate::create([
                    'tpl_id'     => $mst->id,
                    'field_name' => $field,
                    'field_xy'   => is_array($value['coords']) ? implode(',', $value['coords']) : $value['coords'],
                ]);
            }

            return response()->json([
                'success' => true,
                'message' => 'Lưu template thành công',
                'template_id' => $mst->id
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Lỗi khi lưu template: ' . $e->getMessage()
            ], 500);
        }
    }


    public function getData(Request $request)
    {
        try {
            // Lấy template name từ request hoặc mặc định
            $templateName = $request->get('template_name', '');

            // Giả sử file OCR JSON & ảnh nằm trong storage/app/public/image/
            $jsonPath = public_path("image/data_picking_detail_1754967679.json");
            $imgPath = ("image/data_picking_detail_1754967679.jpg");

            if (!file_exists($jsonPath)) {
                return response()->json(['error' => 'File OCR JSON không tìm thấy'], 404);
            }

            $ocrData = json_decode(file_get_contents($jsonPath), true);
            if (json_last_error() !== JSON_ERROR_NONE) {
                return response()->json(['error' => 'File OCR JSON không hợp lệ'], 400);
            }

            $dataMapping = [];
            $is_template = false;

            if ($templateName) {
                $mst = MstTemplate::where('tpl_name', $templateName)->first();

                if ($mst) {
                    // Lấy detail của template
                    $details = DtTemplate::where('tpl_id', $mst->id)->get();

                    foreach ($details as $detail) {
                        $coords = array_map('intval', explode(',', $detail->field_xy));
                        // coords = [x1, y1, x2, y2]

                        $dataMapping[$detail->field_name] = [
                            'text' => '',
                            'coords' => $coords
                        ];
                    }
                    $dataMapping['template_name'] = [
                        'text' => $mst->tpl_name,
                        'coords' => ''
                    ];

                    $is_template = true;

                }
            }

            return response()->json([
                'success' => true,
                'ocrData'      => $ocrData,
                'pdfImageUrl'  => $imgPath,
                'dataMapping'  => $dataMapping,
                'is_template'  => $is_template,
                'fieldOptions' => [
                    [ 'value' => 'template_name',  'label' => 'Tên Mẫu PDF' ],
                    [ 'value' => 'customer_name',  'label' => 'Tên khách hàng' ],
                    [ 'value' => 'export_date',    'label' => 'Ngày xuất' ],
                    [ 'value' => 'order_code',     'label' => 'Mã đơn hàng' ],
                    [ 'value' => 'customer',       'label' => 'Khách hàng' ],
                    [ 'value' => 'address',        'label' => 'Địa chỉ' ],
                    [ 'value' => 'staff',          'label' => 'Nhân viên' ],
                ],
                'template_name' => $templateName
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'error' => 'Lỗi khi load data: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * Lấy danh sách template
     */
    public function getTemplateList()
    {
        try {
            $templates = MstTemplate::select('id', 'tpl_name', 'tpl_text', 'in_date')
                ->orderBy('created_at', 'desc')
                ->get();

            return response()->json([
                'success' => true,
                'templates' => $templates
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'error' => 'Lỗi khi lấy danh sách template: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * Xóa template
     */
    public function deleteTemplate($id)
    {
        try {
            $template = MstTemplate::findOrFail($id);

            // Xóa các field detail trước
            DtTemplate::where('tpl_id', $id)->delete();

            // Xóa template chính
            $template->delete();

            return response()->json([
                'success' => true,
                'message' => 'Xóa template thành công'
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'error' => 'Lỗi khi xóa template: ' . $e->getMessage()
            ], 500);
        }
    }
}