Muhammad Iqbal Afandi 4 лет назад
Родитель
Сommit
19a9f3d26e
31 измененных файлов: 2088 добавлений и 48 удалений
  1. 4
    4
      app/Http/Controllers/StockProductController.php
  2. 7
    0
      app/Models/Customer.php
  3. 7
    1
      app/Models/Product.php
  4. 10
    0
      app/Models/Purchase.php
  5. 10
    0
      app/Models/Sale.php
  6. 18
    0
      app/Models/StockProduct.php
  7. 8
    0
      app/Models/Supplier.php
  8. 13
    13
      app/Policies/StockProductPolicy.php
  9. 35
    0
      database/migrations/2022_06_16_091344_create_customers_table.php
  10. 34
    0
      database/migrations/2022_06_16_091344_create_products_table.php
  11. 36
    0
      database/migrations/2022_06_16_091344_create_suppliers_table.php
  12. 38
    0
      database/migrations/2022_06_16_091424_create_purchases_table.php
  13. 38
    0
      database/migrations/2022_06_16_091443_create_sales_table.php
  14. 35
    0
      database/migrations/2022_06_16_092657_create_stock_products_table.php
  15. 72
    1
      designs/diagrams/database.puml
  16. Двоичные данные
      designs/diagrams/database/Database.png
  17. 117
    0
      designs/diagrams/database/Database.svg
  18. 2
    2
      public/js/resources_js_pages_Customers_Index_vue.js
  19. 2
    2
      public/js/resources_js_pages_Dashboards_Index_vue.js
  20. 2
    2
      public/js/resources_js_pages_Purchases_Index_vue.js
  21. 2
    2
      public/js/resources_js_pages_Sales_Index_vue.js
  22. 1577
    0
      public/js/resources_js_pages_StockProducts_Index_vue.js
  23. 2
    2
      public/js/resources_js_pages_Suppliers_Index_vue.js
  24. 2
    2
      public/js/resources_js_pages_Users_Create_vue.js
  25. 2
    2
      public/js/resources_js_pages_Users_Edit_vue.js
  26. 2
    2
      public/js/resources_js_pages_Users_Index_vue.js
  27. 2
    2
      public/js/resources_js_pages_Users_Show_vue.js
  28. 7
    7
      public/js/vue.js
  29. 0
    0
      resources/js/pages/StockProducts/Index.vue
  30. 2
    2
      resources/js/utils/menu.js
  31. 2
    2
      routes/web.php

app/Http/Controllers/StocksController.php → app/Http/Controllers/StockProductController.php Просмотреть файл

2
 
2
 
3
 namespace App\Http\Controllers;
3
 namespace App\Http\Controllers;
4
 
4
 
5
-use App\Models\Stock;
5
+use App\Models\StockProduct;
6
 use Illuminate\Http\Request;
6
 use Illuminate\Http\Request;
7
 
7
 
