Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions app/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@

class Client extends Model
{
protected $fillable =
[
'name',
'last_name',
'id_type',
'id_card',
'email',
'cellphone',
'country',
'city',
'address'
];
public function invoices()
{
return $this->hasMany(Invoice::class);
Expand Down
18 changes: 18 additions & 0 deletions app/Exports/ClientExport.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace App\Exports;

use App\Client;
use Maatwebsite\Excel\Concerns\FromCollection;

class ClientExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Client::all();
}
}

116 changes: 92 additions & 24 deletions app/Http/Controllers/ClientsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\{Client, Invoice};
use Illuminate\Http\Request;
use App\Exports\ClientExport;
use App\Imports\ClientImport;
use Illuminate\Validation\Rule;
use Maatwebsite\Excel\Facades\Excel;

class ClientsController extends Controller
{
Expand All @@ -23,7 +27,7 @@ public function index(Request $request)
$clients = Client::orderBy('id', 'DESC')
->search($search, $type)
->paginate(4);
return view('client.index', compact('clients'));
return view('client.index', compact('clients', 'search'));
}

/**
Expand All @@ -44,17 +48,35 @@ public function create()
*/
public function store(Request $request)
{
$validData = $request->validate([
'name' => 'required',
'last_name' => 'required',
'id_type' => 'required',
'id_card' => 'required|unique:clients',
'email' => 'required|unique:clients',
'cellphone' => 'required|min:10',
'country' => 'required',
'city' => 'required',
'address' => 'required'
]);
$validData = $request->validate(
[
'name' => 'required|min:3|max:100',
'last_name' => 'required|min:3|max:100',
'id_type' => 'required',
'id_card' => 'required|unique:clients',
'email' => 'required|unique:clients|email',
'cellphone' => 'required|min:10',
'country' => 'required',
'city' => 'required',
'address' => 'required'
],
[
'required' => "El :attribute del Cliente es un campo obligatorio",
'unique' => 'El :attribute ya está registrado',
'min' => 'El :attribute de tener minimo :min letras'
],
[
'name' => 'Nombre',
'last_name' => 'Apellído',
'id_type' => 'Tipo de identificación',
'id_card' => 'Número de identificación',
'email' => 'Correo Electrónico',
'cellphone' => 'Número de Celular',
'country' => 'País',
'city' => 'Ciudad',
'address' => 'Dirección'
]
);
$client = new Client();
$client->name = $validData['name'];
$client->last_name = $validData['last_name'];
Expand Down Expand Up @@ -107,17 +129,42 @@ public function edit($id)
*/
public function update(Request $request, $id)
{
$validData = $request->validate([
'name' => 'required',
'last_name' => 'required',
'id_type' => 'required',
'id_card' => 'required',
'email' => 'required',
'cellphone' => 'required|min:10',
'country' => 'required',
'city' => 'required',
'address' => 'required'
]);
$validData = $request->validate(
[
'name' => 'required|min:3|max:100',
'last_name' => 'required|min:3|max:100',
'id_type' => 'required',
'id_card' => [
'required',
Rule::unique('clients')->ignore($id)
],
'email' => [
'required',
Rule::unique('clients')->ignore($id),
'email'
],
'cellphone' => 'required|min:10',
'country' => 'required',
'city' => 'required',
'address' => 'required'
],
[
'required' => "El :attribute del Cliente es requerido",
'unique' => 'El :atribute ya está registrado',
'min' => 'El :attribute de tener minimo :min letras'
],
[
'name' => 'Nombre',
'last_name' => 'Apellído',
'id_type' => 'Tipo de identificación',
'id_card' => 'Número de identificación',
'email' => 'Correo Electrónico',
'cellphone' => 'Número de Celular',
'country' => 'País',
'city' => 'Ciudad',
'address' => 'Dirección'
]
);
$client = Client::findOrFail($id);
$client->name = $validData['name'];
$client->last_name = $validData['last_name'];
Expand Down Expand Up @@ -152,4 +199,25 @@ public function confirmDelete($id)
'client' => $client
]);
}

public function indexImport()
{
return view('client.importCLient');
}

public function importExcel(Request $request)
{
if ($request->file('file')) {
$path = $request->file('file')->getRealPath();
Excel::import(new ClientImport, $path);
return redirect()->route('clients.index')->with('message', 'Importanción de facturas exítosa');
} else {
return back()->withErrors("ERROR, importación fallída");
}
}

public function exportExcel()
{
return Excel::download(new ClientExport, "client-list.xlsx");
}
}
3 changes: 2 additions & 1 deletion app/Http/Controllers/CompanyController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public function __construct()
{
$this->middleware('auth');
}

