Untitled
unknown
plain_text
a year ago
32 kB
19
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