codigo actual del servidor, con avances de joan

This commit is contained in:
Jose Sanchez
2023-08-07 15:52:04 -04:00
commit 3cd9b8bbe8
3070 changed files with 532255 additions and 0 deletions

View File

@@ -0,0 +1,203 @@
@extends('seller.layouts.app')
@section('panel_content')
<div class="aiz-titlebar mt-2 mb-4">
<div class="row align-items-center">
<div class="col-md-6">
<h1 class="h3">{{ translate('Add Your Product') }}</h1>
</div>
</div>
</div>
<form class="" action="{{route('seller.digitalproducts.store')}}" method="POST" enctype="multipart/form-data" id="choice_form">
@csrf
<input type="hidden" name="added_by" value="seller">
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('General')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Product Name')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="text" class="form-control" name="name" placeholder="{{translate('Product Name')}}" required>
</div>
</div>
<div class="form-group row" id="category">
<label class="col-lg-3 col-from-label">{{translate('Category')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<select class="form-control aiz-selectpicker" name="category_id" id="category_id" required>
@foreach(\App\Models\Category::where('parent_id', 0)->where('digital', 1)->with('childrenCategories')->get(); as $category)
<option value="{{ $category->id }}">{{ $category->getTranslation('name') }}</option>
@foreach ($category->childrenCategories as $childCategory)
@include('categories.child_category', ['child_category' => $childCategory])
@endforeach
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{ translate('Product File')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="file" class="selected-files">
</div>
<div class="file-preview box sm">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Tags')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="text" class="form-control aiz-tag-input" name="tags[]" placeholder="{{ translate('Type and hit enter') }}">
<small class="text-muted">{{translate('This is used for search. Input those words by which cutomer can find this product.')}}</small>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Images')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{translate('Gallery Images')}} <small>(600x600)</small></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="true">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="photos" class="selected-files">
</div>
<div class="file-preview box sm">
</div>
<small class="text-muted">{{translate('These images are visible in product details page gallery. Use 600x600 sizes images.')}}</small>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{translate('Thumbnail Image')}} <small>(300x300)</small></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="thumbnail_img" class="selected-files">
</div>
<div class="file-preview box sm">
</div>
<small class="text-muted">{{translate('This image is visible in all product box. Use 300x300 sizes image. Keep some blank space around main object of your image as we had to crop some edge in different devices to make it responsive.')}}</small>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Meta Tags')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Meta Title')}}</label>
<div class="col-lg-9">
<input type="text" class="form-control" name="meta_title" placeholder="{{translate('Meta Title')}}">
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Description')}}</label>
<div class="col-lg-9">
<textarea name="meta_description" rows="5" class="form-control"></textarea>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{ translate('Meta Image') }}</label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="meta_img" class="selected-files">
</div>
<div class="file-preview box sm">
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Price')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Unit price')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="number" lang="en" min="0" value="0" step="0.01" placeholder="{{translate('Unit price')}}" name="unit_price" class="form-control" required>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Purchase price')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="number" lang="en" min="0" value="0" step="0.01" placeholder="{{translate('Purchase price')}}" name="purchase_price" class="form-control" required>
</div>
</div>
@foreach (\App\Models\Tax::where('tax_status', 1)->get() as $tax)
<div class="form-group row">
<label class="col-lg-3 col-from-label">
{{ $tax->name }}
<span class="text-danger">*</span>
</label>
<div class="col-lg-6">
<input type="hidden" value="{{$tax->id}}" name="tax_id[]">
<input type="number" lang="en" min="0" value="0" step="0.01" placeholder="{{translate('Tax')}}" name="tax[]" class="form-control" required>
</div>
<div class="col-md-3">
<select class="form-control aiz-selectpicker" name="tax_type[]">
<option value="amount">{{translate('Flat')}}</option>
<option value="percent">{{translate('Percent')}}</option>
</select>
</div>
</div>
@endforeach
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Discount')}} <span class="text-danger">*</span></label>
<div class="col-lg-6">
<input type="number" lang="en" min="0" value="0" step="0.01" placeholder="{{translate('Discount')}}" name="discount" class="form-control" required>
</div>
<div class="col-md-3">
<select class="form-control aiz-selectpicker" name="discount_type">
<option value="amount">{{translate('Flat')}}</option>
<option value="percent">{{translate('Percent')}}</option>
</select>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Product Information')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Description')}}</label>
<div class="col-lg-9">
<textarea class="aiz-text-editor" name="description"></textarea>
</div>
</div>
</div>
</div>
<div class="form-group mb-0 text-right mb-2">
<button type="submit" class="btn btn-primary">{{translate('Save Product')}}</button>
</div>
</form>
@endsection