8
-class StocksController extends Controller
8
+class StockProductController extends Controller
9
 {
9
 {
10
     public function __construct()
10
     public function __construct()
11
     {
11
     {
12
-        $this->authorizeResource(Stock::class);
12
+        $this->authorizeResource(StockProduct::class);
13
     }
13
     }
14
 
14
 
15
     /**
15
     /**
19
      */
19
      */
20
     public function index()
20
     public function index()
21
     {
21
     {
22
-        return inertia('Stocks/Index.vue');
22
+        return inertia('StockProducts/Index');
23
     }
23
     }
24
 
24
 
25
     /**
25
     /**

+ 7
- 0
app/Models/Customer.php Просмотреть файл

8
 class Customer extends Model
8
 class Customer extends Model
9
 {
9
 {
10
     use HasFactory;
10
     use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'name',
14
+        'address',
15
+        'phone',
16
+        'npwp'
17
+    ];
11
 }
18
 }

app/Models/Stock.php → app/Models/Product.php Просмотреть файл

5
 use Illuminate\Database\Eloquent\Factories\HasFactory;
5
 use Illuminate\Database\Eloquent\Factories\HasFactory;
6
 use Illuminate\Database\Eloquent\Model;
6
 use Illuminate\Database\Eloquent\Model;
7
 
7
 
8
-class Stock extends Model
8
+class Product extends Model
9
 {
9
 {
10
     use HasFactory;
10
     use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'number',
14
+        'name',
15
+        'unit'
16
+    ];
11
 }
17
 }

+ 10
- 0
app/Models/Purchase.php Просмотреть файл

8
 class Purchase extends Model
8
 class Purchase extends Model
9
 {
9
 {
10
     use HasFactory;
10
     use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'price',
14
+        'ppn11',
15
+        'qty',
16
+        'product_number',
17
+        'product_id',
18
+        'supplier_id',
19
+        'user_id'
20
+    ];
11
 }
21
 }

+ 10
- 0
app/Models/Sale.php Просмотреть файл

8
 class Sale extends Model
8
 class Sale extends Model
9
 {
9
 {
10
     use HasFactory;
10
     use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'price',
14
+        'ppn11',
15
+        'qty',
16
+        'invoice_number',
17
+        'product_id',
18
+        'customers_id',
19
+        'user_id'
20
+    ];
11
 }
21
 }

+ 18
- 0
app/Models/StockProduct.php Просмотреть файл

1
+<?php
2
+
3
+namespace App\Models;
4
+
5
+use Illuminate\Database\Eloquent\Factories\HasFactory;
6
+use Illuminate\Database\Eloquent\Model;
7
+
8
+class StockProduct extends Model
9
+{
10
+    use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'product_number',
14
+        'invoice_number',
15
+        'amount',
16
+        'product_id'
17
+    ];
18
+}

+ 8
- 0
app/Models/Supplier.php Просмотреть файл

8
 class Supplier extends Model
8
 class Supplier extends Model
9
 {
9
 {
10
     use HasFactory;
10
     use HasFactory;
11
+
12
+    protected $fillable = [
13
+        'name',
14
+        'address',
15
+        'phone',
16
+        'email',
17
+        'npwp'
18
+    ];
11
 }
19
 }

app/Policies/StockPolicy.php → app/Policies/StockProductPolicy.php Просмотреть файл

2
 
2
 
3
 namespace App\Policies;
3
 namespace App\Policies;
4
 
4
 
5
-use App\Models\Stock;
5
+use App\Models\StockProduct;
6
 use App\Models\User;
6
 use App\Models\User;
7
 use Illuminate\Auth\Access\HandlesAuthorization;
7
 use Illuminate\Auth\Access\HandlesAuthorization;
8
 
8
 
9
-class StockPolicy
9
+class StockProductPolicy
10
 {
10
 {
11
     use HandlesAuthorization;
11
     use HandlesAuthorization;
12
 
12
 
25
      * Determine whether the user can view the model.
25
      * Determine whether the user can view the model.
26
      *
26
      *
27
      * @param  \App\Models\User  $user
27
      * @param  \App\Models\User  $user
28
-     * @param  \App\Models\Stock  $stock
28
+     * @param  \App\Models\StockProduct  $stockProduct
29
      * @return \Illuminate\Auth\Access\Response|bool
29
      * @return \Illuminate\Auth\Access\Response|bool
30
      */
30
      */
31
-    public function view(User $user, Stock $stock)
31
+    public function view(User $user, StockProduct $stockProduct)
32
     {
32
     {
33
         return $user->role_id === 3;
33
         return $user->role_id === 3;
34
     }
34
     }
48
      * Determine whether the user can update the model.
48
      * Determine whether the user can update the model.
49
      *
49
      *
50
      * @param  \App\Models\User  $user
50
      * @param  \App\Models\User  $user
51
-     * @param  \App\Models\Stock  $stock
51
+     * @param  \App\Models\StockProduct  $stockProduct
52
      * @return \Illuminate\Auth\Access\Response|bool
52
      * @return \Illuminate\Auth\Access\Response|bool
53
      */
53
      */
54
-    public function update(User $user, Stock $stock)
54
+    public function update(User $user, StockProduct $stockProduct)
55
     {
55
     {
56
         return $user->role_id === 3;
56
         return $user->role_id === 3;
57
     }
57
     }
60
      * Determine whether the user can delete the model.
60
      * Determine whether the user can delete the model.
61
      *
61
      *
62
      * @param  \App\Models\User  $user
62
      * @param  \App\Models\User  $user
63
-     * @param  \App\Models\Stock  $stock
63
+     * @param  \App\Models\StockProduct  $stockProduct
64
      * @return \Illuminate\Auth\Access\Response|bool
64
      * @return \Illuminate\Auth\Access\Response|bool
65
      */
65
      */
66
-    public function delete(User $user, Stock $stock)
66
+    public function delete(User $user, StockProduct $stockProduct)
67
     {
67
     {
68
-        return $user->role_id === 3;
68
+        //
69
     }
69
     }
70
 
70
 
71
     /**
71
     /**
72
      * Determine whether the user can restore the model.
72
      * Determine whether the user can restore the model.
73
      *
73
      *
74
      * @param  \App\Models\User  $user
74
      * @param  \App\Models\User  $user
75
-     * @param  \App\Models\Stock  $stock
75
+     * @param  \App\Models\StockProduct  $stockProduct
76
      * @return \Illuminate\Auth\Access\Response|bool
76
      * @return \Illuminate\Auth\Access\Response|bool
77
      */
77
      */
78
-    public function restore(User $user, Stock $stock)
78
+    public function restore(User $user, StockProduct $stockProduct)
79
     {
79
     {
80
         //
80
         //
81
     }
81
     }
84
      * Determine whether the user can permanently delete the model.
84
      * Determine whether the user can permanently delete the model.
85
      *
85
      *
86
      * @param  \App\Models\User  $user
86
      * @param  \App\Models\User  $user
87
-     * @param  \App\Models\Stock  $stock
87
+     * @param  \App\Models\StockProduct  $stockProduct
88
      * @return \Illuminate\Auth\Access\Response|bool
88
      * @return \Illuminate\Auth\Access\Response|bool
89
      */
89
      */
90
-    public function forceDelete(User $user, Stock $stock)
90
+    public function forceDelete(User $user, StockProduct $stockProduct)
91
     {
91
     {
92
         //
92
         //
93
     }
93
     }

+ 35
- 0
database/migrations/2022_06_16_091344_create_customers_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('customers', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->string('name');
19
+            $table->string('address');
20
+            $table->string('phone')->unique();
21
+            $table->string('npwp')->unique();
22
+            $table->timestamps();
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::dropIfExists('customers');
34
+    }
35
+};

+ 34
- 0
database/migrations/2022_06_16_091344_create_products_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('products', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->string('number');
19
+            $table->string('name');
20
+            $table->string('unit');
21
+            $table->timestamps();
22
+        });
23
+    }
24
+
25
+    /**
26
+     * Reverse the migrations.
27
+     *
28
+     * @return void
29
+     */
30
+    public function down()
31
+    {
32
+        Schema::dropIfExists('products');
33
+    }
34
+};

+ 36
- 0
database/migrations/2022_06_16_091344_create_suppliers_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('suppliers', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->string('name');
19
+            $table->string('address');
20
+            $table->string('phone')->unique();
21
+            $table->string('email')->unique();
22
+            $table->string('npwp')->unique();
23
+            $table->timestamps();
24
+        });
25
+    }
26
+
27
+    /**
28
+     * Reverse the migrations.
29
+     *
30
+     * @return void
31
+     */
32
+    public function down()
33
+    {
34
+        Schema::dropIfExists('suppliers');
35
+    }
36
+};

+ 38
- 0
database/migrations/2022_06_16_091424_create_purchases_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('purchases', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->unsignedInteger('price');
19
+            $table->unsignedInteger('ppn11');
20
+            $table->unsignedInteger('qty');
21
+            $table->string('product_number')->unique();
22
+            $table->foreignId('product_id')->constrained();
23
+            $table->foreignId('supplier_id')->constrained();
24
+            $table->foreignId('user_id')->constrained();
25
+            $table->timestamps();
26
+        });
27
+    }
28
+
29
+    /**
30
+     * Reverse the migrations.
31
+     *
32
+     * @return void
33
+     */
34
+    public function down()
35
+    {
36
+        Schema::dropIfExists('purchases');
37
+    }
38
+};

