• Tidak ada hasil yang ditemukan

4. IMPLEMENTASI SISTEM. Nama Fitur Activity Diagram Segmen Program. Login User Activity Diagram , 4.3, 4.4

N/A
N/A
Protected

Academic year: 2022

Membagikan "4. IMPLEMENTASI SISTEM. Nama Fitur Activity Diagram Segmen Program. Login User Activity Diagram , 4.3, 4.4"

Copied!
33
0
0

Teks penuh

(1)

4. IMPLEMENTASI SISTEM

Pada bab ini dibahas implementasi dari sistem yang telah dirancang dan dijelaskan pada bab sebelumnya. Pembahasan dilakukan pada fitur-fitur yang terdapat pada Program seperti rancangan pada bab sebelumnya.

Tabel 4.1 Daftar Hubungan Fitur, Activity Diagram, dan Segmen Program

Nama Fitur Activity Diagram Segmen Program

Login User Activity Diagram 3.3 4.1, 4.3, 4.4 Register Activity Diagram 3.5 4.2, 4.5, 4.6 Join Group Buying Activity Diagram 3.7 4.11, 4.12

Tambah Produk Activity Diagram 3.9 4.13

Search Produk Activity Diagram 3.11 4.14, 4.15 Tambah Review Activity Diagram 3.13 4.16, 4.17

4.1. Implementasi Sistem Pada Android 4.1.1. Halaman Awal

Halaman awal merupakan halaman awal yang dibuka oleh website. Pada halaman ini terdapat form register dan form login. Jika, user belum memilik akun, user dapat mengisi form register dan menekan tombol register. Sedangkan, user yang sudah memiliki akun bisa mengisi form login dan menekan tombol login.

Sedangkan pada aplikasi, halaman awal akan menampilkan dua tombol yaitu,

login dan register. Jika user telah memiliki akun dapat menekan tombol login

untuk melakukan login dan menekan tombol register jika belum meliki akun

untuk melakukan proses registrasi. Potongan code Halaman Awal dapat dilihat

pada Segmen Program 4.1 dan 4.2.

(2)

Segmen Program 4.1 Halaman Login Aplikasi

Segmen Program 4.2 Halaman Registrasi Aplikasi

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

}public void login(View view) {

EditText username = findViewById(R.id.username);

EditText password = findViewById(R.id.password);

backgroundWorker backgroundWorker = new backgroundWorker(Login.this);

backgroundWorker.execute("login",username.getText().toString(), password.getText().toString());

}

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_register);

}

public void registerr(View view) {

EditText username = findViewById(R.id.email);

EditText password = findViewById(R.id.passwordd);

EditText phone = findViewById(R.id.phone);

EditText fullname = findViewById(R.id.fullname);

System.out.println(username.getText());

System.out.println(password.getText());

System.out.println(phone.getText());

System.out.println(fullname.getText());

backgroundWorker backgroundWorker = new backgroundWorker(Register.this);

backgroundWorker.execute("register",username.getText().toString (),password.getText().toString(),fullname.getText().toString(), phone.getText().toString());}

(3)

4.1.2. Pengecekan Login

Setelah menginput form login dan menekan tombol login. Maka data yang diinputkan oleh user akan dicek apakah sesuai dengan data yang terdapat di database apa tidak. Jika ya, maka user akan masuk ke halaman utama. Potongan code pengecekan login dapat dilihat pada Segmen Program 4.3

Segmen Program 4.3 Pengecekan Login Aplikasi

4.1.3. Pengecekan Registrasi

include "connect.php";

$username = $_POST['email'];

$userpass = $_POST['password'];

$pass = md5($userpass);

$sql = "SELECT count(*) as c from users where email like '".$username."' and password like '".$pass."'";

$result = mysqli_query($conn, $sql);

$count = mysqli_fetch_assoc($result);

if ($count['c'] > 0) {

$q = "SELECT nama from users where email like '".$username."'";

$result = mysqli_query($conn, $q);

$n = mysqli_fetch_array($result);

$nama = $n['nama'];

echo json_encode(array('Login Success'=>$username."&".$nama));

}else{

echo "Invalid username or password.";

}

(4)

