Buen día grupo
Quería compartir una librería que permite cargar de forma rápida archivos de excel del lado del cliente y lo pueden guardar en la base de datos
Librería:
Controller:
/**
* Método para almacenar datos enviados del archvio Excel
*/
public function excel() {
if (Input::hasPost('data')) {
if (Temporal::setRegistroBaseExcel(Input::post('data'))) {
DwMessage::valid('Los datos se han importado correctamente!');
Input::delete('data'); //Para que no queden persistentes
return DwRedirect::toAction('listar');
}
}
}
Modelo:
/**
* Método para registrar en la base de datos
*/
public static function setRegistroBaseExcel($productos, $existe_articulos = NULL) {
$obj = new Temporal();
$obj->begin();
//Modifico el estado de los datos cargados luego y almacenar en las tablas marcas, articulos
if (!empty($existe_articulos)) {
$method = 'update';
$items = explode(',', $existe_articulos);
foreach ($items as $value) {
$data = explode('-', $value); //el formato es 1-4 = recurso-rol
$obj->id = $data[0];
$obj->activo = '1';
if (!$obj->update()) {
$obj->rollback();
return FALSE;
}
}
}
if (!empty($productos)) {
foreach ($productos as $value) {
$data = explode('-sisco-', $value); //el formato es 1-4 = recurso_id-perfil_id
$obj->codigo = empty($data[0]) ? 'NULL' : $data[0];
$obj->fecha_compra = empty($data[1]) ? 'NULL' : $data[1];
$obj->factura = empty($data[2]) ? 'NULL' : $data[2];
$obj->detalle = empty($data[3]) ? 'NULL' : $data[3];
$obj->marca = empty($data[4]) ? 'NULL' : $data[4];
$obj->stock = empty($data[5]) ? 'NULL' : $data[5];
$obj->precio_unitario = empty($data[6]) ? 'NULL' : $data[6];
$obj->usuario_id = Session::get('id');
$obj->activo = '0';
$obj->p_venta = DwOnline::setPrecioUtilidad($obj->precio_unitario);
// if ($obj->stock > 2) {
if (!$obj->create()) {
$obj->rollback();
return FALSE;
}
}
// }
}
$obj->commit();
return TRUE;
}
Vista:
Adjunto el archivo de la vista por el tamaño del código
Espero les sirva!
Saludos
Eduardo Yánez