+ 38
- 0
database/migrations/2022_06_16_091443_create_sales_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('sales', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->unsignedInteger('price');
19
+            $table->unsignedInteger('ppn11');
20
+            $table->unsignedInteger('qty');
21
+            $table->string('invoice_number')->unique();
22
+            $table->foreignId('product_id')->constrained();
23
+            $table->foreignId('customers_id')->constrained();
24
+            $table->foreignId('user_id')->constrained();
25
+            $table->timestamps();
26
+        });
27
+    }
28
+
29
+    /**
30
+     * Reverse the migrations.
31
+     *
32
+     * @return void
33
+     */
34
+    public function down()
35
+    {
36
+        Schema::dropIfExists('sales');
37
+    }
38
+};

+ 35
- 0
database/migrations/2022_06_16_092657_create_stock_products_table.php Просмотреть файл

1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     *
12
+     * @return void
13
+     */
14
+    public function up()
15
+    {
16
+        Schema::create('stock_products', function (Blueprint $table) {
17
+            $table->id();
18
+            $table->string('product_number');
19
+            $table->string('invoice_number');
20
+            $table->string('amount');
21
+            $table->foreignId('product_id')->constrained();
22
+            $table->timestamps();
23
+        });
24
+    }
25
+
26
+    /**
27
+     * Reverse the migrations.
28
+     *
29
+     * @return void
30
+     */
31
+    public function down()
32
+    {
33
+        Schema::dropIfExists('stock_products');
34
+    }
35
+};

+ 72
- 1
designs/diagrams/database.puml Просмотреть файл

7
   * username
7
   * username
8
   * status
8
   * status
9
   * password
9
   * password
10
+  _
10
   * role_id
11
   * role_id
11
 }
12
 }
12
 
13
 
16
   * name
17
   * name
17
 }
18
 }
18
 
19
 
