Files
ventas_php/classes/facturacion.class.php

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&oacute;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
?>