Commit 680a83ae by Angel MAS

envia, cancela y reenvia facturas

parent a61dbfed
......@@ -12,6 +12,7 @@ use Onestartup\Shop\Model\ProductShop as Product;
use Onestartup\Shop\Model\ExtraField as Extra;
use Onestartup\Shop\Model\ProductShopInfo as ProductInfo;
use Onestartup\Shop\Model\CategoriaSat;
use Onestartup\Shop\Model\Billing;
use Onestartup\Shop\DataTables\ClientDataTable;
use Onestartup\Shop\DataTables\OrderDataTable;
......@@ -19,6 +20,7 @@ use Onestartup\Shop\DataTables\StockDataTable;
use Onestartup\Shop\Model\SaleShop as Sale;
use Onestartup\Shop\Model\OrderTracking as Tracking;
use Onestartup\Shop\Model\ConfiguracionFactura as Config;
use Onestartup\Shop\Libs\Util;
use Onestartup\Shop\Requests\RequestProduct;
......@@ -464,24 +466,24 @@ class AdminProductController extends Controller
$billing = $sale->billing;
$products = $sale->products;
$conceptos = [];
//return $products;
$util = new Util();
$config = Config::first();
$emisor = \FacturaDigital::emisor()
->setRegimenFiscal('612')
->setRegimenFiscal($config->regimen_fiscal)
->getData();
$receptor = \FacturaDigital::receptor()
->setRfc($billing->rfc)
->setNombre($billing->razon)
->setUsoCFDI($billing->uso_cfdi)
->setCalle($billing->calle)
->setNoExt($billing->numero)
->setColonia($billing->colonia)
->setMunicipio($billing->ciudad)
->setEstado($billing->estado)
->setCalle($billing->calle != null ? $billing->calle : '')
->setNoExt($billing->numero != null ? $billing->numero : '')
->setColonia($billing->colonia != null ? $billing->colonia : '')
->setMunicipio($billing->ciudad != null ? $billing->ciudad : '')
->setEstado($billing->estado != null ? $billing->estado : '')
->setPais('Mexico')
->setCodigoPostal($billing->cp)
->setCodigoPostal($billing->cp != null ? $billing->cp : '')
->getData();
......@@ -498,24 +500,50 @@ class AdminProductController extends Controller
array_push($conceptos, $concepto);
}
if ($sale->home_delivery) {
$envio = $sale->client->shipping->shipping_price;
$concepto = \FacturaDigital::concepto()
->setClaveProdServ('78102203')
->setNoIdentificacion(1000)
->setCantidad(1)
->setClaveUnidad('E48')
->setUnidad('Unidad de Servicio')
->setDescripcion($envio->name)
->setValorUnitario($envio->cost)
->getData();
array_push($conceptos, $concepto);
}
$lista = \FacturaDigital::listaConceptos();
$lista->setConceptos($conceptos);
$totales = $lista->getTotalConceptos();
$descuento = null;
$descuento_aux = 0;
if($sale->coupon != null) {
$data_discount = $util->getDiscount($sale, $sale->coupon);
$descuento = $data_discount['amount_unformated'];
$descuento_aux = $data_discount['amount_unformated'];
}
$factura = \FacturaDigital::setSerie('F')
->setFolio('71278')
->setFolio($sale->id)
->setFecha('AUTO')
->setFormaPago('01')
->setFormaPago($billing->forma_pago)
->setCondicionesDePago('Pago de contado')
->setMoneda('MXN')
->setTipoCambio('1')
->setTipoDeComprobante('I')
->setMetodoPago('PUE')
->setLugarExpedicion('67150') //C.P.
->setLeyendaFolio('Factura')
->setLugarExpedicion($config->lugar_expedicion) //C.P.
->setLeyendaFolio('Folio')
->setSubTotal($totales['totalConceptos'])
//->setDescuento('30.00')
->setTotal($totales['totalConceptos'] + $totales['totalImpuestos'] );
->setDescuento($descuento)
->setTotal($totales['totalConceptos'] + $totales['totalImpuestos'] - $descuento_aux );
$impuesto = \FacturaDigital::impuesto()
......@@ -527,6 +555,8 @@ class AdminProductController extends Controller
$factura->setConceptos($lista->getData());
$factura->setImpuestos($impuesto);
//return $factura->getData();
$factura_final = $factura->enviar();
......@@ -546,12 +576,88 @@ class AdminProductController extends Controller
return redirect()->back()->with('message_warning', "No se pudo enviar la factura");
}
} else {
return redirect()->back()->with('message_danger', $factura_final['mensaje']);
return redirect()->back()->with('message_danger', $factura_final['mensaje'].' ó Verifica que los datos del cliente sean correctos');
}
}
public function facturaEnviar(Request $request, $billing_id) {
$billing = Billing::find($billing_id);
$enviar = \FacturaDigital::enviarCorreo($billing->uuid, $billing->correo, '');
if ($enviar) {
return redirect()->back()->with('message_success', "Factura enviada por correo");
} else {
return redirect()->back()->with('message_warning', "No se pudo enviar la factura");
}
}
public function facturaCancelar(Request $request, $billing_id) {
$billing = Billing::find($billing_id);
$cancela = \FacturaDigital::cancelarCFDI($billing->uuid);
if ($cancela['codigo'] != 200) {
$billing->status = 2;
$billing->save();
return redirect()->back()->with('message_warning', $cancela['mensaje']);
} else {
return redirect()->back()->with('message_danger', $cancela['mensaje']);
}
}
public function showConfigs() {
$config = Config::first();
$regimen = [
'603' => 'Personas Morales con Fines no Lucrativos',
'605' => 'Sueldos y Salarios e Ingresos Asimilados a Salarios',
'606' => 'Arrendamiento',
'608' => 'Demás ingresos',
'609' => 'Consolidación',
'610' => 'Residentes en el Extranjero sin Establecimiento Permanente en México',
'611' => 'Ingresos por Dividendos (socios y accionistas)',
'612' => 'Personas Físicas con Actividades Empresariales y Profesionales',
'614' => 'Ingresos por intereses',
'616' => 'Sin obligaciones fiscales',
'620' => 'Sociedades Cooperativas de Producción que optan por diferir sus ingresos',
'621' => 'Incorporación Fiscal',
'622' => 'Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras',
'623' => 'Opcional para Grupos de Sociedades',
'624' => 'Coordinados',
'628' => 'Hidrocarburos',
'607' => 'Régimen de Enajenación o Adquisición de Bienes',
'629' => 'De los Regímenes Fiscales Preferentes y de las Empresas Multinacionales',
'630' => 'Enajenación de acciones en bolsa de valores',
'615' => 'Régimen de los ingresos por obtención de premios'
];
if ($config == null) {
$config = new Config();
}
return view('shop::config_factura.edit')
->with('config', $config)
->with('regimen', $regimen);
}
public function postConfigs(Request $request) {
$config = Config::first();
if ($config == null) {
$config = new Config();
}
$config->fill($request->all());
$config->save();
return redirect()
->back()
->with('message_success', 'Información actualizada');
}
}
......@@ -993,6 +993,14 @@ public function facturacion($order_id)
\DB::raw("CONCAT(descripcion,' - Persona Física ',fisica, ', Persona Moral ', moral) AS resumen"),'clave_uso')
->pluck('resumen', 'clave_uso');
$forma_pago = [
'01' => 'Efectivo',
'02' => 'Cheque Nominativo',
'03' => 'Transferencia electrónica',
'04' => 'Tarjeta de crédito',
'28' => 'Tarjeta de débito'
];
if ($order->billing()->count() > 0 ) {
$billing = $order->billing;;
......@@ -1009,6 +1017,7 @@ public function facturacion($order_id)
->with('products', $products)
->with('total', 0)
->with('uso_cfdi', $uso_cfdi)
->with('forma_pago', $forma_pago)
->with('addres', $addres);
......@@ -1020,9 +1029,13 @@ public function facturacionStore(Request $request, $order_id)
$order = Sale::find($id_decript);
$billing = null;
if ($order->billing()->count() <= 0 ) {
if ($order->billing()->count() < 1 ) {
$billing = new Billing($request->all());
$order->billing()->save($billing);
} else {
$billing = $order->billing;
$billing->fill($request->all());
$billing->save();
}
......
......@@ -19,12 +19,12 @@ class CreateBillingsTable extends Migration
$table->string('razon');
$table->string('rfc');
$table->string('correo');
$table->string('cp');
$table->string('calle');
$table->string('numero');
$table->string('colonia');
$table->string('ciudad');
$table->string('estado');
$table->string('cp')->nullable();
$table->string('calle')->nullable();
$table->string('numero')->nullable();
$table->string('colonia')->nullable();
$table->string('ciudad')->nullable();
$table->string('estado')->nullable();
$table->tinyInteger('status')->default(0);
$table->integer('sale_id')->unsigned();
......
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddFormaPagoToBillingTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('billings', function (Blueprint $table) {
$table->string('forma_pago');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('billings', function (Blueprint $table) {
$table->dropColumn('forma_pago');
});
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateConfiguracionFacturasTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('configuracion_facturas', function (Blueprint $table) {
$table->increments('id');
$table->string('regimen_fiscal');
$table->string('lugar_expedicion');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('configuracion_facturas');
}
}
......@@ -22,7 +22,8 @@ class Billing extends Model
'folio',
'uuid',
'pdf',
'xml'
'xml',
'forma_pago'
];
public function sale()
......
<?php
namespace Onestartup\Shop\Model;
use Illuminate\Database\Eloquent\Model;
class ConfiguracionFactura extends Model
{
protected $table = 'configuracion_facturas';
protected $fillable = [
'regimen_fiscal',
'lugar_expedicion'
];
}
......@@ -15,6 +15,14 @@ Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){
'Onestartup\Shop\Controller\AdminProductController@facturar')
->name('admin.shop.facturar');
Route::put('admin/shop/facturaCancelar/{billing_id}',
'Onestartup\Shop\Controller\AdminProductController@facturaCancelar')
->name('admin.shop.facturaCancelar');
Route::put('admin/shop/facturaEnviar/{billing_id}',
'Onestartup\Shop\Controller\AdminProductController@facturaEnviar')
->name('admin.shop.facturaEnviar');
Route::delete('admin-shop-category/delete/cover{id}',
'Onestartup\Shop\Controller\CategoryController@deleteCover')
->name('admin-shop-category.delete.cover');
......@@ -87,6 +95,14 @@ Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){
'Onestartup\Shop\Controller\CategorySatController@apiClaveProd')
->name('admin-shop-client.apiClaveProd');
Route::get('admin/shop/config_factura',
'Onestartup\Shop\Controller\AdminProductController@showConfigs')
->name('admin.shop.config_factura');
Route::post('admin/shop/config_factura',
'Onestartup\Shop\Controller\AdminProductController@postConfigs')
->name('admin.shop.config_factura.store');
});
......
......@@ -215,28 +215,8 @@ setlocale(LC_MONETARY, 'en_US');
<div class="box">
<div class="box-body">
<div class="row">
<div class="col-md-6">
@if($shipping != null)
Direccion de entrega:<br>
<b>{{$shipping->calle}}, # {{$shipping->numero}}, col. {{$shipping->colonia}}</b><br>
<b>{{$shipping->ciudad}}, {{$shipping->estado}}</b><br>
C.P. <b>{{$shipping->cp}}</b><br>
Referencias:<br>
<b>{{$shipping->referencias}}</b><br>
Estatus del envio: <a href="javascript::void()" data-target="#m-a-a" data-toggle="modal" href="#" ui-target="#animate" ui-toggle-class="zoom"><i class="fa fa-edit"></i></a><br>
<span class="label warning">{{$sale->shipping_status}}</span>
@else
<h6>
No hay datos de envio, el cliente pasará a la tienda a recoger el producto
</h6>
@endif
</div>
<div class="col-md-6">
<div class="col-md-6">
<h4>Datos de facturación</h4>
<p>
¿Requiere factura? <b>{{$sale->facturacion}}</b>
......@@ -250,10 +230,21 @@ setlocale(LC_MONETARY, 'en_US');
{!! Form::close() !!}
<br>
@endif
@if($sale->billing->status == 1)
<b>Factura Enviada</b><br>
<a href="#" class="btn btn-xs primary">Reenviar factura por correo</a>
{!! Form::model($sale->billing,['route'=> ['admin.shop.facturaEnviar',$sale->billing->id],"method"=>"PUT"]) !!}
{!! Form::submit('Reenviar factura por correo', ['class'=>'btn-xs primary']) !!}
{!! Form::close() !!}
<br>
{!! Form::model($sale->billing,['route'=> ['admin.shop.facturaCancelar',$sale->billing->id],"method"=>"PUT"]) !!}
<button class='btn btn-xs btn-danger button-mb' onclick="return confirm('¿Estás seguro de cancelar esta factura?');" type='submit'>
<i class='fas fa-trash-alt icon-special-size'></i>
Cancelar factura
</button>
{!! Form::close() !!}
<br>
UUID: <b>{{$sale->billing->uuid}}</b><br>
PDF: <a href="{{$sale->billing->pdf}}" target="blank">{{$sale->billing->pdf}}</a><br>
......@@ -261,7 +252,7 @@ setlocale(LC_MONETARY, 'en_US');
@endif
@if($sale->billing->status == 2)
Factura Cancelada
<b> Factura Cancelada</b><br>
@endif
<br>Dirección: <br>
......@@ -285,6 +276,30 @@ setlocale(LC_MONETARY, 'en_US');
</a>
@endif
</div>
<div class="col-md-6">
@if($shipping != null)
Direccion de entrega:<br>
<b>{{$shipping->calle}}, # {{$shipping->numero}}, col. {{$shipping->colonia}}</b><br>
<b>{{$shipping->ciudad}}, {{$shipping->estado}}</b><br>
C.P. <b>{{$shipping->cp}}</b><br>
Referencias:<br>
<b>{{$shipping->referencias}}</b><br>
Estatus del envio: <a href="javascript::void()" data-target="#m-a-a" data-toggle="modal" href="#" ui-target="#animate" ui-toggle-class="zoom"><i class="fa fa-edit"></i></a><br>
<span class="label warning">{{$sale->shipping_status}}</span>
@else
<h6>
No hay datos de envio, el cliente pasará a la tienda a recoger el producto
</h6>
@endif
</div>
</div>
</div>
</div>
......
@extends('crm-admin::main-layout')
@section('breadcrumb')
<li class="breadcrumb-item">
<a href="{{route('home')}}">Home</a>
</li>
<li class="breadcrumb-item active">
Configuración de datos de facturación
</li>
@endsection
@section('content')
<div class='row'>
<div class='col-md-12'>
<div class='box'>
<div class='box-header dark'>
<h2>Configuracion de datos facturación</h2>
</div>
<div class='box-body'>
<div class='col-md-12'>
{!! Form::model($config,['route'=> ['admin.shop.config_factura.store'],"method"=>"POST"]) !!}
@include('shop::config_factura.fields')
</div>
</div>
<div class='dker p-a text-right'>
<div class='col-md-12'>
{!! Form::submit('Actualizar información', ['class'=>'btn dark']) !!}
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
<div class="row">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('regimen_fiscal', 'Régimen Fiscal') !!}
{!! Form::select('regimen_fiscal', $regimen, null, ["class"=>"form-control"]) !!}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{!! Form::label('lugar_expedicion', 'Lugar de expedición (Código Postal)') !!}
{!! Form::text('lugar_expedicion', null, ["class"=>"form-control"]) !!}
</div>
</div>
</div>
<div class="form-group">
{!! Form::label('razon', 'Nombre o razón social', ['class'=>'form-control']) !!}
{!! Form::label('razon', 'Nombre o razón social *', ['class'=>'form-control']) !!}
{!! Form::text('razon', null, ['class'=>'form-control','required'=>'required']) !!}
</div>
<div class="form-group">
{!! Form::label('rfc', 'RFC', ['class'=>'form-control']) !!}
{!! Form::label('rfc', 'RFC *', ['class'=>'form-control']) !!}
{!! Form::text('rfc', null, ['class'=>'form-control','required'=>'required']) !!}
</div>
<div class="form-group">
{!! Form::label('correo', 'Correo electrónico', ['class'=>'form-control']) !!}
{!! Form::label('correo', 'Correo electrónico *', ['class'=>'form-control']) !!}
{!! Form::text('correo', null, ['class'=>'form-control','required'=>'required']) !!}
</div>
<div class="form-group">
{!! Form::label('calle', 'Calle', ['class'=>'form-control']) !!}
{!! Form::text('calle', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('calle', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('numero', 'Numero', ['class'=>'form-control']) !!}
{!! Form::text('numero', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('numero', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('colonia', 'Colonia', ['class'=>'form-control']) !!}
{!! Form::text('colonia', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('colonia', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('estado', 'Estado', ['class'=>'form-control']) !!}
{!! Form::text('estado', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('estado', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('ciudad', 'Ciudad o delegación', ['class'=>'form-control']) !!}
{!! Form::text('ciudad', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('ciudad', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('cp', 'Codigo postal', ['class'=>'form-control']) !!}
{!! Form::text('cp', null, ['class'=>'form-control','required'=>'required']) !!}
{!! Form::text('cp', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('uso_cfdi', 'Uso del CFDI', ['class'=>'form-control']) !!}
{!! Form::label('uso_cfdi', 'Uso del CFDI *', ['class'=>'form-control']) !!}
{!! Form::select('uso_cfdi', $uso_cfdi, null, ['class'=>'form-control','required'=>'required']) !!}
</div>
<div class="form-group">
{!! Form::label('forma_pago', 'Forma de pago *', ['class'=>'form-control']) !!}
{!! Form::select('forma_pago', $forma_pago, null, ['class'=>'form-control','required'=>'required']) !!}
</div>
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