19
-User ||--|{ Role
20
+entity Customer {
21
+  * id
22
+  __
23
+  * name
24
+  * address
25
+  * phone
26
+  * npwp
27
+}
28
+
29
+entity Product {
30
+  * id
31
+  __
32
+  * number
33
+  * name
34
+  * unit
35
+}
36
+
37
+entity Supplier {
38
+  * id
39
+  __
40
+  * name
41
+  * address
42
+  * phone
43
+  * email
44
+  * npwp
45
+}
46
+
47
+entity Purchase {
48
+  * id
49
+  __ 
50
+  * price
51
+  * ppn11
52
+  * qty
53
+  * product_number
54
+  __
55
+  * product_id
56
+  * supplier_id
57
+  * user_id
58
+}
59
+
60
+entity Sales {
61
+  * id
62
+  __
63
+    * price
64
+  * ppn11
65
+  * qty
66
+  * invoice_number
67
+  __
68
+  * product_id
69
+  * customer_id
70
+  * user_id
71
+}
72
+
73
+entity StockProduct {
74
+  * id
75
+  __
76
+  * product_number
77
+  * invoice_number
78
+  * amount
79
+  __
80
+  * product_id
81
+}
82
+
83
+User ||--|{ Role
84
+Purchase ||--|{ Product
85
+Purchase ||--|{ Supplier
86
+Purchase ||--|{ User
87
+Sales ||--|{ Product
88
+Sales ||--|{ Customer
89
+Sales ||--|{ User
90
+StockProduct ||--|| Product

Двоичные данные
designs/diagrams/database/Database.png Просмотреть файл


+ 117
- 0
designs/diagrams/database/Database.svg Просмотреть файл

1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="513px" preserveAspectRatio="none" style="width:484px;height:513px;background:#FFFFFF;" version="1.1" viewBox="0 0 484 513" width="484px" zoomAndPan="magnify"><defs><filter height="300%" id="f1hkszgv5r3tlw" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--MD5=[3fd616f346a44cd59a91eb10b19e157c]
2
+class User--><rect codeLine="2" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="136.5425" id="User" style="stroke:#A80036;stroke-width:1.5;" width="76" x="129.5" y="229"/><ellipse cx="152.15" cy="245" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M148.2906,250.5 L148.2906,239.2969 L156.3219,239.2969 L156.3219,241.1875 L150.7438,241.1875 L150.7438,243.8906 L155.8219,243.8906 L155.8219,245.7813 L150.7438,245.7813 L150.7438,248.6094 L156.6656,248.6094 L156.6656,250.5 L148.2906,250.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="27" x="167.85" y="249.3564">User</text><line style="stroke:#A80036;stroke-width:1.5;" x1="130.5" x2="204.5" y1="261" y2="261"/><ellipse cx="140.5" cy="272" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="149.5" y="275.3179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="130.5" x2="204.5" y1="281.6489" y2="281.6489"/><ellipse cx="140.5" cy="292.6489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="26" x="149.5" y="295.9668">name</text><ellipse cx="140.5" cy="305.2979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="48" x="149.5" y="308.6157">username</text><ellipse cx="140.5" cy="317.9468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="30" x="149.5" y="321.2646">status</text><ellipse cx="140.5" cy="330.5957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="50" x="149.5" y="333.9136">password</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="6" x="149.5" y="346.5625">_</text><ellipse cx="140.5" cy="355.8936" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="32" x="149.5" y="359.2114">role_id</text><!--MD5=[a3638c1e5b65d287ecad7f06f5c0f212]
3
+class Role--><rect codeLine="13" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="73.2979" id="Role" style="stroke:#A80036;stroke-width:1.5;" width="58" x="138.5" y="426"/><ellipse cx="153.5" cy="442" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M149.6406,447.5 L149.6406,436.2969 L157.6719,436.2969 L157.6719,438.1875 L152.0938,438.1875 L152.0938,440.8906 L157.1719,440.8906 L157.1719,442.7813 L152.0938,442.7813 L152.0938,445.6094 L158.0156,445.6094 L158.0156,447.5 L149.6406,447.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="26" x="167.5" y="446.3564">Role</text><line style="stroke:#A80036;stroke-width:1.5;" x1="139.5" x2="195.5" y1="458" y2="458"/><ellipse cx="149.5" cy="469" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="158.5" y="472.3179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="139.5" x2="195.5" y1="478.6489" y2="478.6489"/><ellipse cx="149.5" cy="489.6489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="26" x="158.5" y="492.9668">name</text><!--MD5=[2ce0c9fb7f55b1e256ab28a8ea6b25ec]
4
+class Customer--><rect codeLine="19" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="111.2446" id="Customer" style="stroke:#A80036;stroke-width:1.5;" width="87" x="7" y="242"/><ellipse cx="22" cy="258" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M18.1406,263.5 L18.1406,252.2969 L26.1719,252.2969 L26.1719,254.1875 L20.5938,254.1875 L20.5938,256.8906 L25.6719,256.8906 L25.6719,258.7813 L20.5938,258.7813 L20.5938,261.6094 L26.5156,261.6094 L26.5156,263.5 L18.1406,263.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="55" x="36" y="262.3564">Customer</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="93" y1="274" y2="274"/><ellipse cx="18" cy="285" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="27" y="288.3179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="8" x2="93" y1="294.6489" y2="294.6489"/><ellipse cx="18" cy="305.6489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="26" x="27" y="308.9668">name</text><ellipse cx="18" cy="318.2979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="40" x="27" y="321.6157">address</text><ellipse cx="18" cy="330.9468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="30" x="27" y="334.2646">phone</text><ellipse cx="18" cy="343.5957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="27" y="346.9136">npwp</text><!--MD5=[72136138052d025cffdce3c22fbd185f]
5
+class Product--><rect codeLine="28" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="98.5957" id="Product" style="stroke:#A80036;stroke-width:1.5;" width="74" x="240.5" y="248"/><ellipse cx="255.5" cy="264" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M251.6406,269.5 L251.6406,258.2969 L259.6719,258.2969 L259.6719,260.1875 L254.0938,260.1875 L254.0938,262.8906 L259.1719,262.8906 L259.1719,264.7813 L254.0938,264.7813 L254.0938,267.6094 L260.0156,267.6094 L260.0156,269.5 L251.6406,269.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="42" x="269.5" y="268.3564">Product</text><line style="stroke:#A80036;stroke-width:1.5;" x1="241.5" x2="313.5" y1="280" y2="280"/><ellipse cx="251.5" cy="291" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="260.5" y="294.3179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="241.5" x2="313.5" y1="300.6489" y2="300.6489"/><ellipse cx="251.5" cy="311.6489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="36" x="260.5" y="314.9668">number</text><ellipse cx="251.5" cy="324.2979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="26" x="260.5" y="327.6157">name</text><ellipse cx="251.5" cy="336.9468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="17" x="260.5" y="340.2646">unit</text><!--MD5=[6f6af049516bc56aac6e320b3234ce97]
6
+class Supplier--><rect codeLine="36" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="123.8936" id="Supplier" style="stroke:#A80036;stroke-width:1.5;" width="78" x="349.5" y="235.5"/><ellipse cx="364.5" cy="251.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M360.6406,257 L360.6406,245.7969 L368.6719,245.7969 L368.6719,247.6875 L363.0938,247.6875 L363.0938,250.3906 L368.1719,250.3906 L368.1719,252.2813 L363.0938,252.2813 L363.0938,255.1094 L369.0156,255.1094 L369.0156,257 L360.6406,257 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="46" x="378.5" y="255.8564">Supplier</text><line style="stroke:#A80036;stroke-width:1.5;" x1="350.5" x2="426.5" y1="267.5" y2="267.5"/><ellipse cx="360.5" cy="278.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="369.5" y="281.8179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="350.5" x2="426.5" y1="288.1489" y2="288.1489"/><ellipse cx="360.5" cy="299.1489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="26" x="369.5" y="302.4668">name</text><ellipse cx="360.5" cy="311.7979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="40" x="369.5" y="315.1157">address</text><ellipse cx="360.5" cy="324.4468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="30" x="369.5" y="327.7646">phone</text><ellipse cx="360.5" cy="337.0957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="24" x="369.5" y="340.4136">email</text><ellipse cx="360.5" cy="349.7446" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="28" x="369.5" y="353.0625">npwp</text><!--MD5=[ca228764f84c38a6bbd29bae3074bbc7]
7
+class Purchase--><rect codeLine="46" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="161.8403" id="Purchase" style="stroke:#A80036;stroke-width:1.5;" width="105" x="225" y="7"/><ellipse cx="249" cy="23" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M245.1406,28.5 L245.1406,17.2969 L253.1719,17.2969 L253.1719,19.1875 L247.5938,19.1875 L247.5938,21.8906 L252.6719,21.8906 L252.6719,23.7813 L247.5938,23.7813 L247.5938,26.6094 L253.5156,26.6094 L253.5156,28.5 L245.1406,28.5 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="53" x="265" y="27.3564">Purchase</text><line style="stroke:#A80036;stroke-width:1.5;" x1="226" x2="329" y1="39" y2="39"/><ellipse cx="236" cy="50" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="245" y="53.3179">id</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="12" x="245" y="65.9668">__</text><ellipse cx="236" cy="75.2979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="24" x="245" y="78.6157">price</text><ellipse cx="236" cy="87.9468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="30" x="245" y="91.2646">ppn11</text><ellipse cx="236" cy="100.5957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="15" x="245" y="103.9136">qty</text><ellipse cx="236" cy="113.2446" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="79" x="245" y="116.5625">product_number</text><line style="stroke:#A80036;stroke-width:1.5;" x1="226" x2="329" y1="122.8936" y2="122.8936"/><ellipse cx="236" cy="133.8936" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="245" y="137.2114">product_id</text><ellipse cx="236" cy="146.5425" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="52" x="245" y="149.8604">supplier_id</text><ellipse cx="236" cy="159.1914" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="36" x="245" y="162.5093">user_id</text><!--MD5=[b6587b47cb08bf742060086bd1cd0b7e]
8
+class Sales--><rect codeLine="59" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="157.1914" id="Sales" style="stroke:#A80036;stroke-width:1.5;" width="102" x="87.5" y="9.5"/><ellipse cx="119.6" cy="25.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M115.7406,31 L115.7406,19.7969 L123.7719,19.7969 L123.7719,21.6875 L118.1938,21.6875 L118.1938,24.3906 L123.2719,24.3906 L123.2719,26.2813 L118.1938,26.2813 L118.1938,29.1094 L124.1156,29.1094 L124.1156,31 L115.7406,31 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="32" x="137.4" y="29.8564">Sales</text><line style="stroke:#A80036;stroke-width:1.5;" x1="88.5" x2="188.5" y1="41.5" y2="41.5"/><ellipse cx="98.5" cy="52.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="107.5" y="55.8179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="88.5" x2="188.5" y1="62.1489" y2="62.1489"/><ellipse cx="98.5" cy="73.1489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="24" x="107.5" y="76.4668">price</text><ellipse cx="98.5" cy="85.7979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="30" x="107.5" y="89.1157">ppn11</text><ellipse cx="98.5" cy="98.4468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="15" x="107.5" y="101.7646">qty</text><ellipse cx="98.5" cy="111.0957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="76" x="107.5" y="114.4136">invoice_number</text><line style="stroke:#A80036;stroke-width:1.5;" x1="88.5" x2="188.5" y1="120.7446" y2="120.7446"/><ellipse cx="98.5" cy="131.7446" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="107.5" y="135.0625">product_id</text><ellipse cx="98.5" cy="144.3936" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="59" x="107.5" y="147.7114">customer_id</text><ellipse cx="98.5" cy="157.0425" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="36" x="107.5" y="160.3604">user_id</text><!--MD5=[0cfc926ac851c171b4800cdea9975fdf]
9
+class StockProduct--><rect codeLine="72" fill="#FEFECE" filter="url(#f1hkszgv5r3tlw)" height="119.2446" id="StockProduct" style="stroke:#A80036;stroke-width:1.5;" width="105" x="365" y="28.5"/><ellipse cx="380.45" cy="44.5" fill="#ADD1B2" rx="11" ry="11" style="stroke:#A80036;stroke-width:1.0;"/><path d="M376.5906,50 L376.5906,38.7969 L384.6219,38.7969 L384.6219,40.6875 L379.0438,40.6875 L379.0438,43.3906 L384.1219,43.3906 L384.1219,45.2813 L379.0438,45.2813 L379.0438,48.1094 L384.9656,48.1094 L384.9656,50 L376.5906,50 Z " fill="#000000"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacing" textLength="72" x="394.55" y="48.8564">StockProduct</text><line style="stroke:#A80036;stroke-width:1.5;" x1="366" x2="469" y1="60.5" y2="60.5"/><ellipse cx="376" cy="71.5" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="8" x="385" y="74.8179">id</text><line style="stroke:#A80036;stroke-width:1.5;" x1="366" x2="469" y1="81.1489" y2="81.1489"/><ellipse cx="376" cy="92.1489" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="79" x="385" y="95.4668">product_number</text><ellipse cx="376" cy="104.7979" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="76" x="385" y="108.1157">invoice_number</text><ellipse cx="376" cy="117.4468" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="35" x="385" y="120.7646">amount</text><line style="stroke:#A80036;stroke-width:1.5;" x1="366" x2="469" y1="127.0957" y2="127.0957"/><ellipse cx="376" cy="138.0957" fill="#000000" rx="3" ry="3" style="stroke:#000000;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacing" textLength="51" x="385" y="141.4136">product_id</text><!--MD5=[70c37dc9bfbc8656942103c36f1181e4]
10
+link User to Role--><path codeLine="82" d="M167.5,374.42 C167.5,389.28 167.5,404.38 167.5,417.75 " fill="none" id="User-Role" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="167.5" x2="173.5" y1="417.83" y2="425.83"/><line style="stroke:#A80036;stroke-width:1.0;" x1="167.5" x2="161.5" y1="417.83" y2="425.83"/><line style="stroke:#A80036;stroke-width:1.0;" x1="167.5" x2="167.5" y1="417.83" y2="425.83"/><line style="stroke:#A80036;stroke-width:1.0;" x1="171.5" x2="163.5" y1="415.83" y2="415.83"/><line style="stroke:#A80036;stroke-width:1.0;" x1="163.5" x2="171.5" y1="370.21" y2="370.21"/><line style="stroke:#A80036;stroke-width:1.0;" x1="163.5" x2="171.5" y1="373.21" y2="373.21"/><line style="stroke:#A80036;stroke-width:1.0;" x1="167.5" x2="167.5" y1="374.21" y2="366.21"/><!--MD5=[f93227767273e9144af813cf724a60c6]
11
+link Purchase to Product--><path codeLine="83" d="M277.5,177.38 C277.5,198.56 277.5,220.61 277.5,239.89 " fill="none" id="Purchase-Product" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="277.5" x2="283.5" y1="239.98" y2="247.98"/><line style="stroke:#A80036;stroke-width:1.0;" x1="277.5" x2="271.5" y1="239.98" y2="247.98"/><line style="stroke:#A80036;stroke-width:1.0;" x1="277.5" x2="277.5" y1="239.98" y2="247.98"/><line style="stroke:#A80036;stroke-width:1.0;" x1="281.5" x2="273.5" y1="237.98" y2="237.98"/><line style="stroke:#A80036;stroke-width:1.0;" x1="273.5" x2="281.5" y1="173.22" y2="173.22"/><line style="stroke:#A80036;stroke-width:1.0;" x1="273.5" x2="281.5" y1="176.22" y2="176.22"/><line style="stroke:#A80036;stroke-width:1.0;" x1="277.5" x2="277.5" y1="177.22" y2="169.22"/><!--MD5=[47449b9f044e3634f406bd4441e700dd]
12
+link Purchase to Supplier--><path codeLine="84" d="M324.3,176.5 C333.51,193.71 343.05,211.53 351.86,228.01 " fill="none" id="Purchase-Supplier" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="352.0894" x2="361.1517" y1="228.4243" y2="232.652"/><line style="stroke:#A80036;stroke-width:1.0;" x1="352.0894" x2="350.5683" y1="228.4243" y2="238.308"/><line style="stroke:#A80036;stroke-width:1.0;" x1="352.0894" x2="355.86" y1="228.4243" y2="235.48"/><line style="stroke:#A80036;stroke-width:1.0;" x1="354.6745" x2="347.6189" y1="224.7751" y2="228.5457"/><line style="stroke:#A80036;stroke-width:1.0;" x1="318.7775" x2="325.8331" y1="174.6331" y2="170.8625"/><line style="stroke:#A80036;stroke-width:1.0;" x1="320.1915" x2="327.2471" y1="177.279" y2="173.5084"/><line style="stroke:#A80036;stroke-width:1.0;" x1="324.1906" x2="320.42" y1="176.2757" y2="169.22"/><!--MD5=[908832567ff15e3f47de674b99e285bc]
13
+link Purchase to User--><path codeLine="85" d="M231.02,176.67 C223.06,191.7 214.85,207.18 207.08,221.83 " fill="none" id="Purchase-User" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="207.0584" x2="208.6106" y1="221.8825" y2="231.7613"/><line style="stroke:#A80036;stroke-width:1.0;" x1="207.0584" x2="198.0094" y1="221.8825" y2="226.1387"/><line style="stroke:#A80036;stroke-width:1.0;" x1="207.0584" x2="203.31" y1="221.8825" y2="228.95"/><line style="stroke:#A80036;stroke-width:1.0;" x1="211.5292" x2="204.4617" y1="221.9898" y2="218.2414"/><line style="stroke:#A80036;stroke-width:1.0;" x1="229.5635" x2="236.6341" y1="170.8841" y2="174.6265"/><line style="stroke:#A80036;stroke-width:1.0;" x1="228.16" x2="235.2307" y1="173.5356" y2="177.278"/><line style="stroke:#A80036;stroke-width:1.0;" x1="231.2276" x2="234.97" y1="176.2907" y2="169.22"/><!--MD5=[a1800330d345d2f946249e9e4299eabc]
14
+link Sales to Product--><path codeLine="86" d="M194.25,172.23 C209.8,195.44 226.3,220.07 240.48,241.23 " fill="none" id="Sales-Product" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="240.5326" x2="249.9724" y1="241.3368" y2="244.637"/><line style="stroke:#A80036;stroke-width:1.0;" x1="240.5326" x2="240.0076" y1="241.3368" y2="251.323"/><line style="stroke:#A80036;stroke-width:1.0;" x1="240.5326" x2="244.99" y1="241.3368" y2="247.98"/><line style="stroke:#A80036;stroke-width:1.0;" x1="242.7399" x2="236.0967" y1="237.4473" y2="241.9047"/><line style="stroke:#A80036;stroke-width:1.0;" x1="188.5716" x2="195.2192" y1="170.9292" y2="166.4784"/><line style="stroke:#A80036;stroke-width:1.0;" x1="190.2406" x2="196.8882" y1="173.422" y2="168.9713"/><line style="stroke:#A80036;stroke-width:1.0;" x1="194.1208" x2="189.67" y1="172.0276" y2="165.38"/><!--MD5=[77820080b9be6acfb6e8a381a1a0e9b8]
15
+link Sales to Customer--><path codeLine="87" d="M102.46,173.97 C93.86,194.25 84.84,215.52 76.77,234.54 " fill="none" id="Sales-Customer" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="76.7334" x2="79.147" y1="234.6207" y2="244.325"/><line style="stroke:#A80036;stroke-width:1.0;" x1="76.7334" x2="68.093" y1="234.6207" y2="239.655"/><line style="stroke:#A80036;stroke-width:1.0;" x1="76.7334" x2="73.62" y1="234.6207" y2="241.99"/><line style="stroke:#A80036;stroke-width:1.0;" x1="81.1964" x2="73.8271" y1="234.3351" y2="231.2217"/><line style="stroke:#A80036;stroke-width:1.0;" x1="100.3637" x2="107.7257" y1="168.6757" y2="171.8063"/><line style="stroke:#A80036;stroke-width:1.0;" x1="99.1897" x2="106.5517" y1="171.4364" y2="174.5671"/><line style="stroke:#A80036;stroke-width:1.0;" x1="102.4794" x2="105.61" y1="173.922" y2="166.56"/><!--MD5=[b90679fcd0158477e65aabd182e1535f]
16
+link Sales to User--><path codeLine="88" d="M150.49,174.79 C152.62,190.02 154.82,205.79 156.91,220.72 " fill="none" id="Sales-User" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="156.9366" x2="163.9916" y1="220.9879" y2="228.075"/><line style="stroke:#A80036;stroke-width:1.0;" x1="156.9366" x2="152.1084" y1="220.9879" y2="229.745"/><line style="stroke:#A80036;stroke-width:1.0;" x1="156.9366" x2="158.05" y1="220.9879" y2="228.91"/><line style="stroke:#A80036;stroke-width:1.0;" x1="160.6193" x2="152.6972" y1="218.4506" y2="219.564"/><line style="stroke:#A80036;stroke-width:1.0;" x1="145.9276" x2="153.8517" y1="171.0717" y2="169.9724"/><line style="stroke:#A80036;stroke-width:1.0;" x1="146.3399" x2="154.264" y1="174.0433" y2="172.9439"/><line style="stroke:#A80036;stroke-width:1.0;" x1="150.4394" x2="149.34" y1="174.4841" y2="166.56"/><!--MD5=[469537f6e6fbfad22558102ade648a2e]
17
+link StockProduct to Product--><path codeLine="89" d="M373.89,153.64 C354.81,181.92 332.66,214.74 314.41,241.79 " fill="none" id="StockProduct-Product" style="stroke:#A80036;stroke-width:1.0;"/><line style="stroke:#A80036;stroke-width:1.0;" x1="315.8932" x2="309.262" y1="246.742" y2="242.2668"/><line style="stroke:#A80036;stroke-width:1.0;" x1="317.5714" x2="310.9402" y1="244.2553" y2="239.7801"/><line style="stroke:#A80036;stroke-width:1.0;" x1="314.8152" x2="310.34" y1="241.1888" y2="247.82"/><line style="stroke:#A80036;stroke-width:1.0;" x1="372.3868" x2="379.018" y1="148.708" y2="153.1832"/><line style="stroke:#A80036;stroke-width:1.0;" x1="370.7086" x2="377.3398" y1="151.1947" y2="155.6699"/><line style="stroke:#A80036;stroke-width:1.0;" x1="373.4648" x2="377.94" y1="154.2612" y2="147.63"/><!--MD5=[46ce65098b36372a8cf3e0bb439d5da2]
18
+@startuml Database
19
+
20
+entity User {
21
+  * id
22
+  __
23
+  * name
24
+  * username
25
+  * status
26
+  * password
27
+  _
28
+  * role_id
29
+}
30
+
31
+entity Role {
32
+  * id
33
+  __
34
+  * name
35
+}
36
+
37
+entity Customer {
38
+  * id
39
+  __
40
+  * name
41
+  * address
42
+  * phone
43
+  * npwp
44
+}
45
+
46
+entity Product {
47
+  * id
48
+  __
49
+  * number
50
+  * name
51
+  * unit
52
+}
53
+
54
+entity Supplier {
55
+  * id
56
+  __
57
+  * name
58
+  * address
59
+  * phone
60
+  * email
61
+  * npwp
62
+}
63
+
64
+entity Purchase {
65
+  * id
66
+  __ 
67
+  * price
68
+  * ppn11
69
+  * qty
70
+  * product_number
71
+  __
72
+  * product_id
73
+  * supplier_id
74
+  * user_id
75
+}
76
+
77
+entity Sales {
78
+  * id
79
+  __
80
+    * price
81
+  * ppn11
82
+  * qty
83
+  * invoice_number
84
+  __
85
+  * product_id
86
+  * customer_id
87
+  * user_id
88
+}
89
+
90
+entity StockProduct {
91
+  * id
92
+  __
93
+  * product_number
94
+  * invoice_number
95
+  * amount
96
+  __
97
+  * product_id
98
+}
99
+
100
+User ||- -|{ Role
101
+Purchase ||- -|{ Product
102
+Purchase ||- -|{ Supplier
103
+Purchase ||- -|{ User
104
+Sales ||- -|{ Product
105
+Sales ||- -|{ Customer
106
+Sales ||- -|{ User
107
+StockProduct ||- -|| Product
108
+@end
109
+
110
+PlantUML version 1.2022.0(Tue Jan 11 23:16:42 WIB 2022)
111
+(GPL source distribution)
112
+Java Runtime: OpenJDK Runtime Environment
113
+JVM: OpenJDK 64-Bit Server VM
114
+Default Encoding: UTF-8
115
+Language: en
116
+Country: US
117
+--></g></svg>

+ 2
- 2
public/js/resources_js_pages_Customers_Index_vue.js Просмотреть файл

828
     }, {
828
     }, {
829
       label: 'Stok Barang',
829
       label: 'Stok Barang',
830
       icon: 'pi pi-box',
830
       icon: 'pi pi-box',
831
-      to: '/stocks',
832
-      component: 'Stocks/Index'
831
+      to: '/stock-products',
832
+      component: 'StockProducts/Index'
833
     }]
833
     }]
834
   }]
834
   }]
835
 });
835
 });

+ 2
- 2
public/js/resources_js_pages_Dashboards_Index_vue.js Просмотреть файл

828
     }, {
828
     }, {
829
       label: 'Stok Barang',
829
       label: 'Stok Barang',
830
       icon: 'pi pi-box',
830
       icon: 'pi pi-box',
831
-      to: '/stocks',
832
-      component: 'Stocks/Index'
831
+      to: '/stock-products',
832
+      component: 'StockProducts/Index'
833
     }]
833
     }]
