465 lines
12 KiB
PHP
Executable File
465 lines
12 KiB
PHP
Executable File
<?php
|
|
|
|
class Facturacion extends Main
|
|
{
|
|
private $comprobanteId;
|
|
private $sucursalId;
|
|
private $nombre;
|
|
private $rfc;
|
|
private $mes;
|
|
private $anio;
|
|
private $tiposComprobanteId;
|
|
private $motivoCancelacion;
|
|
private $status;
|
|
|
|
public function setComprobanteId($value)
|
|
{
|
|
$this->Util()->ValidateInteger($value);
|
|
$this->comprobanteId = $value;
|
|
}
|
|
|
|
public function setSucursalId($value)
|
|
{
|
|
$this->Util()->ValidateInteger($value);
|
|
$this->sucursalId = $value;
|
|
}
|
|
|
|
public function setNombre($value)
|
|
{
|
|
$this->Util()->ValidateString($value, $max_chars=30, $minChars = 0, 'Nombre');
|
|
$this->nombre = $value;
|
|
}
|
|
|
|
public function setRfc($value)
|
|
{
|
|
$this->Util()->ValidateString($value, $max_chars=12, $minChars = 0, 'RFC');
|
|
$this->rfc = $value;
|
|
}
|
|
|
|
public function setMes($value)
|
|
{
|
|
$this->Util()->ValidateInteger($value);
|
|
$this->mes = $value;
|
|
}
|
|
|
|
public function setAnio($value)
|
|
{
|
|
$this->Util()->ValidateInteger($value);
|
|
$this->anio = $value;
|
|
}
|
|
|
|
public function setTiposComprobanteId($value)
|
|
{
|
|
$this->Util()->ValidateInteger($value);
|
|
$this->tiposComprobanteId = $value;
|
|
}
|
|
|
|
public function setMotivoCancelacion($value)
|
|
{
|
|
$this->Util()->ValidateString($value, $max_chars=12, $minChars = 1, 'Motivo de Cancelación');
|
|
$this->motivoCancelacion = $value;
|
|
}
|
|
|
|
public function setStatus($value)
|
|
{
|
|
$this->status = $value;
|
|
}
|
|
|
|
function Info()
|
|
{
|
|
$sql = 'SELECT * FROM comprobante WHERE comprobanteId = "'.$this->comprobanteId.'"';
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sql);
|
|
$row = $this->Util()->DBSelect($_SESSION["empresaId"])->GetRow();
|
|
|
|
return $row;
|
|
}
|
|
|
|
function GetVentaId()
|
|
{
|
|
$sql = 'SELECT ventaId FROM venta WHERE comprobanteId = "'.$this->comprobanteId.'"';
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sql);
|
|
$ventaId = $this->Util()->DBSelect($_SESSION["empresaId"])->GetSingle();
|
|
|
|
return $ventaId;
|
|
}
|
|
|
|
function Buscar()
|
|
{
|
|
$sqlAdd = '';
|
|
|
|
if($this->nombre)
|
|
$sqlAdd = ' AND clte.nombre LIKE "%'.$this->nombre.'%"';
|
|
|
|
if($this->rfc)
|
|
$sqlAdd = ' AND clte.rfc LIKE "%'.$this->rfc.'%"';
|
|
|
|
if($this->mes)
|
|
$sqlAdd .= ' AND EXTRACT(MONTH FROM comp.fecha) = "'.$this->mes.'"';
|
|
|
|
if($this->anio)
|
|
$sqlAdd .= ' AND EXTRACT(YEAR FROM comp.fecha) = "'.$this->anio.'"';
|
|
|
|
if($this->status != '')
|
|
$sqlAdd .= ' AND comp.status = "'.$this->status.'"';
|
|
|
|
if($this->tiposComprobanteId)
|
|
$sqlAdd .= ' AND comp.tiposComprobanteId = "'.$this->tiposComprobanteId.'"';
|
|
|
|
$sql = 'SELECT
|
|
comp.*
|
|
FROM
|
|
comprobante AS comp,
|
|
cliente AS clte
|
|
WHERE
|
|
comp.userId = clte.clienteId
|
|
AND
|
|
comp.sucursalId = "'.$this->sucursalId.'"
|
|
AND
|
|
facturaGlobal = "0"
|
|
'.$sqlAdd.'
|
|
ORDER BY
|
|
comp.fecha DESC
|
|
';
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sql);
|
|
$comprobantes = $this->Util()->DBSelect($_SESSION["empresaId"])->GetResult();
|
|
|
|
$data["items"] = $comprobantes;
|
|
$data["pages"] = array();
|
|
|
|
return $data;
|
|
|
|
}//Buscar
|
|
|
|
function BuscarMens()
|
|
{
|
|
$sqlAdd = '';
|
|
|
|
if($this->mes)
|
|
$sqlAdd .= ' AND EXTRACT(MONTH FROM fecha) = "'.$this->mes.'"';
|
|
|
|
if($this->anio)
|
|
$sqlAdd .= ' AND EXTRACT(YEAR FROM fecha) = "'.$this->anio.'"';
|
|
|
|
if($this->status != '')
|
|
$sqlAdd .= ' AND status = "'.$this->status.'"';
|
|
|
|
if($this->tiposComprobanteId)
|
|
$sqlAdd .= ' AND tiposComprobanteId = "'.$this->tiposComprobanteId.'"';
|
|
|
|
$sql = 'SELECT
|
|
*
|
|
FROM
|
|
comprobante
|
|
WHERE
|
|
sucursalId = "'.$this->sucursalId.'"
|
|
AND
|
|
facturaGlobal = "1"
|
|
'.$sqlAdd.'
|
|
ORDER BY
|
|
fecha DESC';
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sql);
|
|
$comprobantes = $this->Util()->DBSelect($_SESSION["empresaId"])->GetResult();
|
|
|
|
$data["items"] = $comprobantes;
|
|
$data["pages"] = array();
|
|
|
|
return $data;
|
|
|
|
}//BuscarMens
|
|
|
|
function SendComprobante(){
|
|
|
|
global $comprobante;
|
|
global $rfc;
|
|
global $cliente;
|
|
|
|
$infC = $comprobante->GetInfoComprobante($this->comprobanteId);
|
|
|
|
$clienteId = $infC['userId'];
|
|
$cliente->setClienteId($clienteId);
|
|
$infU = $cliente->Info();
|
|
|
|
$nombre = $infU['nombre'];
|
|
$email = $infU['email'];
|
|
|
|
$rfcId = $infC['rfcId'];
|
|
$empresaId = $infC['empresaId'];
|
|
$serie = $infC['serie'];
|
|
$folio = $infC['folio'];
|
|
|
|
$archivo = $empresaId.'_'.$serie.'_'.$folio.'.pdf';
|
|
|
|
$enlace = DOC_ROOT.'/empresas/'.$empresaId.'/certificados/'.$rfcId.'/facturas/pdf/'.$archivo;
|
|
|
|
if($_SESSION["version"] == "v3" || $_SESSION["version"] == "construc")
|
|
{
|
|
$archivo_xml = "SIGN_".$empresaId.'_'.$serie.'_'.$folio.'.xml';
|
|
}
|
|
else
|
|
{
|
|
$archivo_xml = $empresaId.'_'.$serie.'_'.$folio.'.xml';
|
|
}
|
|
|
|
$enlace_xml = DOC_ROOT.'/empresas/'.$empresaId.'/certificados/'.$rfcId.'/facturas/xml/'.$archivo_xml;
|
|
|
|
$rfc->setRfcId($rfcId);
|
|
$info = $rfc->Info();
|
|
|
|
$mail = new PHPMailer();
|
|
$mail->Host = 'localhost';
|
|
$mail->From = 'facturacion@novomoda.com';
|
|
$mail->FromName = urldecode($info["razonSocial"]);
|
|
$mail->Subject = 'Envio de Factura con Folio No. '.$folio;
|
|
$mail->AddAddress($email, '');
|
|
$body = "Favor de revisar el archivo adjunto para ver factura.\r\n";
|
|
$body .= "\r\n";
|
|
$body .= "Gracias.\r\n";
|
|
$body .= "www.novomoda.com\r\n";
|
|
$mail->Body = $body;
|
|
|
|
//Adjuntamos un archivo
|
|
$mail->AddAttachment($enlace, 'Factura_'.$folio.'.pdf');
|
|
$mail->AddAttachment($enlace_xml, 'XML_Factura_'.$folio.'.xml');
|
|
$mail->Send();
|
|
|
|
$this->Util()->setError(20023, 'complete');
|
|
$this->Util()->PrintErrors();
|
|
|
|
}//SendComprobante
|
|
|
|
function CancelarComprobante(){
|
|
|
|
global $comprobante;
|
|
|
|
if($this->Util()->PrintErrors())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$comprobanteId = $this->comprobanteId;
|
|
$motivoCancelacion = $this->motivoCancelacion;
|
|
|
|
$date = date("Y-m-d");
|
|
$sqlQuery = 'UPDATE comprobante
|
|
SET motivoCancelacion = "'.utf8_encode($motivoCancelacion).'", status = "0", fechaPedimento = "'.$date.'"
|
|
WHERE comprobanteId = '.$comprobanteId;
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sqlQuery);
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->UpdateData();
|
|
|
|
$sqlQuery = 'SELECT data, conceptos, userId FROM comprobante WHERE comprobanteId = '.$comprobanteId;
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery($sqlQuery);
|
|
$row = $this->Util()->DBSelect($_SESSION["empresaId"])->GetRow();
|
|
|
|
$data = unserialize(urldecode($row['data']));
|
|
$conceptos = unserialize(urldecode($row['conceptos']));
|
|
|
|
$_SESSION["conceptos"] = array();
|
|
$_SESSION["conceptos"] = $conceptos;
|
|
$comprobante->CancelarComprobante($data, $comprobanteId, false, $row["userId"]);
|
|
|
|
$this->Util()->setError(20091, "complete");
|
|
$this->Util()->PrintErrors();
|
|
|
|
return true;
|
|
|
|
}//CancelarComprobante
|
|
|
|
function LoadConceptoPublico($notas, $fechaIni, $fechaFin)
|
|
{
|
|
if($this->Util()->PrintErrors()){
|
|
return false;
|
|
}
|
|
|
|
$info['sucursalId'] = $_SESSION['idSuc'];
|
|
|
|
$count = 0;
|
|
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery("SELECT iva FROM sucursal WHERE sucursalId ='".$info["sucursalId"]."'");
|
|
$ivaPercent = $this->Util()->DBSelect($_SESSION["empresaId"])->GetSingle();
|
|
|
|
$subtotal = 0;
|
|
$iva = 0;
|
|
$notasFacturadas = '';
|
|
|
|
$rangos = array();
|
|
$folioIni = 0;
|
|
$folioAnt = 0;
|
|
|
|
if($notas){
|
|
|
|
foreach($notas as $id){
|
|
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery("SELECT * FROM venta WHERE ventaId = '".$id."'");
|
|
$infV = $this->Util()->DBSelect($_SESSION["empresaId"])->GetRow();
|
|
|
|
if($infV['subtotalDesc'] > 0){
|
|
$subtotal += $infV['subtotalDesc'];
|
|
$iva += $infV['ivaDesc'];
|
|
}else{
|
|
$subtotal += $infV['subtotal'];
|
|
$iva += $infV['iva'];
|
|
}//else
|
|
|
|
//Agrupamos
|
|
|
|
$folio = $infV['folio'];
|
|
|
|
if($folioAnt == 0){
|
|
$folioAnt = $folio;
|
|
$folioIni = $folio;
|
|
$resta = 0;
|
|
}
|
|
|
|
$resta = $folio - $folioAnt;
|
|
|
|
if($resta >= 2){
|
|
if($folioIni == $folioAnt)
|
|
$rangos[] = $folioIni;
|
|
else
|
|
$rangos[] = $folioIni.'-'.$folioAnt;
|
|
|
|
$folioIni = $folio;
|
|
$folioAnt = $folio;
|
|
}
|
|
|
|
$folioAnt = $folio;
|
|
|
|
}//foreach
|
|
|
|
}
|
|
|
|
if($folioIni == $folioAnt)
|
|
$rangos[] = $folioIni;
|
|
else
|
|
$rangos[] = $folioIni.'-'.$folioAnt;
|
|
|
|
$notasFacturadas = implode(', ',$rangos);
|
|
|
|
$fechaIni = date('d-m-Y',strtotime($fechaIni));
|
|
$fechaFin = date('d-m-Y',strtotime($fechaFin));
|
|
|
|
$_SESSION["conceptos"][$count]["noIdentificacion"] = "PEG";
|
|
$_SESSION["conceptos"][$count]["cantidad"] = 1;
|
|
$_SESSION["conceptos"][$count]["unidad"] = "No Aplica";
|
|
$_SESSION["conceptos"][$count]["valorUnitario"] = $subtotal;
|
|
$_SESSION["conceptos"][$count]["importe"] = $subtotal;
|
|
$_SESSION["conceptos"][$count]["hardCodedIva"] = $iva;
|
|
$_SESSION["conceptos"][$count]["excentoIva"] = "no";
|
|
$_SESSION["conceptos"][$count]["descripcion"] = urldecode("Factura correspondiente a los tickets de venta del ".$fechaIni." al ".$fechaFin.": ".$notasFacturadas);
|
|
|
|
return true;
|
|
|
|
}//LoadConceptoPublico
|
|
|
|
function GetTotalDesglosado()
|
|
{
|
|
$values = explode("&", $_POST["form"]);
|
|
foreach($values as $key => $val)
|
|
{
|
|
$array = explode("=", $values[$key]);
|
|
$data[$array[0]] = $array[1];
|
|
}
|
|
|
|
$ivaForm = $data['tasaIva'];
|
|
|
|
if(!$_SESSION["conceptos"])
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$data["subtotal"] = 0;
|
|
$data["descuento"] = 0;
|
|
$data["iva"] = 0;
|
|
$data["ieps"] = 0;
|
|
$data["retIva"] = 0;
|
|
$data["retIsr"] = 0;
|
|
$data["total"] = 0;
|
|
|
|
foreach($data as $key => $value)
|
|
{
|
|
$data[$key] = $this->Util()->RoundNumber($data[$key]);
|
|
}
|
|
|
|
$info['sucursalId'] = $_SESSION['idSuc'];
|
|
|
|
$this->Util()->DBSelect($_SESSION["empresaId"])->setQuery("
|
|
SELECT * FROM sucursal
|
|
LEFT JOIN rfc ON rfc.rfcId = sucursal.rfcId
|
|
WHERE sucursal.sucursalId ='".$info["sucursalId"]."'");
|
|
$sucursal = $this->Util()->DBSelect($_SESSION["empresaId"])->GetRow();
|
|
|
|
$suc['iva'] = $ivaForm;
|
|
|
|
foreach($_SESSION["conceptos"] as $key => $concepto)
|
|
{
|
|
$data["subtotalOriginal"] = $this->Util()->RoundNumber($data["subtotalOriginal"] + $importe);
|
|
|
|
$data["subtotal"] = $this->Util()->RoundNumber($data["subtotal"] + $concepto["importe"]);
|
|
|
|
if($concepto["excentoIva"] == "si")
|
|
{
|
|
$_SESSION["conceptos"][$key]["tasaIva"] = 0;
|
|
}
|
|
else
|
|
{
|
|
$_SESSION["conceptos"][$key]["tasaIva"] = $suc["iva"];
|
|
}
|
|
|
|
|
|
if($data["porcentajeDescuento"])
|
|
{
|
|
$data["porcentajeDescuento"];
|
|
}
|
|
|
|
$data["descuentoThis"] = $this->Util()->RoundNumber($_SESSION["conceptos"][$key]["importe"] * ($data["porcentajeDescuento"] / 100));
|
|
$data["descuento"] += $data["descuentoThis"];
|
|
|
|
$afterDescuento = $_SESSION["conceptos"][$key]["importe"] - $data["descuentoThis"];
|
|
if($concepto["excentoIva"] == "si")
|
|
{
|
|
$_SESSION["conceptos"][$key]["tasaIva"] = 0;
|
|
}
|
|
else
|
|
{
|
|
$_SESSION["conceptos"][$key]["tasaIva"] = $suc["iva"];
|
|
}
|
|
|
|
$data["ivaThis"] = $this->Util()->RoundNumber($afterDescuento * ($_SESSION["conceptos"][$key]["tasaIva"] / 100));
|
|
|
|
if(isset($_SESSION["conceptos"][$key]["hardCodedIva"]))
|
|
{
|
|
$data["iva"] = $_SESSION["conceptos"][$key]["hardCodedIva"];
|
|
}
|
|
else
|
|
{
|
|
$data["iva"] += $data["ivaThis"];
|
|
}
|
|
}
|
|
|
|
$data["impuestos"] = $_SESSION["impuestos"];
|
|
|
|
$afterDescuento = $data["subtotal"] - $data["descuento"];
|
|
|
|
$data["afterDescuento"] = $afterDescuento;
|
|
|
|
$data["afterIva"] = $afterDescuento + $data["iva"];
|
|
|
|
if(!$data["porcentajeIEPS"])
|
|
{
|
|
$data["porcentajeIEPS"] = 0;
|
|
}
|
|
|
|
$data["ieps"] = $this->Util()->RoundNumber($data["afterDescuento"] * ($data["porcentajeIEPS"] / 100));
|
|
$afterImpuestos = $afterDescuento + $data["iva"] + $data["ieps"];
|
|
$data["afterImpuestos"] = $afterImpuestos;
|
|
|
|
$data["retIva"] = $this->Util()->RoundNumber($data["afterDescuento"] * ($data["porcentajeRetIva"] / 100));
|
|
$data["retIsr"] = $this->Util()->RoundNumber($data["afterDescuento"] * ($data["porcentajeRetIsr"] / 100));
|
|
$data["total"] = $this->Util()->RoundNumber($data["subtotal"] - $data["descuento"] + $data["iva"] + $data["ieps"] - $data["retIva"] - $data["retIsr"]);
|
|
|
|
return $data;
|
|
}
|
|
|
|
}//Facturacion
|
|
|
|
?>
|