View File

@@ -0,0 +1,232 @@
@extends('seller.layouts.app')
@section('panel_content')
<div class="aiz-titlebar mt-2 mb-4">
<div class="row align-items-center">
<div class="col-md-6">
<h1 class="h3">{{ translate('Update Your Product') }}</h1>
</div>
</div>
</div>
<form class="" action="{{route('seller.digitalproducts.update', $product->id)}}" method="POST" enctype="multipart/form-data">
<input name="_method" type="hidden" value="Post">
<input type="hidden" name="id" value="{{ $product->id }}">
<input type="hidden" name="lang" value="{{ $lang }}">
<input type="hidden" name="added_by" value="seller">
@csrf
<div class="card mb-0 border-bottom-0">
<div class="card-body p-0">
<ul class="nav nav-tabs nav-fill border-light">
@foreach (\App\Models\Language::all() as $key => $language)
<li class="nav-item">
<a class="nav-link text-reset @if ($language->code == $lang) active @else bg-soft-dark border-light border-left-0 @endif py-3" href="{{ route('seller.digitalproducts.edit', ['id'=>$product->id, 'lang'=> $language->code] ) }}">
<img src="{{ static_asset('assets/img/flags/'.$language->code.'.png') }}" height="11" class="mr-1">
<span>{{$language->name}}</span>
</a>
</li>
@endforeach
</ul>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('General')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Product Name')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="text" class="form-control" name="name" placeholder="{{translate('Product Name')}}" value="{{$product->getTranslation('name', $lang)}}" required>
</div>
</div>
<div class="form-group row" id="category">
<label class="col-lg-3 col-from-label">{{translate('Category')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<select class="form-control aiz-selectpicker" name="category_id" id="category_id" data-selected={{ $product->category_id }} required>
@foreach(\App\Models\Category::where('parent_id', 0)->where('digital', 1)->with('childrenCategories')->get(); as $category)
<option value="{{ $category->id }}">{{ $category->getTranslation('name') }}</option>
@foreach ($category->childrenCategories as $childCategory)
@include('categories.child_category', ['child_category' => $childCategory])
@endforeach
@endforeach
</select>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Product File')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="file" class="selected-files" value="{{ $product->file_name }}">
</div>
<div class="file-preview box sm">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Tags')}} <span class="text-danger">*</span></label>
<div class="col-lg-9">
<input type="text" class="form-control aiz-tag-input" name="tags[]" id="tags" value="{{ $product->tags }}" placeholder="{{ translate('Type to add a tag') }}">
<small class="text-muted">{{translate('This is used for search. Input those words by which cutomer can find this product.')}}</small>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Images')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{translate('Gallery Images')}} <small>(600x600)</small></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="true">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="photos" value="{{ $product->photos }}" class="selected-files" required>
</div>
<div class="file-preview box sm">
</div>
<small class="text-muted">{{translate('These images are visible in product details page gallery. Use 600x600 sizes images.')}}</small>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{translate('Thumbnail Image')}} <small>(300x300)</small></label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="thumbnail_img" value="{{ $product->thumbnail_img }}" class="selected-files" required>
</div>
<div class="file-preview box sm">
</div>
<small class="text-muted">{{translate('This image is visible in all product box. Use 300x300 sizes image. Keep some blank space around main object of your image as we had to crop some edge in different devices to make it responsive.')}}</small>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Meta Tags')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Meta Title')}}</label>
<div class="col-lg-9">
<input type="text" class="form-control" name="meta_title" value="{{ $product->meta_title }}" placeholder="{{translate('Meta Title')}}">
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Description')}}</label>
<div class="col-lg-9">
<textarea name="meta_description" rows="8" class="form-control">{{ $product->meta_description }}</textarea>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-form-label" for="signinSrEmail">{{ translate('Meta Image') }}</label>
<div class="col-lg-9">
<div class="input-group" data-toggle="aizuploader" data-type="image" data-multiple="false">
<div class="input-group-prepend">
<div class="input-group-text bg-soft-secondary font-weight-medium">{{ translate('Browse')}}</div>
</div>
<div class="form-control file-amount">{{ translate('Choose File') }}</div>
<input type="hidden" name="meta_img" value="{{ $product->meta_img }}" class="selected-files">
</div>
<div class="file-preview box sm">
</div>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Slug')}}</label>
<div class="col-lg-9">
<input type="text" class="form-control" name="slug" value="{{ $product->slug }}" placeholder="{{translate('Slug')}}">
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Price')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Unit price')}}</label>
<div class="col-lg-9">
<input type="text" placeholder="{{translate('Unit price')}}" name="unit_price" class="form-control" value="{{$product->unit_price}}" required>
</div>
</div>
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Purchase price')}}</label>
<div class="col-lg-9">
<input type="number" lang="en" min="0" step="0.01" placeholder="{{translate('Purchase price')}}" name="purchase_price" class="form-control" value="{{$product->purchase_price}}" required>
</div>
</div>
@foreach (\App\Models\Tax::where('tax_status', 1)->get() as $tax)
@php
$tax_amount = 0;
$tax_type = '';
foreach ($tax->product_taxes as $row) {
if ($product->id == $row->product_id) {
$tax_amount = $row->tax;
$tax_type = $row->tax_type;
}
}
@endphp
<div class="form-group row">
<label class="col-lg-3 col-from-label">
{{$tax->name}}
</label>
<div class="col-lg-6">
<input type="hidden" value="{{$tax->id}}" name="tax_id[]">
<input type="number" lang="en" min="0" step="0.01" placeholder="{{translate('tax')}}" name="tax[]" class="form-control" value="{{$tax_amount}}" required>
</div>
<div class="col-lg-3">
<select class="form-control aiz-selectpicker" name="tax_type[]" required>
<option value="amount" <?php if($tax_type == 'amount') echo "selected";?> >{{translate('Flat')}}</option>
<option value="percent" <?php if($tax_type == 'percent') echo "selected";?> >{{translate('Percent')}}</option>
</select>
</div>
</div>
@endforeach
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Discount')}}</label>
<div class="col-lg-6">
<input type="number" lang="en" min="0" step="0.01" placeholder="{{translate('Discount')}}" name="discount" class="form-control" value="{{ $product->discount }}" required>
</div>
<div class="col-lg-3">
<select class="form-control aiz-selectpicker" name="discount_type" required>
<option value="amount" <?php if($product->discount_type == 'amount') echo "selected";?> >{{translate('Flat')}}</option>
<option value="percent" <?php if($product->discount_type == 'percent') echo "selected";?> >{{translate('Percent')}}</option>
</select>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h5 class="mb-0 h6">{{translate('Description')}}</h5>
</div>
<div class="card-body">
<div class="form-group row">
<label class="col-lg-3 col-from-label">{{translate('Description')}}</label>
<div class="col-lg-9">
<textarea class="aiz-text-editor" name="description">{{ $product->getTranslation('description', $lang) }}</textarea>
</div>
</div>
</div>
</div>
<div class="form-group mb-0 text-right mb-2">
<button type="submit" class="btn btn-primary">{{translate('Update Product')}}</button>
</div>
</form>
@endsection