Setelah menginput form registrasi dan menekan tombol sign up. Maka data yang diinputkan user akan dicek apakah sesuai dengan ketentuan registrasi dan apakah email telah digunakan apa belum. Jika semua ketentuan terpenuhi, maka proses registrasi akan berhasil dan data user tersimpan ke dalam database.

Potongan code pengecekan registrasi dapat dilihat pada Segmen Program 4.4

Segmen Program 4.4 Pengecekan Registrasi Aplikasi

4.1.4. Halaman Depan

Halaman depan berisikan produk-produk yang direkomendasikan sistem kepada user dengan menggunakan metode naive bayes. Potongan code Halaman Depan dapat dilihat pada Segmen program 4.5

include "connect.php";

$nama=$_POST["fullname"];

$username=$_POST["email"];

$password=$_POST["password"];

$phone = $_POST["phone"];

$pass = md5($password);

$query = mysqli_query($conn,"select * from users where email like '$username'");

if(mysqli_num_rows($query)==0){

$result="insert into users

values('','$username','$pass','$nama','$phone','')";

$a = mysqli_query($conn,$result);

echo "Successfully registered." ; }

else{

echo "Email already used. Please use another email.";

}

(5)

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

session = new Session(getActivity());

myView =

inflater.inflate(R.layout.index_layout,container,false);

final ListView listView = (ListView) myView.findViewById(R.id.listvieww);

final ArrayList<String> createLists = new ArrayList<>();

final ArrayList<String> createLists2 = new ArrayList<>();

final ArrayList<String> createLists3 = new ArrayList<>();

final ArrayList<String> createLists4 = new ArrayList<>();

backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {

@Override

public void processFinish(String output) { try {

JSONObject j = new JSONObject(output);

JSONArray arr = j.getJSONArray("gethome");

for (int i = 0; i < arr.length(); i++) { JSONObject temp = arr.getJSONObject(i);

createLists.add(temp.getString("url"));

createLists2.add(temp.getString("id"));

createLists3.add(temp.getString("name"));

createLists4.add(temp.getString("date"));}

adapter = new indexAdapter(getActivity(),

createLists,createLists2,createLists3,createLists4);

listView.setAdapter(adapter);

} catch (JSONException e){e.printStackTrace();}

} });

backgroundWorker.execute("gethome",session.getusername());

return myView;

}

(6)

4.1.5. Halaman Produk

Halaman produk menampilkan informasi dari semua produk yaitu, nama produk, deskripsi, harga, tanggal group buying, dll. Dari halaman ini juga user dapat mengikuti group buying dengan menakan tombol join atau simbol shopping cart pada aplikasi dan menambahkan produk kedalam wishlist dengan menekan tombol hati. User juga bisa memberikan review atau diskusi mengenai produk.

Potongan code Halaman Produk dapat dilihat pada Segmen Program 4.6

Segmen Program 4.6 Halaman Produk Aplikasi

protected void onCreate (Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.cardview);

TabHost tabHost =

(TabHost)findViewById(android.R.id.tabhost);

TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1");

TabHost.TabSpec tab2 = tabHost.newTabSpec("tab2");

TabHost.TabSpec tab3 = tabHost.newTabSpec("tab3");

session = new Session(this);

btn = findViewById(R.id.join);

btnback = findViewById(R.id.wish);

tv1 = findViewById(R.id.productName);

tv2 = findViewById(R.id.price);

tv3 = findViewById(R.id.date);

tv4 = findViewById(R.id.member);

tv7 = findViewById(R.id.desc);

img2 = findViewById(R.id.productImage);

if (getIntent().hasExtra("viewanimal")) {

(7)

Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)

try {

JSONObject j = new JSONObject(json);

JSONArray arr = j.getJSONArray("viewanimal");

JSONObject temp = arr.getJSONObject(0);

namaa = temp.getString("nama");

desc = temp.getString("desc");

url = temp.getString("url");

members = temp.getString("members");

datee = temp.getString("end");

id = temp.getString("productId");

lokasi = temp.getString("lokasi");

penjual = temp.getString("penjual");

price = temp.getString("price");

} catch (JSONException e) {e.printStackTrace();}

}tab1.setIndicator("Review");

