change pack to label

This commit is contained in:
Fayyazi
2019-10-28 14:16:18 +03:30
parent 7c94a30254
commit dbd0ddc1d4
16 changed files with 254 additions and 112 deletions
@@ -3,14 +3,15 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StorePackRequest;
use App\Pack;
use App\Http\Requests\StoreLabelRequest;
use App\Label;
use App\Package;
class PackController extends Controller
class LabelController extends Controller
{
public function index(Request $request)
{
$Packs = Pack::when($request->has('name') && $request->name != '', function($query) use($request){
$Labels = Label::when($request->has('name') && $request->name != '', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function($query) use($request){
@@ -31,20 +32,20 @@ class PackController extends Controller
});
})
->with('user', 'user.medical_center')->paginate(10);
return \MessageResponse::data($Packs);
return \MessageResponse::data($Labels);
}
public function create()
{
}
public function show(Pack $Pack)
public function show(Label $Label)
{
$Pack->load('user', 'packages', 'user.medical_center');
return \MessageResponse::data($Pack);
$Label->load('user', 'packages', 'user.medical_center');
return \MessageResponse::data($Label);
}
public function store(StorePackRequest $request)
public function store(StoreLabelRequest $request)
{
$PackData = [
$LabelData = [
'name' => $request->name,
'sterile_date' => $request->sterile_date,
'expire_date' => $request->expire_date,
@@ -55,44 +56,48 @@ class PackController extends Controller
'note' => $request->note,
'user_id' => auth('api')->user()->id,
];
$PackObj = Pack::create($PackData);
$PackObj->packages()->attach($request->packages);
$LabelObj = Label::create($LabelData);
Package::find($request->package_id)->update(['label_id' => $Label->id]);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Pack $Pack)
public function edit(Label $Label)
{
$Packages = $Pack->packages->pluck('id')->toArray();
unset($Pack->packages);
$Pack->packages = $Packages;
return \MessageResponse::data($Pack);
$Label->load('package');
dd($Label);
// $Packages = $Label->packages->pluck('id')->toArray();
// unset($Label->packages);
// $Label->package_id = $Label->package->id;
return \MessageResponse::data($Label);
}
public function update(StorePackRequest $request, Pack $Pack)
public function update(Request $request, Label $Label)
{
$Pack->update($request->except(['packages']));
$Pack->packages()->sync($request->packages);
$Label->update($request->except(['package_id']));
Package::find($request->package_id)->update(['label_id' => $Label->id]);
// $Label->package()->save($request->package_id);
// $Label->packages()->sync($request->packages);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Pack $Pack)
public function destroy(Label $Label)
{
if (auth('api')->user()->cant('delete', $Pack)) {
if (auth('api')->user()->cant('delete', $Label)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if(count($Pack->packages))
if(count($Label->packages))
{
$Pack->packages()->detach();
$Label->packages()->detach();
}
if(count($Pack->cycles))
if(count($Label->cycles))
{
$Pack->cycles()->detach();
$Label->cycles()->detach();
}
$Pack->delete();
$Label->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function getPacks()
public function getLabels()
{
$Packs = Pack::with('user')->get();
return \MessageResponse::data($Packs);
$Labels = Label::with('user')->get();
return \MessageResponse::data($Labels);
}
}
+55 -2
View File
@@ -39,20 +39,73 @@ class PackageController extends Controller
'verified' => 'NotVerified',
];
$PackageObj = Package::create($PackageData);
$Items = [];
$count = 1;
foreach ($request->items as $key => $item) {
if (array_key_exists($item['id'], $Items)) {
$preCount = $Items[$item['id']];
$Items[$item['id']] = $preCount + 1;
}
else {
$Items[$item['id']] = $count;
}
}
foreach ($Items as $Item => $Count) {
$Package->items()->attach(array($Item), ['count' => $Count]);
}
$PackageObj->items()->attach($request->items);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Package $Package)
{
$Items = $Package->items->pluck('id')->toArray();
$Items = [];
$Package->load('items');
// dd($Package);
foreach ($Package->items as $item) {
for ($i=0; $i < $item->pivot->count ; $i++) {
$Items[] = (object) array('id' => $item->id, 'name' => $item->name);
}
}
unset($Package->items);
$Package->items = $Items;
return \MessageResponse::data($Package);
}
public function update(StorePackageRequest $request, Package $Package)
{
// dd($request->items);
$Package->update($request->except(['items']));
$Package->items()->sync($request->items);
$Items = [];
$count = 1;
foreach ($request->items as $key => $item) {
// dump(in_array($item['id'], array_column($Items, 'id')));
// if (in_array($item['id'], array_column($Items, 'id'))) {
// $index = array_search($item['id'], array_column($Items));
// dump(array_search($item['id'], $Items));
// $Items[$index]['count'] += 1;
// // dump($Items);
// }
// else {
// $Item1 = ['id' => $item['id'], 'count' => $count];
// $Items[] = $Item1;
// }
if (array_key_exists($item['id'], $Items)) {
$preCount = $Items[$item['id']];
$Items[$item['id']] = $preCount + 1;
}
else {
$Items[$item['id']] = $count;
}
}
// dd($Items);
$Package->items()->detach();
// foreach ($Items as $Item) {
// $Package->items()->attach(array($Item['id']), ['count' => $Item['count']]);
// }
foreach ($Items as $Item => $Count) {
$Package->items()->attach(array($Item), ['count' => $Count]);
}
// $Package->items()->sync($request->items);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Package $Package)
@@ -41,12 +41,10 @@ class TestResultController extends Controller
}
$TestResult = TestResult::with('test_type', 'user', 'user.medical_center')
->when($request->has('verified'), function ($query) use ($request)
{
->when($request->has('verified'), function ($query) use ($request){
return $query->where('verified', $request->verified);
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request){
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
@@ -2,21 +2,21 @@
namespace App\Http\Requests;
use App\Pack;
use App\Label;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StorePackRequest extends FormRequest
class StoreLabelRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Pack::class);
return auth('api')->check() && auth('api')->user()->can('store', Label::class);
} else {
$Pack = $this->route('Pack');
return auth('api')->check() && $Pack && auth('api')->user()->can('update', $Pack);
$Label = $this->route('Label');
return auth('api')->check() && $Label && auth('api')->user()->can('update', $Label);
}
}
@@ -25,7 +25,7 @@ class StorePackRequest extends FormRequest
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:packs',
'name' => 'required|max:100|unique:labels',
'sterile_date' => 'required',
'expire_date' => 'required',
'sterilizer_id' => 'required',
@@ -33,15 +33,15 @@ class StorePackRequest extends FormRequest
'lot_number' => 'required',
'department' => 'required',
'note' => 'nullable',
'packages' => 'required',
'package_id' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
$Pack = $this->route('Pack');
$Label = $this->route('Label');
return [
'name' => 'required|max:100|unique:packs,id,'.$Pack->id,
'name' => 'required|max:100|unique:labels,id,'.$Label->id,
'sterile_date' => 'required',
'expire_date' => 'required',
'sterilizer_id' => 'required',
@@ -49,7 +49,7 @@ class StorePackRequest extends FormRequest
'lot_number' => 'required',
'department' => 'required',
'note' => 'nullable',
'packages' => 'required',
'package_id' => 'required',
];
break;
+7 -3
View File
@@ -4,17 +4,21 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
class Pack extends Model
class Label extends Model
{
public $fillable = ['name', 'sterile_date', 'expire_date', 'sterilizer_id', 'cycle_number', 'lot_number', 'department', 'user_id', 'note'];
public function user()
{
return $this->belongsTo('App\User');
}
public function packages()
public function package()
{
return $this->belongsToMany('App\Package', 'pack_package');
return $this->belongsTo('App\Package');
}
// public function packages()
// {
// return $this->belongsToMany('App\Package', 'pack_package');
// }
public function cycles()
{
return $this->belongsToMany('App\Cycle', 'cycle_pack');
+8 -4
View File
@@ -6,18 +6,22 @@ use Illuminate\Database\Eloquent\Model;
class Package extends Model
{
public $fillable = ['name', 'unique_id', 'user_id', 'note', 'verified'];
public $fillable = ['name', 'unique_id', 'user_id', 'note', 'verified', 'label_id'];
public function user()
{
return $this->belongsTo('App\User');
}
public function items()
{
return $this->belongsToMany('App\Item', 'item_package');
return $this->belongsToMany('App\Item', 'item_package')->withPivot('count');
}
public function packs()
// public function packs()
// {
// return $this->belongsToMany('App\Pack', 'pack_package');
// }
public function labels()
{
return $this->belongsToMany('App\Pack', 'pack_package');
return $this->hasMany('App\Label');
}
}
@@ -3,18 +3,18 @@
namespace App\Policies;
use App\User;
use App\Pack;
use App\Label;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class PackPolicy
class LabelPolicy
{
public function delete(User $User, Pack $Pack)
public function delete(User $User, Label $Label)
{
// if($User->hasRole('Admin') && $Pack->users->count() == 0)
// if($User->hasRole('Admin') && $Label->users->count() == 0)
return true;
}
public function update(User $User, Pack $Pack)
public function update(User $User, Label $Label)
{
// if($User->hasRole('Admin'))
return true;
@@ -56,6 +56,34 @@
<div class v-for="(pack, key) in data.packs" :key="key">
<span class="headline ml-2" style="letter-spacing:0 !important">{{ key+1 + ": " + pack.name }}</span>
</div>
<!-- <v-row justify="center mt-5">
<v-expansion-panels accordion class="WM-Relative WM-Panel">
<v-expansion-panel class="WM-PanelCategories"
v-for="(pack, key) in data.packs"
:key="key"
>
<v-expansion-panel-header>
<span class="headline ml-2">{{key+1}}</span>
<h2 style="margin-right:20px">{{ pack.name }}</h2>
<div class="ml-3" align="left">
</div>
</v-expansion-panel-header>
<v-expansion-panel-content>
<v-card-text style="padding:5px 30px">
<producer-category-item v-if="pack.children" :items="pack.children" @clicked="onClickChild"/>
</v-card-text>
</v-expansion-panel-content>
</v-expansion-panel>
</v-expansion-panels>
</v-row> -->
</v-flex>
</v-layout>
</v-layout>
@@ -1,7 +1,7 @@
<template>
<v-container grid-list-xs>
<material-card color="black" title="Show Package">
<material-card color="black" title="Show Label">
<v-layout align-left justify-left wrap class="px-5 my-3">
<h3 class="ml-3">Info</h3>
<v-flex xs12>
@@ -1,7 +1,7 @@
<template>
<v-container grid-list-xs>
<material-card color="black" id="printMe" title="Show Label">
<material-card color="black" id="printMe" title="Show Package">
<v-layout align-left justify-left wrap class="px-5 my-3">
<h3 class="ml-3">Info</h3>
<v-flex xs12>
@@ -46,13 +46,25 @@
<hr class="v-divider theme--light">
</v-flex>
<v-layout row wrap class="ml-4">
<v-flex xs12 md6 sm6>
<div class v-for="(item, key) in data.items" :key="key">
<span class="headline ml-2" style="letter-spacing:0 !important">{{ key+1 + ": " + item.name }}</span>
</div>
</v-flex>
<template>
<v-expansion-panel>
<v-expansion-panel-content
v-for="(item, key) in data.items" :key="key"
>
<template v-slot:header>
<div>{{ key+1 + ": " + item.name }}</div>
</template>
<v-card>
<v-card-text>count : {{ item.pivot.count }}</v-card-text>
<v-card-text>note : {{ item.note }}</v-card-text>
</v-card>
</v-expansion-panel-content>
</v-expansion-panel>
</template>
</v-layout>
</v-layout>
<v-layout id="printMe" align-left justify-left wrap class="px-5 my-3">
<h3 class="ml-3">Barcode And QRCode Image</h3>
<v-flex xs12>
+13 -13
View File
@@ -9,7 +9,7 @@ const urls = {
statistics: `/TestResults/chart`,
storeTestType: "/TestTypes",
storePackage: "/Packages",
storePack: "/Packs",
storeLabel: "/Labels",
storeCycle: "/Cycles",
storeItem: "/Items",
listTestTypeName: "/TestTypes/ListNames",
@@ -111,20 +111,20 @@ const urls = {
verifyPackage: function(id) {
return `/Package/Verify/${id}`;
},
listPack: function(filter) {
return "/Packs" + filter;
listLabel: function(filter) {
return "/Labels" + filter;
},
showPack: function(id) {
return `/Packs/${id}`;
showLabel: function(id) {
return `/Labels/${id}`;
},
editPack: function(id) {
return `/Packs/${id}/edit`;
editLabel: function(id) {
return `/Labels/${id}/edit`;
},
updatePack: function(id) {
return `/Packs/${id}`;
updateLabel: function(id) {
return `/Labels/${id}`;
},
removePack: function(id) {
return `Packs/${id}`;
removeLabel: function(id) {
return `Labels/${id}`;
},
listCycle: function(filter) {
return "/Cycles" + filter;
@@ -153,8 +153,8 @@ const urls = {
listAllPackage: function() {
return "/GetPackages";
},
listAllPack: function() {
return "/GetPacks";
listAllLabel: function() {
return "/GetLabels";
},
showItem: function(id) {
return `/Items/${id}`;
+7 -7
View File
@@ -160,19 +160,19 @@ export default [
view: 'Package/AddEdit'
},
{
path: '/add-pack',
name: 'AddPack',
view: 'Pack/AddEdit'
path: '/add-label',
name: 'AddLabel',
view: 'Label/AddEdit'
},
{
path: '/labels',
name: 'AllLabels',
view: 'Pack/List'
view: 'Label/List'
},
{
path: '/pack/:pack/edit',
name: 'EditPack',
view: 'Pack/AddEdit'
path: '/label/:label/edit',
name: 'EditLabel',
view: 'Label/AddEdit'
},
{
path: '/add-cycle',
@@ -48,13 +48,12 @@
<v-flex xs12 sm6 md3 class="WM-FlexCenter">
<v-icon class="fas fa-check mr-2 WM-Margin-B-8"></v-icon>
<v-autocomplete
multiple
color="black"
:items="items"
item-text="name"
v-model="formData.packages"
v-model="formData.package_id"
item-value="id"
label="Select Package For Pack"
label="Select Package For Label"
class="py-3 pr-3"
></v-autocomplete>
</v-flex>
@@ -162,7 +161,7 @@ export default {
name: "",
result: "",
note: "",
packages: []
package_id: ""
},
items: [],
rules: {
@@ -176,14 +175,14 @@ export default {
};
},
created() {
if (this.$route.params.pack) {
this.load(this.$route.params.pack);
if (this.$route.params.label) {
this.load(this.$route.params.label);
}
this.loadItems();
},
methods: {
async load(id) {
const result = await ApiService.get(urls.editPack(id));
const result = await ApiService.get(urls.editLabel(id));
if (result.status == 200) {
this.formData = result.data.data;
}
@@ -196,14 +195,14 @@ export default {
},
async submitForm() {
let result;
if (this.$route.params.pack) {
if (this.$route.params.label) {
result = await ApiService.put(
urls.updatePack(this.$route.params.pack),
urls.updateLabel(this.$route.params.label),
this.formData
);
} else {
result = await ApiService.post(
urls.storePack,
urls.storeLabel,
this.formData
);
}
@@ -48,7 +48,7 @@
</v-flex>
<v-spacer></v-spacer>
<v-flex xs12 md2 sm2 class="text-xs-right">
<router-link :to="{name: 'AddPack'}">
<router-link :to="{name: 'AddLabel'}">
<v-btn class="WM-NoShadow WM-Outline-Btn WM-Border WM-Border-Black">
<v-icon class="black--text mr-2 caption">fas fa-plus</v-icon>
<span class="black--text">Add</span>
@@ -78,7 +78,7 @@
</v-btn>
<router-link
v-if="$hasRole('Admin') || item.user_id == $store.state.user.id"
:to="{name: 'EditPack', params: {pack: item.id}}"
:to="{name: 'EditLabel', params: {label: item.id}}"
>
<v-btn color="orange" class="mr-2">
<v-icon class="white--text mr-1 caption">fas fa-pen</v-icon>
@@ -175,7 +175,7 @@ export default {
}
}
filter += page ? `page=${page}` : `page=1`;
const result = await ApiService.get(urls.listPack(filter));
const result = await ApiService.get(urls.listLabel(filter));
if (result && result.status == 200) {
this.items = result.data.data.data;
this.currentPage = result.data.data.current_page;
@@ -198,17 +198,17 @@ export default {
}
},
async show(testResultId) {
const result = await ApiService.get(urls.showPack(testResultId));
const result = await ApiService.get(urls.showLabel(testResultId));
if (result && result.status == 200) {
this.changeCurrentModal({
modal: "modal-pack-show",
modal: "modal-label-show",
properties: { result }
});
}
},
async remove(testResultId) {
const result = await ApiService.delete(
urls.removePack(testResultId)
urls.removeLabel(testResultId)
);
if (result && result.status == 200) {
for (const key in this.items) {
+48 -9
View File
@@ -14,19 +14,44 @@
class="py-3 pr-3"
></v-text-field>
</v-flex>
<v-flex xs12 md3 sm3 class="WM-FlexCenter pl-3">
<v-icon class="fas fa-check mr-2 WM-Margin-B-8"></v-icon>
<v-autocomplete
multiple
<!-- <v-row style="position: relative" v-for="(item, key) in formData.items" :key="key"> -->
<v-flex xs12 md3 sm3 class="WM-FlexCenter pl-3" style="position: relative" v-for="(item, key) in formData.items" :key="key">
<v-icon class="fas fa-check mr-2 WM-Margin-B-8"></v-icon>
<v-autocomplete
class="py-3 pr-3"
:items="items"
item-text="name"
v-model="formData.items"
v-model="item.id"
item-value="id"
label="Select Items For Package"
color="black"
></v-autocomplete>
</v-flex>
></v-autocomplete>
<v-btn
absolute
small
right
bottom
color="cyan"
@click="duplicateForm(key)"
>
<v-icon class="white--text mr-2 caption">fas fa-plus</v-icon>ADD
</v-btn>
<v-btn
absolute
small
left
bottom
color="red"
@click="removeForm(key)"
>
<v-icon class="white--text mr-2 caption">fas fa-remove</v-icon>REMOVE
</v-btn>
</v-flex>
<!-- </v-row> -->
</v-layout>
<v-layout align-center justify-center wrap class="px-5 mb-3">
<v-flex xs12 sm12 md12>
@@ -69,7 +94,11 @@ export default {
name: "",
result: "",
note: "",
items: []
items: [
{
name:''
}
]
},
items: [],
result: ["Pass", "Fail"],
@@ -119,7 +148,17 @@ export default {
if (result && result.status == 200) {
this.$router.push({ name: "AllPackage" });
}
}
},
duplicateForm(infoIndex) {
this.formData.items.push({
name: "",
});
},
removeForm(infoIndex) {
this.formData.items.splice(infoIndex, 1);
},
}
};
</script>
+2 -2
View File
@@ -51,14 +51,14 @@ Route::middleware('auth:api')->group(function () {
Route::resource('Items', 'ItemController');
Route::resource('Packages', 'PackageController');
Route::resource('Packs', 'PackController');
Route::resource('Labels', 'LabelController');
Route::resource('Messages', 'MessageController');
Route::delete('Messages/User/{User}', 'MessageController@destroyUserMessages');
Route::post('/Package/Verify/{Package}', 'PackageController@verifyPackage');
Route::get('/GetItems', 'ItemController@getItems');
Route::get('/GetPackages', 'PackageController@getPackages');
Route::get('/GetPacks', 'PackController@getPacks');
Route::get('/GetLabels', 'LabelController@getLabels');
Route::resource('Cycles', 'CycleController');