/**
* Display a listing of the resource.
*
Expand All @@ -23,7 +24,7 @@ public function index(Request $request)
$companies = Company::orderBy('id', 'DESC')
->search($search, $type)
->paginate(4);
return view('company.index', compact('companies'));
return view('company.index', compact('companies', 'search'));
}

/**
Expand Down
67 changes: 35 additions & 32 deletions app/Http/Controllers/InvoiceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\{Invoice, Client, Product, Company};
use App\Exports\InvoiceExport;
use App\Imports\InvoiceImport;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;
use App\{Invoice, Client, Product, Company};

class InvoiceController extends Controller
{
Expand Down Expand Up @@ -37,21 +38,17 @@ public function index(Request $request)
return view('invoice.index', [
'clients' => Client::all(),
'companies' => Company::all()
], compact('invoices'));
], compact('invoices', 'typeDate', 'firstCreationDate', 'type', 'finalCreationDate', 'state', 'search'));
}

/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
public function create(Invoice $invoice)
{
return view('invoice.create', [
'invoice' => new invoice,
'clients' => Client::all(),
'companies' => Company::all()
]);
return response()->view('invoice.create', compact('invoice'));
}

/**
Expand Down Expand Up @@ -120,14 +117,15 @@ public function update(Request $request, $id)
{
$validData = $request->validate([
'title' => 'required',
'code' => 'required',

'code' => [
'required',
Rule::unique('invoices')->ignore($id)
],
'client_id' => 'required',
'company_id' => 'required',
'state' => 'required',
'stateReceipt' => 'required',
'subtotal' => 'required',
'total' => 'required',
'vat' => 'required',
]);
$invoice = Invoice::find($id);
$invoice->title = $validData['title'];
Expand All @@ -150,9 +148,7 @@ public function update(Request $request, $id)
} else {
$invoice->state = NULL;
}
$invoice->subtotal = $validData['subtotal'];
$invoice->total = $validData['total'];
$invoice->vat = $validData['vat'];
$this->updateOrder($invoice);
$invoice->save();
return redirect()->route('invoices.index');
}
Expand All @@ -178,26 +174,20 @@ public function confirmDelete($id)
'invoice' => $invoice
]);
}

public function createInvoiceProduct($id)
{
$invoice = Invoice::find($id);
return view('invoiceProduct.create', [
'invoice' => $invoice,
'products' => Product::all(),
'clients' => Client::all(),
'companies' => Company::all()
]);
return response()->view('invoiceProduct.create', compact('invoice'));
}

public function invoiceProductStore(Request $request, $id)
{
$invoice = Invoice::find($id);
$validData = $request->validate([
'product_id' => 'required',
'quantity' => 'required',
'unit_value' => 'required',
'subtotal' => 'required',
'total' => 'required',
'vat' => 'required',
]);
$product = Product::find($validData['product_id']);
$validData['unit_value'] = $product->price;
Expand All @@ -206,9 +196,7 @@ public function invoiceProductStore(Request $request, $id)
'unit_value' => $validData['unit_value'],
'total_value' => $validData['quantity'] * $validData['unit_value']
]);
$invoice->subtotal = $validData['subtotal'];
$invoice->total = $validData['total'];
$invoice->vat = $validData['vat'];
$this->updateOrder($invoice);
$invoice->save();
return redirect()->route('invoices.edit', $invoice->id)->with('message', 'Registro de compra completado');
}
Expand All @@ -221,16 +209,31 @@ public function indexImport()
public function importExcel(Request $request)
{
if ($request->file('file')) {
$path = $request->file('file')->getRealPath();
Excel::import(new InvoiceImport, $path);
return redirect()->route('invoices.index')->with('message', 'Importanción de facturas exítosa');
$file = $request->file('file')->getRealPath();
$import = new InvoiceImport;
$import->import($file);
return redirect()->route('invoices.index')->with('message', 'Importación de facturas exítosa');
} else {
return back()->withErrors("ERROR, importación fallída");
return back()->withErrors("Ingresa el archivo");
}
}

public function exportExcel()
{
return Excel::download(new InvoiceExport, "invoice-list.xlsx");
}

public function updateOrder(Invoice $invoice)
{
DB::table('invoices')->where('id', $invoice->id)->update(['subTotal' => $invoice->subTotal, 'vat' => $invoice->vat, 'total' => $invoice->total]);
}

public function updateInvoices()
{
$invoices = Invoice::all();
foreach ($invoices as $invoice) {
$this->updateOrder($invoice);
}
return back();
}
}
2 changes: 1 addition & 1 deletion app/Http/Controllers/ProductController.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public function index(Request $request)
$products = Product::orderBy('id', 'DESC')
->search($search, $type)
->paginate(4);
return view('product.index', compact('products'));
return view('product.index', compact('products', 'search'));
}

/**
Expand Down
23 changes: 23 additions & 0 deletions app/Http/View/Composers/CachedClientsList.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace App\Http\View\Composers;

use App\Client;
use Illuminate\Support\Facades\Cache;
use Illuminate\View\View;

class CachedClientsList
{
private $client;

public function __construct(Client $client)
{
$this->client = $client;
}
public function compose(View $view)
{
$view->with('clients', Cache::remember('clients.enabled', 600, function() {
return $this->client->all();
}));
}
}
Loading