Intent intentt= new Intent(this,tab1.class);

intentt.putExtra("id",id);

tab1.setContent(intentt);

tab2.setIndicator("Discussion");

Intent intent2= new Intent(this,tab2.class);

intent2.putExtra("id",id);

tab2.setContent(intent2);

tabHost.addTab(tab1);

tabHost.addTab(tab2);

backgroundWorker backgroundWorker2 = new backgroundWorker(new AsyncResponse() {

@Override

public void processFinish(String output) { if (output.equals("joined")) {

(8)

Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)

btnback.setCompoundDrawablesWithIntrinsicBounds( R.drawable.now ish, 0, 0, 0);

requestwish="Remove Wishlist";

} else if (output.equals("not joined")) { requestwish="Wishlist";

btnback.setCompoundDrawablesWithIntrinsicBounds( R.drawable.wis hlist, 0, 0, 0);

} } });

backgroundWorker2.execute("checkwish", id, session.getusername());

btnback.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

backgroundWorker backgroundWorker = new backgroundWorker(List.this);

backgroundWorker.execute("wish", id, session.getusername(), requestwish);

} });

backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {

@Override

public void processFinish(String output) { if (output.equals("joined"))

{ btn.setCompoundDrawablesWithIntrinsicBounds(R.dra wable.removecart, 0, 0, 0);

requestjoin="Cancel";

} else if (output.equals("not joined")) { requestjoin="Join";

btn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.shopping , 0, 0, 0);}

} });

backgroundWorker.execute("checkgroup", id, session.getusername());

(9)

Segmen Program 4.6 Halaman Produk Aplikasi (Lanjutan)

new DownloadImageTask(img2,"1").execute(url);

Locale localeID = new Locale("in", "ID");

NumberFormat formatRupiah = NumberFormat.getCurrencyInstance(localeID);

tv1.setText(namaa);

tv2.setText("Price:

"+formatRupiah.format((double)Integer.parseInt(price.toString() )));

if (datee.contains("-")) {

tv3.setText("Date: already finished");

} else {

tv3.setText("Date: "+datee + " more day until finished");

}

tv4.setText("Members: "+members + " people are join");

tv7.setText(desc);}

public void join(View view) {

backgroundWorker backgroundWorker = new backgroundWorker(List.this);

backgroundWorker.execute("join", id, session.getusername(), requestjoin);

}

@Override

public void onBackPressed() { finish();

} }

(10)

4.1.6. Pengecekan Join Group

Setelah menekan tombol join pada website atau simbol shopping cart pada aplikasi. Maka akan dilakukan pengecekan apakah request user join atau cancel.

Jika join maka user akan mengikuti group buying dan jika cancel maka user akan

batal mengikuti group buying tersebut. Potongan code pengecekan join group

dapat dilihat pada Segmen Program 4.7

(11)

Segmen Program 4.7 Pengecekan Join Group Aplikasi

<?php

include "connect.php";

$username=$_POST["email"];

$id=$_POST["products"];

$check = $_POST['checks'];

$sql1 ="select * from users where email like '".$username."'";

$r1 = mysqli_query($conn,$sql1);

$sqlp= "select * from products where id like '".$id."'";

$rp=mysqli_query($conn,$sqlp);

if($check == "Join"){

while($rowp = mysqli_fetch_array($rp)){

$update = $rowp['members'] += 1;

$sql2="UPDATE products SET members = '".$update."' where id like '".$id."' ";

$r2=mysqli_query($conn,$sql2);}

while($row1 = mysqli_fetch_array($r1)){

$result="insert into members

values('','$id','".$row1['id']."')";

$a = mysqli_query($conn,$result);

echo json_encode(array('Successfully join.'=>$id));}

}else if($check == "Cancel"){

while($rowp = mysqli_fetch_array($rp)){

$r2=mysqli_query($conn,$sql2); } while($row1 = mysqli_fetch_array($r1)){

(12)

Segmen Program 4.7 Pengecekan Join Group Aplikasi (Lanjutan)

4.1.7. Halaman Search Produk

Halaman ini akan menampilkan hasil pencarian produk berdasarkan kata kunci yang telah diinputkan oleh user. Jika tidak ada produk, maka akan menampilkan pesan bahwa produk tidak dapat ditemukan. Potongan code Halaman Search Produk dapat dilihat pada Segmen Program 4.8.

$update = $rowp['members'] -= 1;

$sql2="UPDATE products SET members = '".$update."' where id like '".$id."' ";

$result="delete from members where userId

like'".$row1['id']."' and productId like'".$id."' ";

$a = mysqli_query($conn,$result);

echo json_encode(array('Successfully cancel.'=>$id));}

?>

(13)

Segmen Program 4.8 Halaman Search Produk Aplikasi

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_search);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.search_main, menu);