834
   }]
834
   }]
835
 });
835
 });

+ 2
- 2
public/js/resources_js_pages_Purchases_Index_vue.js Просмотреть файл

828
     }, {
828
     }, {
829
       label: 'Stok Barang',
829
       label: 'Stok Barang',
830
       icon: 'pi pi-box',
830
       icon: 'pi pi-box',
831
-      to: '/stocks',
832
-      component: 'Stocks/Index'
831
+      to: '/stock-products',
832
+      component: 'StockProducts/Index'
833
     }]
833
     }]
834
   }]
834
   }]
835
 });
835
 });

+ 2
- 2
public/js/resources_js_pages_Sales_Index_vue.js Просмотреть файл

828
     }, {
828
     }, {
829
       label: 'Stok Barang',
829
       label: 'Stok Barang',
830
       icon: 'pi pi-box',
830
       icon: 'pi pi-box',
831
-      to: '/stocks',
832
-      component: 'Stocks/Index'
831
+      to: '/stock-products',
832
+      component: 'StockProducts/Index'
833
     }]
833
     }]
834
   }]
834
   }]
835
 });
835
 });

+ 1577
- 0
public/js/resources_js_pages_StockProducts_Index_vue.js
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


+ 2
- 2
public/js/resources_js_pages_Suppliers_Index_vue.js Просмотреть файл

