Untitled

 avatar
unknown
plain_text
a year ago
32 kB
11
Indexable
 public function actionImport()
    {

        Yii::error("Lakukan import product bulks");
        $connection = \Yii::$app->db;
        $out = ['success' => 0, 'data' => "", 'message' => ""];
        $post = Yii::$app->request->post();
        $file = $_FILES['file'];
        // var_dump($file);
        // die;
        $file = $file['tmp_name'];

        $filesize =  filesize($file) / 1000;

        if ($filesize > 5000) {
            echo json_encode([
                'filesize' => $filesize,
                'data' => 0,
                'cek_count' => 0,
                'total_data' => 0,
                'total_sukses' => 0,
                'total_error' => 0
            ]);
            die;
        }

        $inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($file);
        $objReader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
        $objReader2 = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
        $objPHPExcel2 = $objReader2->load($file);
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($file);
        $rowData = [];
        $images = [];

        $transaction = $connection->beginTransaction();
        $cek_count = true;
        $total_data = 0;
        $total_sukses = 0;
        $total_error = 0;
        try {
            $num = $objPHPExcel->getSheetCount(); //get number of sheets
            $sheetnames = $objPHPExcel->getSheetNames(); //get sheet names
            for ($i = 0; $i < 1; $i++) { //0
                $sheet = $objPHPExcel->getSheet($i);
                $highestRow = $sheet->getHighestRow();
                $highestColumn = $sheet->getHighestColumn();

                // $total_data=$highestRow;
                // break;

                if ($highestRow > 1003) {
                    $cek_count = false;
                    $total_data = $highestRow - 3;
                    break;
                }

                // return $num;
                // die;

                //$row is start 2 because first row assigned for heading.  



                for ($row = 4; $row <= $highestRow; $row++) {
                    // Yii::error("highestRow");
                    // Yii::error($highestRow);
                    // Yii::error("end highestRow");
                    $array_excel = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
                    $data_tamp = $array_excel[0];
                    $count = 0;
                    $error = "";

                    $images = [];

                    if ($data_tamp[0] == "Sukses") {
                        continue;
                    }

                    // Yii::error("nama produk");
                    // Yii::error($data_tamp[1]);
                    // Yii::error("end nama produk");
                    $data_delete = "";
                    if (strlen($data_tamp[1]) > 100) {
                        $error .= "Nama produk lebih dari 100 karakter,";
                    } else if ($data_tamp[1] != "") {
                        $cekproduct = (new \yii\db\Query())->select('*')
                            ->from('product')
                            ->where(['name' => $data_tamp[1]])
                            ->andWhere(['accountId' => $post["accountId"]])
                            ->all();
                        if ($cekproduct != null) {
                            if ($cekproduct[0]['statusId'] == 3) {
                                $data_delete = $cekproduct[0];
                            } else {
                                $error .= "Nama produk sudah ada,";
                            }
                        }
                    } else if ($data_tamp[1] == "") {
                        $error .= "Nama produk kosong,";
                        $count++;
                    }

                    if (strlen($data_tamp[2]) > 2000) {
                        $error .= "Deskripsi produk lebih dari 2000 karakter,";
                    }

                    if ($data_tamp[4] == "") {
                        $error .= "Harga kosong,";
                        $count++;
                    } else if ($data_tamp[4] < 100 && $data_tamp[4] > 0) {
                        $error .= "Harga produk kurang dari 100,";
                    } else if ($data_tamp[4] < 0) {
                        $error .= "Harga produk tidak boleh minus,";
                    }

                    $berat_produk = $data_tamp[16];
                    if ($berat_produk == null || $berat_produk == '' || $berat_produk == 0) {
                        $error .= "Berat Produk Wajib Di isi, lebih besar dari 0, ";
                    }



                    $id_category = null;
                    if ($data_tamp[5] == "") {
                        $error .= "Kategori kosong,";
                        $count++;
                    } else {
                        // if($data_tamp[5]!=""){
                        $check_category = CategoryProduct::find()->where([
                            'id' => $data_tamp[5], 'accountId' => $post['accountId']
                        ])->one();

                        if ($check_category != null) {
                            $id_category = $check_category['id'];
                        } else {
                            $error .= "Kategori tidak ditemukan,";
                        }
                    }

                    if ($data_tamp[6] != "" && $data_tamp[6] != "") {
                        $check_subcategory = CategoryProduct::find()->where([
                            'id' => $data_tamp[6], 'accountId' => $post['accountId']
                        ])->andWhere("parentId IS NOT NULL")->andWhere(['parentId' => $data_tamp[5]])->one();


                        if ($check_subcategory != null) {
                            $id_category = $check_subcategory['id'];
                        } else {
                            $error .= "Sub-Kategori tidak ditemukan,";
                        }
                    }


                    $ekstensiYangDibolehkan = [
                        'png',
                        'jpg',
                        'jpeg'
                    ];

                    $temp = explode(".", $data_tamp[7]);



                    if ($data_tamp[7] == "") {
                        $error .= "Gambar 1 Kosong,";
                        $count++;
                    } else if (!in_array(end($temp), $ekstensiYangDibolehkan)) {
                        $error .= "Ekstensi gambar1 tidak diijinkan.";
                    } else if ($data_tamp[7] != "") {
                        $image_type_check = @exif_imagetype($data_tamp[7]); //Get image type + check if exists
                        if (strpos($http_response_header[0], "403") || strpos($http_response_header[0], "404") || strpos($http_response_header[0], "302") || strpos($http_response_header[0], "301")) {
                            $error .= "Link gambar1 error.";
                        } else {
                            $images[] = $data_tamp[7];
                        }
                    }

                    $temp = explode(".", $data_tamp[8]);
                    if (!in_array(end($temp), $ekstensiYangDibolehkan) && $data_tamp[8] != "") {
                        $error .= "Ekstensi gambar2 tidak diijinkan.";
                    } else if ($data_tamp[8] != "") {
                        // $images[] = $data_tamp[8];

                        $image_type_check = @exif_imagetype($data_tamp[8]); //Get image type + check if exists
                        if (strpos($http_response_header[0], "403") || strpos($http_response_header[0], "404") || strpos($http_response_header[0], "302") || strpos($http_response_header[0], "301")) {
                            $error .= "Link gambar2 error.";
                        } else {
                            $images[] = $data_tamp[8];
                        }
                    }

                    $temp = explode(".", $data_tamp[9]);
                    if (!in_array(end($temp), $ekstensiYangDibolehkan) && $data_tamp[9] != "") {
                        $error .= "Ekstensi gambar3 tidak diijinkan.";
                    } else if ($data_tamp[9] != "") {
                        // $images[] = $data_tamp[9];
                        $image_type_check = @exif_imagetype($data_tamp[9]); //Get image type + check if exists
                        if (strpos($http_response_header[0], "403") || strpos($http_response_header[0], "404") || strpos($http_response_header[0], "302") || strpos($http_response_header[0], "301")) {
                            $error .= "Link gambar3 error.";
                        } else {
                            $images[] = $data_tamp[9];
                        }
                    }

                    $temp = explode(".", $data_tamp[10]);
                    if (!in_array(end($temp), $ekstensiYangDibolehkan) && $data_tamp[10] != "") {
                        $error .= "Ekstensi gambar4 tidak diijinkan.";
                    } else if ($data_tamp[10] != "") {
                        // $images[] = $data_tamp[10];
                        $image_type_check = @exif_imagetype($data_tamp[10]); //Get image type + check if exists
                        if (strpos($http_response_header[0], "403") || strpos($http_response_header[0], "404") || strpos($http_response_header[0], "302") || strpos($http_response_header[0], "301")) {
                            $error .= "Link gambar4 error.";
                        } else {
                            $mages[] = $data_tamp[10];
                        }
                    }

                    $temp = explode(".", $data_tamp[11]);
                    if (!in_array(end($temp), $ekstensiYangDibolehkan) && $data_tamp[11] != "") {
                        $error .= "Ekstensi gambar5 tidak diijinkan.";
                    } else if ($data_tamp[11] != "") {
                        // $images[] = $data_tamp[11];
                        $image_type_check = @exif_imagetype($data_tamp[11]); //Get image type + check if exists
                        if (strpos($http_response_header[0], "403") || strpos($http_response_header[0], "404") || strpos($http_response_header[0], "302") || strpos($http_response_header[0], "301")) {
                            $error .= "Link gambar5 error.";
                        } else {
                            $images[] = $data_tamp[11];
                        }
                    }

                    if ($data_tamp[12] == "") {
                        $error .= "Tersedia pada toko kosong";
                        $count++;
                    } else if (strtolower($data_tamp[12]) == "semua") {
                        $storeId = [];
                        $store = (new \yii\db\Query())->select('*')
                            ->from('store')
                            ->where(['accountId' => $post["accountId"]])
                            ->andWhere(['active' => 1])
                            ->all();
                        for ($i = 0; $i < count($store); $i++) {
                            $storeId[$i] = $store[$i]['id'];
                        }
                    } else {
                        $storeId = explode(",", $data_tamp[12]);
                        for ($i = 0; $i < count($storeId); $i++) {
                            $store = (new \yii\db\Query())->select('*')
                                ->from('store')
                                ->where(['accountId' => $post["accountId"]])
                                ->andWhere(['active' => 1])
                                ->andWhere(['id' => $storeId[$i]])
                                ->all();
                            if ($store == null) {
                                $error .= "Kode (" . $storeId[$i] . ") Toko tidak sesuai,";
                            }
                        }
                    }

                    $skuCode = "";
                    if ($data_tamp[19] == "") {
                        $skuCode = $data_tamp[19]; //kosong
                    } else {
                        $cek_sku = (new \yii\db\Query())->select('*')
                            ->from('product')
                            ->where(['skuCode' => $data_tamp[19]])
                            // ->andWhere(["not", ['accountId' => $post['accountId']]])
                            ->all();
                        if ($cek_sku != null) {
                            $error .= "SKU Code sudah tersedia!";
                        } else {
                            $skuCode = $data_tamp[19];
                        }
                    }

                    $uom = @$data_tamp[18];

                    if ($uom != "") {
                        $uom = strtolower($uom);
                        Yii::error("nilai uom $uom");
                        if ($uom == "ea" || $uom == "kg") {
                            $uom = $uom;
                        } else {
                            $error .= " UOM hanya bisa memasukan nilai ea/kg";
                        }
                    } else {
                        $uom = "ea";
                    }

                    if ($count == 5) {
                        continue;
                    }

                    // Yii::error("start error import");
                    // Yii::error($error);
                    // Yii::error("end error import");


                    if ($error != "") {
                        $total_data++;
                        $total_error++;
                        // $rowData[] = $sheet->rangeToArray('A'.$row.':'.$highestColumn.$row,NULL,TRUE,FALSE);
                        $objPHPExcel2->getSheetByName('ISI Template di sini')->setCellValueByColumnAndRow(1, $row, $error);
                        continue;
                    } else {
                        $total_data++;
                        $total_sukses++;
                        $objPHPExcel2->getSheetByName('ISI Template di sini')->setCellValueByColumnAndRow(1, $row, "Sukses");

                        if (is_array($data_delete)) {
                            // var_dump($data_delete);die;

                            $update_product = $connection->createCommand()
                                ->update(
                                    'product',
                                    [
                                        'name' => $data_tamp[1],
                                        'accountId' => $post["accountId"],
                                        'statusId' => $data_tamp[15] == "Ya" ? 2 : 1,
                                        'slug' => CommonUtil::prettyUri($data_tamp[1]) . '-' . $data_delete["skuCode"],
                                        'description' => $data_tamp[2],
                                        'barcode' => $data_tamp[3],
                                        'price' => $data_tamp[4],
                                        'weight' => $berat_produk,
                                        'bestSeller' => $data_tamp[13] == "Ya" ? 1 : 0,
                                        'newArrival' => $data_tamp[14] == "Ya" ? 1 : 0,
                                        'skuCode' => $data_delete["skuCode"],
                                        'vat' => $data_tamp[17],
                                        'uom' => strtolower($uom),
                                        'minQty' => $data_tamp[20] == "" ? 1 : $data_tamp[20],
                                        'qtyIncrement' => $data_tamp[21] == "" ? 1 : $data_tamp[21],
                                        'modifiedBy' => $post['id_user'],
                                        'modifiedDate' => date('Y-m-d H:i:s')

                                    ],
                                    "id=" . $data_delete["id"]
                                )
                                ->execute();

                            if ($update_product) {
                                $id_product = $data_delete["id"];

                                $connection->createCommand()
                                    ->update(
                                        'product_category',
                                        [
                                            'productId' => $data_delete["id"],
                                            'categoryProductId' => $id_category,
                                            'seq' => 0,
                                            'createdBy' => $post['id_user'],
                                            'createdDate' => date('Y-m-d H:i:s')
                                        ],
                                        'productId=' . $data_delete["id"]
                                    )
                                    ->execute();

                                $connection->createCommand("DELETE FROM product_image WHERE productId=" . $data_delete["id"])->execute();

                                $files = glob('media/products/' . $data_delete['skuCode'] . '/*'); // get all file names
                                foreach ($files as $file) { // iterate files
                                    if (is_file($file)) {
                                        unlink($file); // delete file
                                    }
                                }

                                $connection->createCommand("DELETE FROM product_store WHERE productId=" . $data_delete["id"])->execute();

                                for ($i = 0; $i < count($storeId); $i++) {
                                    $connection->createCommand()
                                        ->insert(
                                            'product_store',
                                            [
                                                'storeId' => $storeId[$i],
                                                'productId' => $id_product,
                                                'active' => $data_tamp[15] == "Ya" ? 2 : 1,
                                                'createdBy' => $post['id_user'],
                                                'createdDate' => date('Y-m-d H:i:s')
                                            ]
                                        )
                                        ->execute();
                                }

                                for ($i = 0; $i < count($images); $i++) {
                                    $type = pathinfo($images[$i], PATHINFO_EXTENSION);
                                    $data = file_get_contents($images[$i]);
                                    $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
                                    $asCover = ($i == 0) ? 1 : 0;
                                    $pos  = strpos($base64, ';');
                                    $type = explode(':', substr($base64, 0, $pos))[1];
                                    $format_file = explode('/', $type);
                                    $image = $base64;
                                    $image_name = $data_delete['skuCode'] . '_' . $i . '.' . end($format_file);
                                    $target_file = "media/products/" . $data_delete['skuCode'] . "/" . $image_name;

                                    // return end($format_file);die;

                                    //convert base64 to image and save in specific location/dir
                                    $upload = file_put_contents(
                                        $target_file,
                                        base64_decode(
                                            str_replace('data:' . $type . ';base64,', '', $image)
                                        )
                                    );
                                    if ($upload) {

                                        // Calling getimagesize() function
                                        list($width, $height, $type, $attr) = getimagesize(\Yii::$app->basePath . '/web/' . $target_file);

                                        if ($width != $height) {
                                            $this->actionResize(\Yii::$app->basePath . '/web/' . $target_file);
                                        }

                                        // Displaying dimensions of the image
                                        // echo "Width of image : " . $width . "<br>";

                                        // echo "Height of image : " . $height . "<br>";

                                        // echo "Image type :" . $type . "<br>";

                                        // echo "Image attribute :" .$attr;

                                        // $this->actionResize(\Yii::$app->basePath.'/web/'.$target_file);
                                        $connection->createCommand()
                                            ->insert(
                                                'product_image',
                                                [
                                                    'productId' => $id_product,
                                                    'image' => $target_file,
                                                    'asCover' => $asCover,
                                                    'seq' => 0,
                                                    'active' => 1,
                                                    'createdBy' => $post['id_user'],
                                                    'createdDate' => date('Y-m-d H:i:s')
                                                ]
                                            )
                                            ->execute();
                                    }
                                }
                            }
                        } else {
                            $data = (new \yii\db\Query())->select('max(skuCode) AS kode_barang')
                                ->from('product')
                                ->where(['accountId' => $post['accountId']])
                                ->all();

                            if ($data[0]['kode_barang'] != null) {
                                $tamp = str_replace("C" . $post['accountId'], "", $data[0]['kode_barang']);
                                $no = ((int)$tamp) + 1;
                                $kd = sprintf("%05s", $no);
                                // Yii::error("masuk if");
                                // Yii::error($kd);
                                // Yii::error("end id");
                            } else {
                                $kd = "00001";
                                // Yii::error("masuk else");
                                // Yii::error($kd);
                                // Yii::error("end masuk else");
                            }

                            $kode = 'C' . $post['accountId'] . $kd;

                            $skuCode = "";
                            if ($data_tamp[19] == "") {
                                $skuCode = $kode;
                            } else {
                                $skuCode = $data_tamp[19];
                            }

                            $cekfolder = $this->actionCekFolder($skuCode);

                            // Yii::error("cek folder");
                            // Yii::error($cekfolder);
                            // Yii::error("end cek folder");

                            if ($cekfolder == false) {
                                $this->actionCreateFolder($skuCode);
                            }

                            $insert_product = $connection->createCommand()
                                ->insert(
                                    'product',
                                    [
                                        'name' => $data_tamp[1],
                                        'accountId' => $post["accountId"],
                                        'statusId' => $data_tamp[15] == "Ya" ? 2 : 1,
                                        'slug' => CommonUtil::prettyUri($data_tamp[1]) . '-' . $skuCode,
                                        'skuCode' => $skuCode,
                                        'description' => $data_tamp[2],
                                        'barcode' => $data_tamp[3],
                                        'price' => $data_tamp[4],
                                        'weight' => $berat_produk,
                                        'bestSeller' => $data_tamp[13] == "Ya" ? 1 : 0,
                                        'newArrival' => $data_tamp[14] == "Ya" ? 1 : 0,
                                        'vat' => $data_tamp[17],
                                        'uom' => strtolower($data_tamp[18]),
                                        'minQty' => $data_tamp[20] == "" ? 1 : $data_tamp[20],
                                        'qtyIncrement' => $data_tamp[21] == "" ? 1 : $data_tamp[21],
                                        'createdBy' => $post['id_user'],
                                        'createdDate' => date('Y-m-d H:i:s')

                                    ]
                                )
                                ->execute();
                            if ($insert_product) {
                                $id_product = $connection->getLastInsertID();

                                $connection->createCommand()
                                    ->insert(
                                        'product_category',
                                        [
                                            'productId' => $id_product,
                                            'categoryProductId' => $id_category,
                                            'seq' => 0,
                                            'createdBy' => $post['id_user'],
                                            'createdDate' => date('Y-m-d H:i:s')
                                        ]
                                    )
                                    ->execute();


                                for ($i = 0; $i < count($storeId); $i++) {
                                    $connection->createCommand()
                                        ->insert(
                                            'product_store',
                                            [
                                                'storeId' => $storeId[$i],
                                                'productId' => $id_product,
                                                'active' => $data_tamp[15] == "Ya" ? 2 : 1,
                                                'createdBy' => $post['id_user'],
                                                'createdDate' => date('Y-m-d H:i:s')
                                            ]
                                        )
                                        ->execute();
                                }

                                for ($i = 0; $i < count($images); $i++) {
                                    $type = pathinfo($images[$i], PATHINFO_EXTENSION);
                                    $data = file_get_contents($images[$i]);
                                    $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
                                    $asCover = ($i == 0) ? 1 : 0;
                                    $pos  = strpos($base64, ';');
                                    $type = explode(':', substr($base64, 0, $pos))[1];
                                    $format_file = explode('/', $type);
                                    $image = $base64;
                                    $image_name = $skuCode . '_' . $i . '.' . end($format_file);
                                    $target_file = "media/products/" . $skuCode . "/" . $image_name;

                                    // return end($format_file);die;

                                    //convert base64 to image and save in specific location/dir
                                    $upload = file_put_contents(
                                        $target_file,
                                        base64_decode(
                                            str_replace('data:' . $type . ';base64,', '', $image)
                                        )
                                    );
                                    if ($upload) {

                                        // Calling getimagesize() function
                                        list($width, $height, $type, $attr) = getimagesize(\Yii::$app->basePath . '/web/' . $target_file);

                                        if ($width != $height) {
                                            $this->actionResize(\Yii::$app->basePath . '/web/' . $target_file);
                                        }

                                        // Displaying dimensions of the image
                                        // echo "Width of image : " . $width . "<br>";

                                        // echo "Height of image : " . $height . "<br>";

                                        // echo "Image type :" . $type . "<br>";

                                        // echo "Image attribute :" .$attr;

                                        // $this->actionResize(\Yii::$app->basePath.'/web/'.$target_file);
                                        $connection->createCommand()
                                            ->insert(
                                                'product_image',
                                                [
                                                    'productId' => $id_product,
                                                    'image' => $target_file,
                                                    'asCover' => $asCover,
                                                    'seq' => 0,
                                                    'active' => 1,
                                                    'createdBy' => $post['id_user'],
                                                    'createdDate' => date('Y-m-d H:i:s')
                                                ]
                                            )
                                            ->execute();
                                    }
                                }

                                $out['success'] = 1;
                                $out['message'] = "Add Product Success!";
                            }
                        }
                    }
                }
            }


            $transaction->commit();
        } catch (Exception $e) {
            $transaction->rollBack();
        }

        unset($transaction);
        $connection->close();
        $connection = null;
        unset($connection);

        // unlink($file);
        // echo json_encode($data_tamp[0][1]);
        $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($objPHPExcel2, 'Xlsx');
        $objWriter->save(\Yii::$app->basePath . "/web/template/TemplateErrorTambahSekaligus_" . $post['accountId'] . ".xlsx");
        echo json_encode([
            'filesize' => $filesize,
            'cek_count' => $cek_count,
            'total_data' => $total_data,
            'total_sukses' => $total_sukses,
            'total_error' => $total_error,
        ]);

        die;
        // echo json_encode($storeId);
    }
Editor is loading...
Leave a Comment