MenuItem searchItem = menu.findItem(R.id.action_search);

SearchManager searchManager = (SearchManager) search.this.getSystemService(Context.SEARCH_SERVICE);

if (searchItem != null) {

searchView = (SearchView) searchItem.getActionView();

}

if (searchView != null)

{ searchView.setSearchableInfo(searchManager.getSearchableInf o(search.this.getComponentName()));

searchView.setIconified(false);

}

return true;

}

(14)

Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)

@Override

public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item);

}

@Override

protected void onNewIntent(Intent intent) {

if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY);

if (searchView != null) { searchView.clearFocus();

}

new AsyncFetch(query).execute();

} }

private class AsyncFetch extends AsyncTask<String, String, String> {

ProgressDialog pdLoading = new ProgressDialog(search.this);

HttpURLConnection conn;

URL url = null;

String searchQuery;

public AsyncFetch(String searchQuery){

this.searchQuery=searchQuery;

}

@Override

protected void onPreExecute() { super.onPreExecute();

pdLoading.setMessage("\tLoading...");

pdLoading.setCancelable(false);

pdLoading.show();

}

(15)

Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)

@Override

protected String doInBackground(String... params) { try {

url = new URL("http://gruby.store/server/products- search2.php");

} catch (MalformedURLException e) { e.printStackTrace();

return e.toString();

} try {

conn = (HttpURLConnection) url.openConnection();

conn.setReadTimeout(READ_TIMEOUT);

conn.setConnectTimeout(CONNECTION_TIMEOUT);

conn.setRequestMethod("POST");

conn.setDoInput(true);

conn.setDoOutput(true);

Uri.Builder builder = new

Uri.Builder().appendQueryParameter("searchQuery", searchQuery);

String query = builder.build().getEncodedQuery();

OutputStream os = conn.getOutputStream();

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));

writer.write(query);

writer.flush();

writer.close();

os.close();

conn.connect();

}

catch (IOException e1) {

e1.printStackTrace();

return e1.toString();

}

(16)
(17)

Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)

try {

int response_code = conn.getResponseCode();

if (response_code == HttpURLConnection.HTTP_OK) { InputStream input = conn.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(input));

StringBuilder result = new StringBuilder();

String line;

while ((line = reader.readLine()) != null) { result.append(line);

}

return (result.toString());

} else {

return(conn.getResponseCode()+"");

}

} catch (IOException e) { e.printStackTrace();

return e.toString();

} finally {

conn.disconnect();

} }

@Override

protected void onPostExecute(String result) { pdLoading.dismiss();

List<dataProducts> data=new ArrayList<>();

pdLoading.dismiss();

if(result.equals("no rows")) {

Toast.makeText(search.this, "No Results found for entered query", Toast.LENGTH_LONG).show();

}

(18)

Segmen Program 4.8 Halaman Search Produk Aplikasi (Lanjutan)

else{

try {

JSONArray jArray = new JSONArray(result);

for (int i = 0; i < jArray.length(); i++) { JSONObject json_data = jArray.getJSONObject(i);

dataProducts fishData = new dataProducts();

fishData.fishName = json_data.getString("nama");

fishData.catName = json_data.getString("price");

fishData.sizeName = json_data.getString("endDate");

fishData.url = json_data.getString("url");

fishData.id = json_data.getString("id");

data.add(fishData);

}

mRVFish = (RecyclerView) findViewById(R.id.fishPriceList);

mRVFish.addItemDecoration(new

DividerItemDecoration(search.this,DividerItemDecoration.VERTICA L));

mAdapter = new adapterProducts(search.this, data);

mRVFish.setAdapter(mAdapter);

mRVFish.setLayoutManager(newLinearLayoutManager(search.this));

} catch (JSONException e) { Toast.makeText(search.this, e.toString(), Toast.LENGTH_LONG).show();

Toast.makeText(search.this, result.toString(), Toast.LENGTH_LONG).show();}

} } } @Override