828
     }, {
828
     }, {
829
       label: 'Stok Barang',
829
       label: 'Stok Barang',
830
       icon: 'pi pi-box',
830
       icon: 'pi pi-box',
831
-      to: '/stocks',
832
-      component: 'Stocks/Index'
831
+      to: '/stock-products',
832
+      component: 'StockProducts/Index'
833
     }]
833
     }]
834
   }]
834
   }]
835
 });
835
 });

+ 2
- 2
public/js/resources_js_pages_Users_Create_vue.js Просмотреть файл

1260
     }, {
1260
     }, {
1261
       label: 'Stok Barang',
1261
       label: 'Stok Barang',
1262
       icon: 'pi pi-box',
1262
       icon: 'pi pi-box',
1263
-      to: '/stocks',
1264
-      component: 'Stocks/Index'
1263
+      to: '/stock-products',
1264
+      component: 'StockProducts/Index'
1265
     }]
1265
     }]
1266
   }]
1266
   }]
1267
 });
1267
 });

+ 2
- 2
public/js/resources_js_pages_Users_Edit_vue.js Просмотреть файл

1408
     }, {
1408
     }, {
1409
       label: 'Stok Barang',
1409
       label: 'Stok Barang',
1410
       icon: 'pi pi-box',
1410
       icon: 'pi pi-box',
1411
-      to: '/stocks',
1412
-      component: 'Stocks/Index'
1411
+      to: '/stock-products',
1412
+      component: 'StockProducts/Index'
1413
     }]
