Untitled
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