public void onBackPressed() {

FragmentManager fragmentManager = getFragmentManager();

fragmentManager.beginTransaction()

.replace(R.id.content_frame, new Index())

(19)

4.1.8. Halaman Review

Halaman ini akan menampilkan review yang telah diberikan oleh user kepada produk tertentu atau balasan review. Pada halaman ini user juga bias memberikan review baru atau membalas review yang sebelumnya telah ada.

Potongan code Halaman Review dapat dilihat pada Segmen Program 4.9.

(20)

Segmen Program 4.9 Halaman Review Aplikasi

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_allreview);

tv1=findViewById(R.id.textView3);

review = findViewById(R.id.reply);

session = new Session(this);

final ListView listView = (ListView) findViewById(R.id.listvieww);

final ArrayList<String> createLists = new ArrayList<>();

final ArrayList<String> createLists2 = new ArrayList<>();

final ArrayList<String> createLists3 = new ArrayList<>();

final ArrayList<String> createLists4 = new ArrayList<>();

final ArrayList<String> createLists5 = new ArrayList<>();

final ArrayList<String> createLists6 = new ArrayList<>();

final ArrayList<String> createLists7 = new ArrayList<>();

final ArrayList<String> createLists8 = new ArrayList<>();

backgroundWorker backgroundWorker = new backgroundWorker(new AsyncResponse() {

@Override

public void processFinish(String output) { try {

JSONObject j = new JSONObject(output);

JSONArray arr = j.getJSONArray("getreviews");

for (int i = 0; i < arr.length(); i++) { JSONObject temp = arr.getJSONObject(i);

(21)

Segmen Program 4.9 Halaman Review Aplikasi (Lanjutan)

name = temp.getString("name");

co = temp.getString("count2");

createLists.add(temp.getString("user"));

createLists2.add(temp.getString("message"));

createLists3.add(temp.getString("date"));

createLists4.add(temp.getString("time"));

createLists5.add(temp.getString("product"));

createLists6.add(temp.getString("review"));

createLists7.add(temp.getString("count"));

createLists8.add(temp.getString("url"));

}

adapter = new reviewAdapter(context,

createLists,createLists2,createLists3,createLists4,createLists5 ,createLists6,createLists7,"all",createLists8,co,name);

listView.setAdapter(adapter);

} catch (JSONException e) { e.printStackTrace();

}

tv1.setText(name +"\n" +"Review");

}

backgroundWorker.execute("getreviews",getIntent().getStringExtr});

a("id"),"getall");

}

public void review(View view) {

Intent intent = new Intent(this,comment.class);

intent.putExtra("id",getIntent().getStringExtra("id"));

intent.putExtra("name",name);

intent.putExtra("type","review");

context.startActivity(intent);

} }

(22)

4.2. Implementasi Sistem Pada Website 4.2.1. Pengecekan Login

Setelah menginput form login dan menekan tombol login. Maka data yang diinputkan oleh user akan dicek apakah sesuai dengan data yang terdapat di database apa tidak. Jika ya, maka user akan masuk ke halaman utama. Potongan code pengecekan login dapat dilihat pada Segmen Program 4.10

Segmen Program 4.10 Pengecekan Login Website

4.2.2. Pengecekan Registrasi

Setelah menginput form registrasi dan menekan tombol sign up. Maka data yang diinputkan user akan dicek apakah sesuai dengan ketentuan registrasi dan apakah email telah digunakan apa belum. Jika semua ketentuan terpenuhi, maka proses registrasi akan berhasil dan data user tersimpan ke dalam database.

Potongan code pengecekan registrasi dapat dilihat pada Segmen Program 4.11