1413
     }]
1414
   }]
1414
   }]
1415
 });
1415
 });

+ 2
- 2
public/js/resources_js_pages_Users_Index_vue.js Просмотреть файл

1194
     }, {
1194
     }, {
1195
       label: 'Stok Barang',
1195
       label: 'Stok Barang',
1196
       icon: 'pi pi-box',
1196
       icon: 'pi pi-box',
1197
-      to: '/stocks',
1198
-      component: 'Stocks/Index'
1197
+      to: '/stock-products',
1198
+      component: 'StockProducts/Index'
1199
     }]
1199
     }]
1200
   }]
1200
   }]
1201
 });
1201
 });

+ 2
- 2
public/js/resources_js_pages_Users_Show_vue.js Просмотреть файл

1279
     }, {
1279
     }, {
1280
       label: 'Stok Barang',
1280
       label: 'Stok Barang',
1281
       icon: 'pi pi-box',
1281
       icon: 'pi pi-box',
1282
-      to: '/stocks',
1283
-      component: 'Stocks/Index'
1282
+      to: '/stock-products',
1283
+      component: 'StockProducts/Index'
1284
     }]
1284
     }]
1285
   }]
1285
   }]
1286
 });
1286
 });

+ 7
- 7
public/js/vue.js Просмотреть файл