View File

@@ -0,0 +1,166 @@
@extends('seller.layouts.app')
@section('panel_content')
<div class="aiz-titlebar mt-2 mb-4">
<div class="row align-items-center">
<div class="col-md-6">
<h1 class="h3">{{ translate('Digital Products') }}</h1>
</div>
</div>
</div>
<div class="row gutters-10 justify-content-center">
@if (addon_is_activated('seller_subscription'))
<div class="col-md-4 mx-auto mb-3" >
<div class="bg-grad-1 text-white rounded-lg overflow-hidden">
<span class="size-30px rounded-circle mx-auto bg-soft-primary d-flex align-items-center justify-content-center mt-3">
<i class="las la-upload la-2x text-white"></i>
</span>
<div class="px-3 pt-3 pb-3">
<div class="h4 fw-700 text-center">{{ max(0, auth()->user()->shop->product_upload_limit - auth()->user()->products()->count()) }}</div>
<div class="opacity-50 text-center">{{ translate('Remaining Uploads') }}</div>
</div>
</div>
</div>
@endif
<div class="col-md-4 mx-auto mb-3" >
<a href="{{ route('seller.digitalproducts.create')}}">
<div class="p-3 rounded mb-3 c-pointer text-center bg-white shadow-sm hov-shadow-lg has-transition">
<span class="size-60px rounded-circle mx-auto bg-secondary d-flex align-items-center justify-content-center mb-3">
<i class="las la-plus la-3x text-white"></i>
</span>
<div class="fs-18 text-primary">{{ translate('Add New Digital Product') }}</div>
</div>
</a>
</div>
@if (addon_is_activated('seller_subscription'))
@php
$seller_package = \App\Models\SellerPackage::find(Auth::user()->shop->seller_package_id);
@endphp
<div class="col-md-4">
<a href="{{ route('seller.seller_packages_list') }}" class="text-center bg-white shadow-sm hov-shadow-lg text-center d-block p-3 rounded">
@if($seller_package != null)
<img src="{{ uploaded_asset($seller_package->logo) }}" height="44" class="mw-100 mx-auto">
<span class="d-block sub-title mb-2">{{ translate('Current Package')}}: {{ $seller_package->getTranslation('name') }}</span>
@else
<i class="la la-frown-o mb-2 la-3x"></i>
<div class="d-block sub-title mb-2">{{ translate('No Package Found')}}</div>
@endif
<div class="btn btn-outline-primary py-1">{{ translate('Upgrade Package')}}</div>
</a>
</div>
@endif
</div>
<div class="card">
<div class="card-header">
<div class="col text-center text-md-left">
<h5 class="mb-md-0 h6">{{ translate('All Products') }}</h5>
</div>
</div>
<div class="card-body">
<table class="table aiz-table mb-0">
<thead>
<tr>
<th>#</th>
<th width="30%">{{ translate('Name')}}</th>
<th data-breakpoints="md">{{ translate('Category')}}</th>
<th data-breakpoints="md">{{ translate('Base Price')}}</th>
<th data-breakpoints="md">{{ translate('Published')}}</th>
<th data-breakpoints="md">{{ translate('Featured')}}</th>
<th class="text-right">{{ translate('Options')}}</th>
</tr>
</thead>
<tbody>
@foreach ($products as $key => $product)
<tr>
<td>{{ $key+1 }}</td>
<td><a href="{{ route('product', $product->slug) }}" target="_blank">{{ $product->getTranslation('name') }}</a></td>
<td>
@if ($product->category != null)
{{ $product->category->getTranslation('name') }}
@endif
</td>
<td>{{ $product->unit_price }}</td>
<td><label class="aiz-switch aiz-switch-success mb-0">
<input onchange="update_published(this)" value="{{ $product->id }}" type="checkbox" <?php if($product->published == 1) echo "checked";?> >
<span class="slider round"></span></label>
</td>
<td><label class="aiz-switch aiz-switch-success mb-0">
<input onchange="update_featured(this)" value="{{ $product->id }}" type="checkbox" <?php if($product->featured == 1) echo "checked";?> >
<span class="slider round"></span></label>
</td>
<td class="text-right">
<a href="{{route('seller.digitalproducts.edit', ['id'=>$product->id, 'lang'=>env('DEFAULT_LANGUAGE')] )}}" class="btn btn-soft-info btn-icon btn-circle btn-sm" title="{{ translate('Edit') }}">
<i class="las la-edit"></i>
</a>
<a class="btn btn-soft-success btn-icon btn-circle btn-sm" href="{{route('seller.digitalproducts.download', encrypt($product->id))}}" title="{{ translate('Download') }}">
<i class="las la-download"></i>
</a>
<a href="javascript:void(0)" class="btn btn-soft-danger btn-icon btn-circle btn-sm confirm-delete" data-href="{{route('seller.digitalproducts.destroy', $product->id)}}" title="{{ translate('Delete') }}">
<i class="las la-trash"></i>
</a>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="aiz-pagination">
{{ $products->links() }}
</div>
</div>
</div>
@endsection
@section('modal')
@include('modals.delete_modal')
@endsection
@section('script')
<script type="text/javascript">
function update_featured(el){
if(el.checked){
var status = 1;
}
else{
var status = 0;
}
$.post('{{ route('seller.products.featured') }}', {_token:'{{ csrf_token() }}', id:el.value, status:status}, function(data){
if(data == 1){
AIZ.plugins.notify('success', '{{ translate('Featured products updated successfully') }}');
}
else{
AIZ.plugins.notify('danger', '{{ translate('Something went wrong') }}');
location.reload();
}
});
}
function update_published(el){
if(el.checked){
var status = 1;
}
else{
var status = 0;
}
$.post('{{ route('seller.products.published') }}', {_token:'{{ csrf_token() }}', id:el.value, status:status}, function(data){
if(data == 1){
AIZ.plugins.notify('success', '{{ translate('Published products updated successfully') }}');
}
else if(data == 2){
AIZ.plugins.notify('danger', '{{ translate('Please upgrade your package.') }}');
location.reload();
}
else{
AIZ.plugins.notify('danger', '{{ translate('Something went wrong') }}');
location.reload();
}
});
}
</script>
@endsection