ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ image; $allowedExt = ['jpg', 'jpeg', 'png']; $name = $file->getClientOriginalName(); $ext = strtolower($file->getClientOriginalExtension()); $size = $file->getSize(); if (!in_array($ext, $allowedExt)) { return response()->json(['status' => false, 'message' => 'File extension not allowed.']); } if ($size > 1000000) { return response()->json(['status' => false, 'message' => 'Image are too big']); } $file = $request->file('image'); $filename = customFileUpload($file, 'images'); tap($user->photo, function ($previous) use ($user, $filename) { $user->photo = 'images/' . $filename; $user->save(); if ($previous) { Storage::disk('public')->delete($previous); } }); return response()->json(['status' => true]); } public function editProfile() { $data['seo']['meta_title'] = 'Edit Profile | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.edit-profile', $data); } public function saveProfile(Request $request) { $validator = Validator::make( $request->all(), [ 'name' => 'required', 'phone' => 'required', ] ); if ($validator->fails()) { return back()->withErrors($validator)->withInput(); } else { $user = Auth::user(); $user->name = $request->name; $user->phone = $request->phone; $user->save(); return redirect()->route('frontend.user.profile')->with('success', 'Profile Successfully Updated'); } } public function setSubscribe(Request $request) { $user = Auth::user(); $user->is_subscribe = $request->subscribe; $user->save(); return response()->json(['status' => true]); } public function editPassword() { $data['seo']['meta_title'] = 'Update Password | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.edit-password', $data); } public function updatePassword(Request $request) { $validator = Validator::make( $request->all(), [ 'old_password' => 'required', 'password' => 'required|string|min:8|confirmed', ], [ 'old_password.required' => 'Password lama mohon di isi', 'password.required' => 'Password baru mohon di isi', 'password.min' => 'Password terlalu pendek, minimal 8 huruf', 'password.confirmed' => 'Password tidak cocok' ] ); if ($validator->fails()) { $message = $validator->errors()->all(); return back()->withErrors($validator); } else { if (!(Hash::check($request->old_password, Auth::user()->password))) { // The passwords matches return redirect()->back()->with('error', 'Password Lama Anda Tidak Benar. Mohon coba lagi'); } if (strcmp($request->old_password, $request->password) == 0) { return redirect()->back()->with('error', 'Password Baru Tidak Boleh Sama Dengan Password Lama'); } $user = Auth::user(); $user->password = bcrypt($request->password); $user->save(); return redirect()->route('frontend.user.profile')->with('success', 'Password Successfully Updated'); } } public function transactions(Request $request) { $orders = Order::with('details', 'details.product')->where('user_id', Auth::id()); $status = $request->status; $sort = $request->sort; if ($status || $sort) { if ($status) { $orders = $orders->where('order_status_id', $status); } if ($sort) { if ($sort == 1) { $orders = $orders->orderBy('created_at', 'asc'); } if ($sort == 2) { $orders = $orders->orderBy('created_at', 'desc'); } if ($sort == 3) { $orders = $orders->orderBy('grand_total', 'asc'); } if ($sort == 4) { $orders = $orders->orderBy('grand_total', 'desc'); } } } else { $orders = $orders->orderBy('created_at', 'DESC'); } $orders= $orders->paginate(4); $data['orders'] = $orders; $data['seo']['meta_title'] = 'History Transaksi | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.transactions', $data); } public function transactionDetail($order_code) { $order = Order::with('cart', 'cart.address', 'details', 'details.product', 'details.product.brand', 'midtransTransaction')->where('order_code', $order_code)->firstOrFail(); if ($order->user_id !== Auth::id()) { return redirect()->route('frontend.home.' . lang()); } // if ($order->tracking_code) { // $track = json_decode($this->rajaongkirTrack($order->no_resi, explode('-', $order->cart->courier_type_id)[0])); // if ($track->rajaongkir->status->code == 200) { // $data['track'] = $track; // } // } $data['order'] = $order; $midtrans = null; if ($order->midtransTransaction) { $midtrans = json_decode($order->midtransTransaction->response); } $data['midtrans'] = $midtrans; $data['bank'] = $order->midtransTransaction->bank; $data['payment_code'] = $order->midtransTransaction->payment_code; $data['biller_code'] = $order->midtransTransaction->biller_code; $data['due_date'] = $order->midtransTransaction->due_date; $data['due_time'] = $order->midtransTransaction->due_time; $data['qrcode'] = $order->midtransTransaction->qrcode; $data['seo']['meta_title'] = 'Detail Transaksi | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.order_history_detail', $data); } public function invoicePrint($order_code) { $order = Order::with('details', 'details.product', 'details.product.brand')->where('order_code', $order_code)->firstOrFail(); if ($order->user_id !== Auth::id()) { return redirect()->route('frontend.home.' . lang()); } if ($order->midtransTransaction) { $midtrans = json_decode($order->midtransTransaction->response); } $data['order'] = $order; $data['midtrans'] = $midtrans; $data['bank'] = $order->midtransTransaction->bank; $data['payment_code'] = $order->midtransTransaction->payment_code; $data['biller_code'] = $order->midtransTransaction->biller_code; $data['due_date'] = $order->midtransTransaction->due_date; $data['due_time'] = $order->midtransTransaction->due_time; $data['qrcode'] = $order->midtransTransaction->qrcode; return view('user.invoice', $data); } public function addressList() { $addresses = UserAddress::with('subdistrict', 'city', 'province')->where('user_id', Auth::id())->orderBy('is_default', 'DESC')->get(); $data['addresses'] = $addresses; $data['seo']['meta_title'] = 'Address List | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.address_list', $data); } public function formAddress($edit = false) { if ($edit) { $address = UserAddress::where('user_id', Auth::id())->where('id', $edit)->firstOrFail(); $data['provinces'] = $this->getProvinceEdit($address->province_id); $data['cities'] = $this->getCityEdit($address->province_id, $address->city_id); $data['subdistricts'] = $this->getSubdistrictEdit($address->city_id, $address->subdistrict_id); $data['address'] = $address; $edit = true; } else { $data['provinces'] = $this->getProvince(); } $data['edit'] = $edit; $data['seo']['meta_title'] = 'Addresses | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.form_address', $data); } public function saveFormAddress(Request $request) { $validator = Validator::make( $request->all(), [ 'label' => 'required', 'name' => 'required', 'province' => 'required', 'city' => 'required', 'subdistrict' => 'required', 'postal_code' => 'required|numeric', 'address' => 'required', 'phone_number' => 'required|numeric' ] ); if ($validator->fails()) { return back()->withErrors($validator)->withInput(); } else { $getProvince = explode('-', $request->province); $getCity = explode('-', $request->city); $getSubdistrict = explode('-', $request->subdistrict); $getOtherAddress = UserAddress::where('user_id', Auth::id())->where('is_default', 1)->first(); if ($getOtherAddress) { $default = 0; } else { $default = 1; } if (isset($request->edit)) { $update = UserAddress::where('user_id', Auth::id())->where('id', $request->edit)->first(); $userAddress = $update->update([ 'user_id' => Auth::id(), 'label' => $request->label, 'name' => $request->name, 'province_id' => $getProvince[0], 'province' => $getProvince[1], 'city_id' => $getCity[0], 'city' => $getCity[1], 'subdistrict_id' => $getSubdistrict[0], 'subdistrict' => $getSubdistrict[1], 'postal_code' => $request->postal_code, 'address' => $request->address, 'phone_number' => $request->phone_number ]); $type = 'Updated'; } else { $userAddress = UserAddress::create([ 'user_id' => Auth::id(), 'label' => $request->label, 'name' => $request->name, 'province_id' => $getProvince[0], 'province' => $getProvince[1], 'city_id' => $getCity[0], 'city' => $getCity[1], 'subdistrict_id' => $getSubdistrict[0], 'subdistrict' => $getSubdistrict[1], 'postal_code' => $request->postal_code, 'address' => $request->address, 'phone_number' => $request->phone_number, 'is_default' => $default ]); $type = 'Added'; } if (isset($request->edit)) { $userAddress = UserAddress::where('user_id', Auth::id())->where('id', $request->edit)->first(); } $addressCount = Auth::user()->addresses()->count(); return redirect()->route('frontend.user.address')->with('success', 'Address Successfully ' . $type); } } public function setAsDefaultAddress(Request $request) { $address = UserAddress::where('user_id', Auth::id())->where('id', $request->id)->firstOrFail(); $getAllAddress = UserAddress::where('user_id', Auth::id())->get(); if ($getAllAddress) { foreach ($getAllAddress as $dd) { $dd->update(['is_default' => 0]); } } $address->is_default = 1; $address->save(); $request->session()->flash('success', 'Address has been set to default'); return response()->json(['status' => true, 'message' => 'Address has been set to default']); } public function multiDeleteAddress(Request $request) { $input = Arr::flatten($request->address); foreach ($input as $key => $id) { $item = UserAddress::find($id); if ($item) { if ($item->user_id == Auth::id()) { $item->delete(); } else { return response()->json(['status' => false, 'message' => 'This Address is not yours']); } } else { return response()->json(['status' => false, 'message' => 'cant find address']); } } return response()->json(['status' => true, 'message' => 'Order telah dihapus']); } public function singleDeleteAddress(Request $request) { $item = UserAddress::find($request->id); if ($item) { if ($item->user_id == Auth::id()) { $item->delete(); return response()->json(['status' => true, 'message' => 'Alamat telah dihapus']); } } } public function saveAddress(Request $request) { $validator = Validator::make( $request->all(), [ 'label' => 'required', 'name' => 'required', 'province' => 'required', 'city' => 'required', 'subdistrict' => 'required', 'postal_code' => 'required', 'address' => 'required', 'phone_number' => 'required' ] ); if ($validator->fails()) { return response()->json(['status' => false, 'message' => $validator->messages()]); } else { $getProvince = explode('-', $request->province); $getCity = explode('-', $request->city); $getSubdistrict = explode('-', $request->subdistrict); $default = 0; if ($request->is_default) { $default = 1; $setOtherAddress = UserAddress::where('user_id', Auth::id())->get(); // SET OTHER ADDRESS AS NOT DEFAULT if ($setOtherAddress) { foreach ($setOtherAddress as $dd) { $dd->update(['is_default' => 0]); } } } else { $getOtherAddress = UserAddress::where('user_id', Auth::id())->where('is_default', 1)->first(); if ($getOtherAddress) { $default = 0; } else { $default = 1; } } if (isset($request->edit)) { $update = UserAddress::where('user_id', Auth::id())->where('id', $request->edit)->first(); $userAddress = $update->update([ 'user_id' => Auth::id(), 'label' => $request->label, 'name' => $request->name, 'province_id' => $getProvince[0], 'province' => $getProvince[1], 'city_id' => $getCity[0], 'city' => $getCity[1], 'subdistrict_id' => $getSubdistrict[0], 'subdistrict' => $getSubdistrict[1], 'postal_code' => $request->postal_code, 'address' => $request->address, 'phone_number' => $request->phone_number, 'is_default' => $default ]); } else { $userAddress = UserAddress::create([ 'user_id' => Auth::id(), 'label' => $request->label, 'name' => $request->name, 'province_id' => $getProvince[0], 'province' => $getProvince[1], 'city_id' => $getCity[0], 'city' => $getCity[1], 'subdistrict_id' => $getSubdistrict[0], 'subdistrict' => $getSubdistrict[1], 'postal_code' => $request->postal_code, 'address' => $request->address, 'phone_number' => $request->phone_number, 'is_default' => $default ]); } $cart = Cart::where('is_checkout', 0)->where('user_id', Auth::id())->first(); if (isset($request->edit)) { $userAddress = UserAddress::where('user_id', Auth::id())->where('id', $request->edit)->first(); } $cart->user_address_id = $userAddress->id; $cart->save(); $addressCount = Auth::user()->addresses->count(); return response()->json( [ 'status' => true, 'address' => $request->address, 'subdistrict' => $getSubdistrict[1], 'city' => $getCity[1], 'postal' => $request->postal_code, 'province' => $getProvince[1], 'address_id' => $userAddress->id, 'address_count' => $addressCount, ] ); } } public function wishlist(Request $request) { if ($request->search) { $search = $request->search; $wishlists = Wishlist::with('product')->whereHas('product', function ($query) use ($search) { $query->where('name', 'LIKE', '%' . $search . '%'); })->where('user_id', Auth::id())->get(); } else { $wishlists = Wishlist::with('product')->where('user_id', Auth::id())->paginate(10); } $data['wishlists'] = $wishlists; $data['seo']['meta_title'] = 'Wishlist | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.wishlist', $data); } public function wishlistSearch(Request $request) { return redirect()->route('frontend.user.wishlist', ['search' => $request->search]); } public function setWishlist(Request $request) { $product = Product::find($request->id); // if ($product) { $duplicate = Wishlist::where('product_id', $request->id)->where('user_id', Auth::id())->first(); // find duplicates if ($duplicate) { $duplicate->delete(); if ($request->reload) { $request->session()->flash('success', __('site.shop.success_add_wishlist')); return response()->json(['status' => true]); } return response()->json(['status' => true, 'message' => __('site.shop.success_remove_wishlist'), 'wishlist' => 0]); } else { $wishlist = new Wishlist; $wishlist->product_id = $product->id; $wishlist->user_id = Auth::id(); $wishlist->save(); return response()->json(['status' => true, 'message' => __('site.shop.success_add_wishlist'), 'wishlist' => 1]); } // } return response()->json(['status' => false, 'message' => 'Product not found!']); } public function deleteWishlist(Request $request) { $input = Arr::flatten($request->wishlist); foreach ($input as $key => $id) { $item = Wishlist::find($id); if ($item) { if ($item->user_id == Auth::id()) { $item->delete(); } else { return response()->json(['status' => false, 'message' => 'This wishlist is not yours']); } } else { return response()->json(['status' => false, 'message' => 'cant find wishlist item']); } } $request->session()->flash('success', 'Product has been remove from your wishlist'); return response()->json(['status' => true, 'message' => 'Wishlist telah dihapus']); } public function userNotification() { $user = Auth::user(); $data['user'] = $user; $data['notifications'] = $user->notifications()->orderBy('created_at', 'ASC')->paginate(5); $data['seo']['meta_title'] = 'Notifikasi | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.notification', $data); } public function markAsRead(Request $request) { if (isset($request->notif_id)) { $notif = Auth::user()->unreadNotifications->where('id', $request->notif_id)->markAsRead(); } return response()->json(['status' => true, 'message' => 'ok!']); } public function markAllAsRead(Request $request) { if (Auth::check()) { User::findOrFail(Auth::id())->unreadNotifications->markAsRead(); $request->session()->flash('success', 'Notification has been cleared'); return response()->json(['status' => true, 'message' => 'ok!']); } return response()->json(['status' => false, 'message' => 'Not Allowed!']); } public function userReview() { $needreview = Order::with('details', 'details.product', 'details.product.brand')->where('user_id', Auth::id())->where('order_status_id', 4) ->whereHas('details', function ($query) { $query->where([ 'is_reviewed' => 0 ]); }) ->orderBy('created_at', 'DESC') ->get(); $doneReviews = Order::with('details', 'details.product', 'details.product.brand')->where('user_id', Auth::id())->where('order_status_id', 4) ->whereHas('details', function ($query) { $query->where([ 'is_reviewed' => 1 ]); }) ->orderBy('created_at', 'DESC') ->get(); // dd($doneReviews); // dd($needreview); $data['reviews'] = $needreview; $data['doneReviews'] = $doneReviews; $data['seo']['meta_title'] = 'My Review | Teknik Saurus'; $data['seo']['meta_description'] = 'Dashboard User'; $data['seo']['seo_image'] = asset('images/logo.png'); return view('user.review', $data); } public function saveReview(Request $request) { $validator = Validator::make( $request->all(), [ 'rating' => 'required', ], [ 'rating.required' => 'Please give some star rating', ] ); if ($validator->fails()) { $message = $validator->errors()->all(); $request->session()->flash('error', implode(', ', $message)); return back()->withInput(); } else { $detail = OrderDetail::find($request->detail_id); $detail->is_reviewed = 1; $detail->save(); $review = new ProductReview; $review->product_id = $detail->product->parent_id ? $detail->product->parent_id : $request->product_id; $review->order_id = $request->order_id; $review->order_detail_id = $request->detail_id; $review->rating = $request->rating; $review->description = $request->description; $review->user_id = Auth::id(); $review->save(); return back()->with('success', 'Rating has been send, Thank You.'); } } }