58340
 		"./resources/js/pages/Sales/Index.vue",
58340
 		"./resources/js/pages/Sales/Index.vue",
58341
 		"resources_js_pages_Sales_Index_vue"
58341
 		"resources_js_pages_Sales_Index_vue"
58342
 	],
58342
 	],
58343
-	"./Stocks/Index": [
58344
-		"./resources/js/pages/Stocks/Index.vue",
58345
-		"resources_js_pages_Stocks_Index_vue"
58343
+	"./StockProducts/Index": [
58344
+		"./resources/js/pages/StockProducts/Index.vue",
58345
+		"resources_js_pages_StockProducts_Index_vue"
58346
 	],
58346
 	],
58347
-	"./Stocks/Index.vue": [
58348
-		"./resources/js/pages/Stocks/Index.vue",
58349
-		"resources_js_pages_Stocks_Index_vue"
58347
+	"./StockProducts/Index.vue": [
58348
+		"./resources/js/pages/StockProducts/Index.vue",
58349
+		"resources_js_pages_StockProducts_Index_vue"
58350
 	],
58350
 	],
58351
 	"./Suppliers/Index": [
58351
 	"./Suppliers/Index": [
58352
 		"./resources/js/pages/Suppliers/Index.vue",
58352
 		"./resources/js/pages/Suppliers/Index.vue",
58513
 /******/ 		// This function allow to reference async chunks
58513
 /******/ 		// This function allow to reference async chunks
58514
 /******/ 		__webpack_require__.u = (chunkId) => {
58514
 /******/ 		__webpack_require__.u = (chunkId) => {
58515
 /******/ 			// return url for filenames based on template
58515
 /******/ 			// return url for filenames based on template
58516
-/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"9296b829a7757dee","resources_js_pages_Auth_Login_vue":"cb7d9267c0b9275e","resources_js_pages_Customers_Index_vue":"898bc2426fcad027","resources_js_pages_Dashboards_Index_vue":"47d5f42a39d05f5f","resources_js_pages_Purchases_Index_vue":"2379d57d2dd2ccb4","resources_js_pages_Sales_Index_vue":"0daef78f7ef343a3","resources_js_pages_Stocks_Index_vue":"d2d773499e4a6eb5","resources_js_pages_Suppliers_Index_vue":"eb9e288ef1cbe92c","resources_js_pages_Users_Create_vue":"68c6eddf96b62d36","resources_js_pages_Users_Edit_vue":"2398820b004b6eb0","resources_js_pages_Users_Index_vue":"fcd3130414510571","resources_js_pages_Users_Show_vue":"6a40f301a420e7a4","resources_js_pages_Users_tableHeader_js":"48f19bd820caf015"}[chunkId] + "";
58516
+/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"9296b829a7757dee","resources_js_pages_Auth_Login_vue":"cb7d9267c0b9275e","resources_js_pages_Customers_Index_vue":"efe10709977e56ba","resources_js_pages_Dashboards_Index_vue":"a565c1bfb1fb63b9","resources_js_pages_Purchases_Index_vue":"72cc6e7458a3c247","resources_js_pages_Sales_Index_vue":"bb75c1753cd4dfae","resources_js_pages_StockProducts_Index_vue":"8360688f3422c96f","resources_js_pages_Suppliers_Index_vue":"1c1d93b70b6e91ff","resources_js_pages_Users_Create_vue":"aff43d9484b673e5","resources_js_pages_Users_Edit_vue":"36baa4decc0ecd9c","resources_js_pages_Users_Index_vue":"91e95659c4fcc5be","resources_js_pages_Users_Show_vue":"f3f98d81ef28f6d1","resources_js_pages_Users_tableHeader_js":"48f19bd820caf015"}[chunkId] + "";
58517
 /******/ 		};
58517
 /******/ 		};
58518
 /******/ 	})();
58518
 /******/ 	})();
58519
 /******/ 	
58519
 /******/ 	

resources/js/pages/Stocks/Index.vue → resources/js/pages/StockProducts/Index.vue Просмотреть файл


+ 2
- 2
resources/js/utils/menu.js Просмотреть файл

92
         {
92
         {
93
           label: 'Stok Barang',
93
           label: 'Stok Barang',
94
           icon: 'pi pi-box',
94
           icon: 'pi pi-box',
95
-          to: '/stocks',
96
-          component: 'Stocks/Index',
95
+          to: '/stock-products',
96
+          component: 'StockProducts/Index',
97
         },
97
         },
98
       ],
98
       ],
99
     },
99
     },

+ 2
- 2
routes/web.php Просмотреть файл

4
 use App\Http\Controllers\DashboardController;
4
 use App\Http\Controllers\DashboardController;
5
 use App\Http\Controllers\PurchaseController;
5
 use App\Http\Controllers\PurchaseController;
6
 use App\Http\Controllers\SalesController;
6
 use App\Http\Controllers\SalesController;
7
-use App\Http\Controllers\StocksController;
7
+use App\Http\Controllers\StockProductController;
8
 use App\Http\Controllers\SupplierController;
8
 use App\Http\Controllers\SupplierController;
9
 use App\Http\Controllers\UserController;
9
 use App\Http\Controllers\UserController;
10
 use Illuminate\Support\Facades\Route;
10
 use Illuminate\Support\Facades\Route;
39
 
39
 
40
     Route::resource('/suppliers', SupplierController::class);
40
     Route::resource('/suppliers', SupplierController::class);
41
 
41
 
42
-    Route::resource('/stocks', StocksController::class);
42
+    Route::resource('/stock-products', StockProductController::class);
43
 });
43
 });
44
 
44
 
45
 require __DIR__ . '/auth.php';
45
 require __DIR__ . '/auth.php';