public function usercheck(Request $request){

$pass=md5(trim($request->password));

$a=User::where('email', $request->email)-

>where('password',$pass)->first();

if($request->email=="admin" && $request-

>password=="admin"){

return redirect('/admin');

}else{

if($a){

session()->put('user', $a->email);

return redirect("/home/".$a->id."");

}else{

return redirect('/');

} }

}

(23)

Segmen Program 4.11 Pengecekan Registrasi Website

4.2.3. Halaman Depan

Halaman depan berisikan produk-produk yang direkomendasikan sistem kepada user dengan menggunakan metode naive bayes. Potongan code Halaman Depan dapat dilihat pada Segmen program 4.12

public function store(Request $request){

$this->validate($request,[

'Email' => 'required|e-mail', 'Password' => 'required|min:8', 'nama' => 'required',

'phone' => 'required', 'city' => 'required' ]);

$a=User::where('email', $request->Email)->first();

if(!$a){

$pass=md5(trim($request->Password));

User::create([

'email' => $request->Email, 'password' => $pass,

'nama' => $request->nama, 'nohp' => $request->phone, 'kota' => $request->city ]);

return redirect('/');

}else{

return redirect('/register');

} }

(24)

Segmen Program 4.12 Halaman Depan Website

public function index($id){

$categories = Categorie::all();

$products = Product::paginate(9);

$produks = Product::get();

$naives=Naive::where('userId',$id)->get();

if(!$naives->isEmpty()){

foreach ($produks as $produk) { foreach ($naives as $naive) {

if($naive->buy == 1){

$yes++;

}else{

$no++;

}

$total++;

$bayes = Product::where('id',$naive->productId)->first();

if($bayes->kategori == $produk->kategori && $naive->buy==1){

$kategoriyes++;}

if($bayes->kategori == $produk->kategori && $naive->buy==0){

$kategorino++;}

if($bayes->location == $produk->location && $naive->buy==1){

$lokasiyes++;}

if($bayes->location == $produk->location && $naive->buy==0){

$lokasino++;}

if($bayes->harga <= 1000000 && $produk->harga <= 1000000 &&

$naive->buy==1){

$hargayes++;}

if(1000000<$bayes->harga&& $bayes->harga<=1500000 &&

1000000<$produk->harga && $produk->harga <=1500000 && $naive-

>buy==1){

$hargayes++;}

(25)

Segmen Program 4.12 Halaman Depan Website (Lanjutan)

if($bayes->harga > 1500000 && $produk->harga > 1500000 &&

$naive->buy==1){

$hargayes++;}

if($bayes->harga <= 1000000 && $produk->harga <= 1000000 &&

$naive->buy==0){

$hargano++;}

if(1000000< $bayes->harga && $bayes->harga <=1500000 &&

1000000<$produk->harga && $produk->harga <=1500000 && $naive-

>buy==0){

$hargano++;}

if($bayes->harga > 1500000 && $produk->harga > 1500000 &&

$naive->buy==0){

$hargano++;}

}

if($yes!=0){

$finalyes=(($kategoriyes/$yes)*($lokasiyes/$yes)*($hargayes/$ye s))*($yes/$total);}

if($no!=0){

$finalno=(($kategorino/$no)*($lokasino/$no)*($hargano/$no))*($n o/$total);

}

for ($i=0; $i <=9 ; $i++) {

$count=0;

if($first==0){

$first++;

$resulta[$i]=$finalyes;

$resultb[$i]=$produk->id;}}

return

view('index',['categories'=>$categories,'products'=>$resultb,'p roduct'=>$products]);

}else{

return

view('index',['categories'=>$categories,'products'=>$resultc,'p roduct'=>$products]);

} }

(26)

4.2.4. Halaman Produk

Halaman produk menampilkan informasi dari semua produk yaitu, nama produk, deskripsi, harga, tanggal group buying, dll. Dari halaman ini juga user dapat mengikuti group buying dengan menakan tombol join atau simbol shopping cart pada aplikasi dan menambahkan produk kedalam wishlist dengan menekan tombol hati. User juga bisa memberikan review atau diskusi mengenai produk.

Potongan code Halaman Produk dapat dilihat pada Segmen Program 4.13 Segmen Program 4.13 Halaman Produk Website

public function showProduct($id){

$id = explode( "&" , $id );

$product = Product::where('products.id',$id[0])-

>leftJoin('categories','categories.id','=','products.kategori') ->leftJoin('naives','naives.productId','=','products.id')-

>leftJoin('prices','prices.product','=','products.id')-

>leftJoin('ratings','ratings.productId','=','products.id')-

>leftJoin('users','users.id','=','products.userID')-

>select('products.*','products.harga as

harga','products.members as members','products.id as idproduct','categories.id as

catid','categories.cName','naives.*','prices.*','ratings.*','us ers.nama as seller','users.id as sellerid')->first();

$pictures = Picture::where('pictures.productId',$id[0])->get();

$reviews = Review::where('reviews.productId',$id[0])-

>leftJoin('users','users.id','=','reviews.userId')-

>select('reviews.id as id','reviews.date as

reviewdate','reviews.time as reviewtime','users.nama as

namauser','reviews.message as reviewmessage','users.profile as profile')->get();

$reviewreplies =

Reviewreplie::where('reviewreplies.productId','=',$id)->get();

$count_review = Review::where('reviews.productId',$id[0])-

>select(DB::raw('count(reviews.id) as count'))-

>groupBy('reviews.productId')->first();

(27)

Segmen Program 4.13 Halaman Produk Website (Lanjutan)

$discussions = iscussion::where('discussions.productId',$id[0])-

>leftJoin('users','users.id','=','discussions.userId')-

>select('discussions.id as id','discussions.date as

discussiondate','discussions.time as discussiontime','users.nama as namauser','discussions.message as

discussionmessage','users.profile as profile')->get();

$discussionreplies =

Discussionreplie::where('discussionreplies.productId','=',$id)-

>get();

$count_discussion =

Discussion::where('discussions.productId',$id[0])-

>select(DB::raw('count(discussions.id) as count'))-

>groupBy('discussions.productId')->first();

$categories = Categorie::all();

if(count($id)>1){

$notification=notification::where('id',$id[1])->delete();

}

return view('product/viewsingle',

compact('product','pictures','reviews','count_review','discussio ns','count_discussion','categories','seller'));

}

$count_discussion =

Discussion::where('discussions.productId',$id[0])-

>select(DB::raw('count(discussions.id) as count'))-

>groupBy('discussions.productId')->first();

$categories = Categorie::all();

if(count($id)>1){

$notification=notification::where('id',$id[1])->delete();

}

return view('product/viewsingle',

compact('product','pictures','reviews','count_review','discussio ns','count_discussion','categories','seller'));

}

(28)

4.2.5. Pengecekan Join Group

Setelah menekan tombol join pada website atau simbol shopping cart pada aplikasi. Maka akan dilakukan pengecekan apakah request user join atau cancel.

Jika join maka user akan mengikuti group buying dan jika cancel maka user akan

batal mengikuti group buying tersebut. Potongan code pengecekan join group

dapat dilihat pada Segmen Program 4.14

(29)

Segmen Program 4.14 Pengecekan Join Group Website 4.2.6. Pengecekan Tambah Produk

Setelah mengisi data produk dan menekan tombol tambah. Maka data produk yang telah diinputkan akan dicek apakah sudah lengkap apa tidak. Jika sudah lengkap maka data akan ditambahkan ke dalam database. Jika belum akan

public function wishProduct(Request $request){

$a= $request->productId;

$produk = Product::where('id',$request->productId)-

>first();

if($request->button1 =='join'){

$x = Product::where('id',$request->productId)->first();

$val = $x->members;

Product::where('id',$x->id)->update(['members' => $val+1]);

Member::create([

'productId'=>$request->productId, 'userId'=>$request->userId

]);

notification::create([

'userId'=>$request->userId, 'targetId'=>$x->userID, 'type'=>'join your product', 'productId'=>$request->productId ]);

}else

if($request->response =='cancelJoin'){

$x = Product::where('id',$request->productId)->first();

$val = $x->members;

Product::where('id',$x->id)->update(['members' => $val-1]);

$member = Member::where('productId',$request->productId)-

>where('userId',$request->userId)->first();

(30)

menampilkan error. Potongan code pengecekan tambah produk dapat dilihat pada Segmen Program 4.15

Segmen Program 4.15 Pengecekan Tambah Produk Website

public function storeProduct(Request $request){

$this->validate($request,[

'nama' => 'required', 'harga'=> 'required', 'deskripsi'=> 'required', 'startDate'=> 'required', 'endDate'=> 'required', ]);

$user=session()->get('user');

$get = User::where('email',$user)->first();

$id=$get->id;

$loc=$get->kota;

$counter=0;

if($request->file()){

$files = $request->file();

foreach($files as $file) {

for ($i=0; $i < count($file);$i++){

(31)

Segmen Program 4.15 Pengecekan Tambah Produk Website (Lanjutan) if($file[$i]->getClientSize() > 5242880){

$count++;

}}}

}if($counter==0){

Product::create([

'nama'=>$request->nama, 'userId'=>$id,

'deskripsi'=>$request->deskripsi, 'kategori'=>$request->kategori, 'startDate'=>$request->startDate, 'endDate'=>$request->endDate, 'location'=>$loc,

'harga'=>$request->harga ]);

$get2 = Product::where('nama',$request->nama)->where('userId',$id)->first();

$id2=$get2->id;

if($request->file()){

$files = $request->file();

$destinationPathImg = 'public/images';

foreach($files as $file) { for ($i=0; $i < count($file);$i++){

Picture::create([

'name' => $file[$i]->getClientOriginalName(), 'size' => $file[$i]->getClientSize(),

'type' => $file[$i]->getClientMimeType(), 'productId'=>$id2]);

$file[$i]->move($destinationPathImg,$file[$i]->getClientOriginalName());}

(32)

Segmen Program 4.15 Pengecekan Tambah Produk Website (Lanjutan)

4.2.7. Halaman Search Produk

} }

if($request->orang1 != "" && $request->harga1 != ""){

Price::create([

'product'=> $id2,

'member_req'=> $request->orang1, 'price'=>$request->harga1

]);

if($request->orang2 != "" && $request->harga2 != ""){

Price::create([

'product'=> $id2,

'member_req'=> $request->orang2, 'price'=>$request->harga2

]);

if($request->orang3 != "" && $request->harga3 != ""){

Price::create([

'product'=> $id2,

'member_req'=> $request->orang3, 'price'=>$request->harga3

]);

} }

} }

return view('product/add');

}

(33)

Halaman ini akan menampilkan hasil pencarian produk berdasarkan kata kunci yang telah diinputkan oleh user. Jika tidak ada produk, maka akan menampilkan pesan bahwa produk tidak dapat ditemukan. Potongan code Halaman Search Produk dapat dilihat pada Segmen Program 4.16.

Segmen Program 4.16 Halaman Search Produk Website

4.2.8. Halaman Review

Halaman ini akan menampilkan review yang telah diberikan oleh user kepada produk tertentu atau balasan review. Pada halaman ini user juga bias memberikan review baru atau membalas review yang sebelumnya telah ada.

Potongan code Halaman Review dapat dilihat pada Segmen Program 4.17.

Segmen Program 4.17 Halaman Review Website

public function searchProduct(Request $request){

$products = Product::where('nama','LIKE','%'.$request-

>searchItem.'%')->paginate(9);

$categories = Categorie::all();

return view('product.index',compact('categories','products'));

}

$reviews = Review::where('reviews.productId',$id[0])-

>leftJoin('users','users.id','=','reviews.userId')-

>select('reviews.id as id','reviews.date as

reviewdate','reviews.time as reviewtime','users.nama as

namauser','reviews.message as reviewmessage','users.profile as profile')->get();

$reviewreplies =

Reviewreplie::where('reviewreplies.productId','=',$id)->get();

$count_review = Review::where('reviews.productId',$id[0])-

>select(DB::raw('count(reviews.id) as count'))-

>groupBy('reviews.productId')->first();

$members= Member::find($member->id);

$members->delete();}

return redirect()->route('singleProduct', ['id'=> $a]);

Gambar

Tabel 4.1 Daftar Hubungan Fitur, Activity Diagram, dan Segmen Program

Referensi

Dokumen terkait