Commit 8eb3175a by Angel MAS

info sale product, models cart

parent 3f966f87
......@@ -10,6 +10,7 @@ use Onestartup\Shop\Model\ProductCategoryShop as Category;
use Onestartup\Shop\Model\ProductImageShop as Gallery;
use Onestartup\Shop\Model\ProductShop as Product;
use Onestartup\Shop\Model\ExtraField as Extra;
use Onestartup\Shop\Model\ProductShopInfo as ProductInfo;
class AdminProductController extends Controller
......@@ -72,10 +73,19 @@ class AdminProductController extends Controller
$categories = Category::pluck('name', 'id');
$extras = Extra::where('active', true)->orderBy('variable', 'asc')->get();
if ($product->infoSale != null) {
$info = $product->infoSale;
} else {
$info = new ProductInfo();
}
//return $info;
return view('shop::product.edit')
->with('categories', $categories)
->with('product', $product)
->with('info', $info)
->with('extras', $extras);
}
......@@ -248,4 +258,23 @@ class AdminProductController extends Controller
->with('message_success', 'Información actualizada');
}
public function extraInfo(Request $request)
{
$info = ProductInfo::find($request->product_id);
if ($info == null) {
$info = new ProductInfo();
}
$info->fill($request->all());
$info->save();
return redirect()
->back()
->with('message_success', 'Información de venta actualizada');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateClientShopsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('client_shops', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 455);
$table->string('lastname', 455);
$table->string('email', 455);
$table->string('phone');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('client_shops');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSaleShopsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('sale_shops', function (Blueprint $table) {
$table->increments('id');
$table->tinyInteger('status');
$table->float('total');
$table->integer('client_id')->unsigned()->nullable();
$table->foreign('client_id')
->references('id')
->on('client_shops')
->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('sale_shops');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateDetailShopsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('detail_shops', function (Blueprint $table) {
$table->increments('id');
$table->integer('quantity');
$table->integer('product_id')->unsigned();
$table->foreign('product_id')
->references('id')
->on('products_shop')
->onDelete('cascade');
$table->integer('sale_id')->unsigned();
$table->foreign('sale_id')
->references('id')
->on('sale_shops')
->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('detail_shops');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProductShopInfosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('product_shop_infos', function (Blueprint $table) {
$table->increments('id');
$table->string('unity', 355);
$table->float('purchase_price')->nullable();
$table->float('sale_price');
$table->integer('quantity')->nullable();
$table->integer('reserve_amount')->nullable();
$table->integer('product_id')->unsigned();
$table->foreign('product_id')
->references('id')
->on('products_shop')
->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('product_shop_infos');
}
}
<?php
namespace Onestartup\Shop\Model;
use Illuminate\Database\Eloquent\Model;
class ClientShop extends Model
{
protected $table = 'client_shops';
protected $fillable = [
'name',
'lastname',
'email',
'phone'
];
}
<?php
namespace Onestartup\Shop\Model;
use Illuminate\Database\Eloquent\Model;
class DetailShop extends Model
{
protected $table = "detail_shops";
protected $fillable = ['product_id', 'sale_id', 'quantity'];
}
......@@ -45,4 +45,9 @@ class ProductShop extends Model
{
return $this->hasMany('Onestartup\Shop\Model\ProductImageShop', 'product_id');
}
public function infoSale()
{
return $this->hasOne('Onestartup\Shop\Model\ProductShopInfo', 'product_id');
}
}
<?php
namespace Onestartup\Shop\Model;
use Illuminate\Database\Eloquent\Model;
class ProductShopInfo extends Model
{
protected $table = 'product_shop_infos';
protected $fillable = [
'unity',
'purchase_price',
'sale_price',
'quantity',
'reserve_amount',
'product_id'
];
public function product()
{
return $this->belongsTo('Onestartup\Shop\Model\ProductShop', 'product_id');
}
}
<?php
namespace Onestartup\Shop\Model;
use Illuminate\Database\Eloquent\Model;
class SaleShop extends Model
{
protected $table = 'sale_shops';
protected $fillable = ['state', 'total', 'client_id'];
}
......@@ -35,6 +35,10 @@ Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){
'Onestartup\Shop\Controller\AdminProductController@postVars')
->name('admin-shop-product.store.vars');
Route::post('admin/shop/product-extra',
'Onestartup\Shop\Controller\AdminProductController@extraInfo')
->name('admin-shop-product.extra.info');
});
Route::group(['middleware' => ['web']], function(){
......
......@@ -5,7 +5,7 @@
<div class='col-md-12'>
<div class='box'>
<div class='box-header dark'>
<h2>Actualizar información</h2>
<h2>Agregar nuevo producto</h2>
</div>
<div class='box-body'>
{!! Form::open(['route'=> 'admin.shop.product.store','method'=>'POST', "id"=>"target", 'enctype'=>'multipart/form-data']) !!}
......
......@@ -3,175 +3,224 @@
<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/min/dropzone.min.css" rel='stylesheet' type='text/css'>
@endsection
@section('content')
<div class='row'>
<div class='col-md-12'>
<div class='box'>
<div class='box-header dark'>
<h2>Actualizar información del producto</h2>
</div>
<div class='box-body'>
{!! Form::model($product,['route'=> ['admin.shop.product.update', $product->id],"method"=>"PUT", 'enctype'=>'multipart/form-data']) !!}
@include('shop::product.fields')
</div>
<div class='dker p-a text-right'>
<div class='col-md-12'>
<a class='btn danger' href="{{route('admin.shop.product.index')}}" style='margin-right:10px'>Cancelar</a>
{!! Form::submit('Actualizar información', ['class'=>'btn dark']) !!}
{!! Form::close() !!}
</div>
<div class="row">
<div class="col-md-12">
<div class="nav-active-border b-primary">
<ul class="nav nav-sm">
<li class="nav-item">
<a class="nav-link block active" href="" data-toggle="tab" data-target="#tab-1">
<h6>Información general</h6>
</a>
</li>
<li class="nav-item">
<a class="nav-link block" href="" data-toggle="tab" data-target="#tab-2">
<h6>Información de venta</h6>
</a>
</li>
<li class="nav-item">
<a class="nav-link block" href="" data-toggle="tab" data-target="#tab-3">
<h6>Galeria de imagénes</h6>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="tab-content pos-rlt">
<div class='row'>
<div class='col-md-12'>
<div class='box'>
<div class='box-header dark'>
<h2>Galeria de imagenes</h2>
</div>
<div class='box-body'>
<div class="row">
<div class="col-md-6">
{!! Form::open(['route'=> ['admin-shop-product.store.gallery', $product->id], 'method' => 'POST', 'files'=>'true', 'id' => 'my-dropzone' , 'class' => 'dropzone']) !!}
<div class="tab-pane active" id="tab-1">
<div class="p-a-md dark _400">Información general</div>
<div class="box">
<div class="box-body">
{!! Form::model($product,['route'=> ['admin.shop.product.update', $product->id],"method"=>"PUT", 'enctype'=>'multipart/form-data']) !!}
@include('shop::product.fields')
</div>
<div class='dker p-a text-right'>
<div class='col-md-12'>
<a class='btn danger' href="{{route('admin.shop.product.index')}}" style='margin-right:10px'>Cancelar</a>
{!! Form::submit('Actualizar información', ['class'=>'btn dark']) !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div><!-- end tab-1 -->
<div class="tab-pane" id="tab-2">
<div class="p-a-md dark _600">Información de venta</div>
<div class="box">
<div class="box-body">
{!! Form::model($info,['route'=> ['admin-shop-product.extra.info'],"method"=>"POST"]) !!}
@include('shop::product.fields_extra')
</div>
<div class='dker p-a text-right'>
<div class='col-md-12'>
<a class='btn danger' href="{{route('admin.shop.product.index')}}" style='margin-right:10px'>Cancelar</a>
{!! Form::submit('Actualizar información', ['class'=>'btn dark']) !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div><!-- end tab-2 -->
<div class="tab-pane" id="tab-3">
<div class="p-a-md dark _600">Galeria de imagénes</div>
<div class="box">
<div class="box-body">
<div class="row">
<div class="col-md-6">
{!! Form::open(['route'=> ['admin-shop-product.store.gallery', $product->id], 'method' => 'POST', 'files'=>'true', 'id' => 'my-dropzone' , 'class' => 'dropzone']) !!}
<div class="dz-message" style="height:200px;">
Arrastra las imagenes aqui
Arrastra las imagenes aqui
</div>
<div class="dropzone-previews"></div>
<button type="submit" class="btn btn-success" id="submitFiles">Save</button>
{!! Form::close() !!}
<button type="submit" class="btn btn-success" id="submitFiles" style="display: none;">Save</button>
{!! Form::close() !!}
</div>
<div class="col-md-6">
@if($product->images->count() > 0)
</div>
<div class="col-md-6">
@if($product->images->count() > 0)
<div class="row">
@foreach($product->images as $img)
<div class="col-md-4">
<img src="{{$img->path}}" width="100%">
{!! Form::open(['route'=> ['admin-shop-product.delete.gallery',$img->id],'method'=>'DELETE'])!!}
<button class='btn btn-danger btn-block' onclick="return confirm('¿Estás seguro de eliminar este elemento?');" type='submit'>
<i class='fas fa-trash-alt icon-special-size'></i>
Eliminar
</button>
{!! Form::close()!!}
</div>
<div class="col-md-4">
<img src="{{$img->path}}" width="100%">
{!! Form::open(['route'=> ['admin-shop-product.delete.gallery',$img->id],'method'=>'DELETE'])!!}
<button class='btn btn-danger btn-block' onclick="return confirm('¿Estás seguro de eliminar este elemento?');" type='submit'>
<i class='fas fa-trash-alt icon-special-size'></i>
Eliminar
</button>
{!! Form::close()!!}
</div>
@endforeach
</div>
@endif
@endif
</div>
</div>
</div>
</div>
</div>
</div><!-- end tab-3 -->
</div>
</div>
</div>
<!-- .modal nuevo contrato -->
<div class='modal fade' data-backdrop='true' id='ver'>
<div class='modal-dialog modal-lg'>
<div class='modal-content box-shadow-z3'>
<div class='modal-body text-center p-lg'>
@if ($product->cover == null)
<!-- .modal nuevo contrato -->
<div class='modal fade' data-backdrop='true' id='ver'>
<div class='modal-dialog modal-lg'>
<div class='modal-content box-shadow-z3'>
<div class='modal-body text-center p-lg'>
@if ($product->cover == null)
<h4>No hay imagen asignada</h4>
@else
@else
<img class='image-modal-preview' src="{{asset('storage/'.$product->cover)}}">
@endif
</div>
<div class='modal-footer'>
<button class='btn dark p-x-md' data-dismiss='modal' type='button'>Cerrar</button>
@if($product->cover != null)
@endif
</div>
<div class='modal-footer'>
<button class='btn dark p-x-md' data-dismiss='modal' type='button'>Cerrar</button>
@if($product->cover != null)
{!! Form::open(['route'=> ['admin-shop-product.delete.cover',$product->id],'method'=>'DELETE'])!!}
<button class='btn btn-danger button-mb' onclick="return confirm('¿Estás seguro de eliminar este elemento?');" type='submit'>
<i class='fas fa-trash-alt icon-special-size'></i>
Eliminar
</button>
<button class='btn btn-danger button-mb' onclick="return confirm('¿Estás seguro de eliminar este elemento?');" type='submit'>
<i class='fas fa-trash-alt icon-special-size'></i>
Eliminar
</button>
{!! Form::close()!!}
@endif
@endif
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-content -->
</div>
</div>
@endsection
@endsection
@section('script_extras')
<script src='https://cdn.ckeditor.com/4.8.0/standard/ckeditor.js'></script>
<script>
var options = {
filebrowserImageBrowseUrl: '/laravel-filemanager?type=Images',
filebrowserImageUploadUrl: '/laravel-filemanager/upload?type=Images&_token=',
filebrowserBrowseUrl: '/laravel-filemanager?type=Files',
filebrowserUploadUrl: '/laravel-filemanager/upload?type=Files&_token='
};
</script>
<script>
CKEDITOR.replace('description', options);
CKEDITOR.replace('features', options);
CKEDITOR.replace('specifications', options);
$("#publication_date").datepicker({
dateFormat: "yy-mm-dd"
});
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/min/dropzone.min.js"></script>
@section('script_extras')
<script src='https://cdn.ckeditor.com/4.8.0/standard/ckeditor.js'></script>
<script>
var options = {
filebrowserImageBrowseUrl: '/laravel-filemanager?type=Images',
filebrowserImageUploadUrl: '/laravel-filemanager/upload?type=Images&_token=',
filebrowserBrowseUrl: '/laravel-filemanager?type=Files',
filebrowserUploadUrl: '/laravel-filemanager/upload?type=Files&_token='
};
</script>
<script>
CKEDITOR.replace('description', options);
CKEDITOR.replace('features', options);
CKEDITOR.replace('specifications', options);
$("#publication_date").datepicker({
dateFormat: "yy-mm-dd"
});
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.4.0/min/dropzone.min.js"></script>
<script type="text/javascript">
Dropzone.options.myDropzone = {
autoProcessQueue: true,
uploadMultiple: true,
maxFilezise: 30,
maxFiles: 10,
parallelUploads: 10,
init: function() {
var submitBtn = document.querySelector("#submitFiles");
myDropzone = this;
submitBtn.addEventListener("click", function(e){
e.preventDefault();
e.stopPropagation();
myDropzone.processQueue();
});
this.on("addedfile", function(file) {
<script type="text/javascript">
Dropzone.options.myDropzone = {
autoProcessQueue: true,
uploadMultiple: true,
maxFilezise: 30,
maxFiles: 10,
parallelUploads: 10,
init: function() {
var submitBtn = document.querySelector("#submitFiles");
myDropzone = this;
submitBtn.addEventListener("click", function(e){
e.preventDefault();
e.stopPropagation();
myDropzone.processQueue();
});
this.on("addedfile", function(file) {
//alert("file uploaded");
});
this.on("complete", function(file) {
myDropzone.removeFile(file);
});
this.on("complete", function(file) {
myDropzone.removeFile(file);
//alert('que pex');
});
this.on("success", function(myDropzone){
swal({
title: "Finalizado",
text: "Tus imagénes subieron correctamente",
icon: "success",
closeOnEsc: false,
closeOnClickOutside: false,
}).then((value) => {
location.reload();
});
myDropzone.processQueue.bind(myDropzone)
});
}
};
this.on("success", function(myDropzone){
swal({
title: "Finalizado",
text: "Tus imagénes subieron correctamente",
icon: "success",
closeOnEsc: false,
closeOnClickOutside: false,
}).then((value) => {
location.reload();
});
myDropzone.processQueue.bind(myDropzone)
});
}
};
</script>
@if($extras->count() > 0)
@foreach($extras as $extra)
@if($extra->type == 'textarea')
<script type="text/javascript">
CKEDITOR.replace({{$extra->variable}}, options);
</script>
@endif
@endforeach
@foreach($extras as $extra)
@if($extra->type == 'textarea')
<script type="text/javascript">
CKEDITOR.replace({{$extra->variable}}, options);
</script>
@endif
@endforeach
@endif
@endif
@endsection
<div class="row">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('purchase_price', 'Precio de compra', ['class'=>'control-label'])!!}
{!! Form::text('purchase_price', null, ["class"=>"form-control", "required"=>"required"]) !!}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{!! Form::label('sale_price', 'Precio de venta', ['class'=>'control-label'])!!}
{!! Form::text('sale_price', null, ["class"=>"form-control", "required"=>"required"]) !!}
</div>
</div>
</div>
<div class='row'>
<div class='col-md-6'>
<div class="form-group" >
{!! Form::label('quantity', 'Cantidad', ['class'=>'control-label'])!!}
{!! Form::text('quantity', null, ["class"=>"form-control", "required"=>"required"]) !!}
</div>
</div>
<div class='col-md-6'>
<div class="form-group" >
{!! Form::label('reserve_amount', 'Cantidad de reserva', ['class'=>'control-label'])!!}
{!! Form::text('reserve_amount', null, ["class"=>"form-control", "required"=>"required"]) !!}
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
{!! Form::label('unity', 'Unidad', ['class'=>'control-label'])!!}
{!! Form::select('unity', ['Pieza'=>'Pieza', 'Kilogramo'=>'Kilogramo','Metro'=>'Metro', 'Litro'=>'Litro', 'Gramo'=>'Gramo'],null, ["class"=>"form-control", "required"=>"required"]) !!}
</div>
</div>
{!! Form::hidden('product_id', $product->id) !!}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment