Skip to content
Commits on Source (10)
......@@ -109,4 +109,11 @@ class constantes
const ORIGEN_NUCLEO = 'nucleo';
const ORIGEN_UV_ACADEMICA = 'uv_academica';
public const SUSCRIPCION_PARAMETRO_VOCABULARIO_TERMINO_SI = 1;
public const SUSCRIPCION_PARAMETRO_VOCABULARIO_TERMINO_NO = 2;
public const SUSCRIPCION_PARAMETRO_CODIGO_ACEPTAAFIP = 'ACEPTAAFIP';
public const SUSCRIPCION_PARAMETRO_CODIGO_PUNTO_COBRANZA = 'CODPTOCOB';
}
......@@ -2,6 +2,7 @@
namespace SIU\SQ\Lib\daos;
use SIU\SQ\Lib\constantes;
use SIU\SQ\Lib\errores\error_negocio;
class dao_comprobantes extends dao
......@@ -99,12 +100,12 @@ class dao_comprobantes extends dao
ct.tipo_comprobante,
ct.modelo,
ct.numeracion,
ct.numeracion_externa,
ct.estado,
ct.estado_actualizado_en,
ct.id_arai,
ct.revision,
ct.sincronizar
ct.sincronizar,
true as numeracion_externa
FROM
comprobantes_templates ct
WHERE 1 = 1
......@@ -156,28 +157,44 @@ class dao_comprobantes extends dao
public function get_numeracion_faltante_afip($filtro = [])
{
$where = "";
if (isset($filtro['id_comprobante_template'])) {
$where .= " AND c.id_comprobante_template = " . $this->quote($filtro['id_comprobante_template']);
}
if (isset($filtro['id_punto_cobranza'])) {
$where .= " AND c.id_punto_cobranza = " . $this->quote($filtro['id_punto_cobranza']);
$where .= "AND sd.valor = " . $this->quote($filtro['id_punto_cobranza']);
}
$faltantes = [];
$sql = "
SELECT DISTINCT
c.id_comprobante_template,
ct.descripcion AS comprobante_template_descripcion,
c.id_punto_cobranza,
pc.descripcion AS punto_cobranza_descripcion,
pc.codigo AS punto_cobranza_codigo
FROM comprobantes c
JOIN comprobantes_templates ct ON c.id_comprobante_template = ct.id AND ct.numeracion_externa = true
LEFT JOIN puntos_cobranzas pc ON c.id_punto_cobranza = pc.id
WHERE 1 = 1
SELECT
s.id,
s.codigo AS punto_cobranza_codigo,
sd.valor AS id_punto_cobranza,
pc.descripcion AS punto_cobranza_descripcion,
uv.id as unidad_venta_id,
uv.descripcion as unidad_venta_descripcion
FROM suscripciones_detalle sd
JOIN suscripciones s ON sd.id_suscripcion = s.id
JOIN unidades_ventas uv ON uv.id = s.id_unidad_venta
JOIN suscripciones_parametros sp ON sp.id = sd.id_suscripcion_parametro
JOIN puntos_cobranzas pc ON CAST ( pc.id AS TEXT ) = sd.valor
WHERE
sp.codigo = '".constantes::SUSCRIPCION_PARAMETRO_CODIGO_PUNTO_COBRANZA."'
AND s.finalizada_en IS NULL
AND EXISTS (
SELECT
s2.id
FROM
suscripciones_detalle sd
JOIN suscripciones s2 ON
sd.id_suscripcion = s2.id
JOIN unidades_ventas uv ON
uv.id = s2.id_unidad_venta
JOIN suscripciones_parametros sp ON
sp.id = sd.id_suscripcion_parametro
WHERE
sp.codigo = '".constantes::SUSCRIPCION_PARAMETRO_CODIGO_ACEPTAAFIP."'
AND sd.valor = '".constantes::SUSCRIPCION_PARAMETRO_VOCABULARIO_TERMINO_SI."'
AND s2.finalizada_en IS NULL
AND s.id = s2.id)
$where;
";
......@@ -204,7 +221,7 @@ class dao_comprobantes extends dao
numero_faltante
FROM
generate_series(1, (
SELECT MAX(numero_comprobante::INT) FROM comprobantes co WHERE co.id_comprobante_template = {$filtro['id_comprobante_template']} AND co.id_punto_cobranza = {$filtro['id_punto_cobranza']} )
SELECT MAX(numero_comprobante::INT) FROM comprobantes co WHERE co.id_comprobante_template = ".constantes::COMPROBANTE_TEMPLATE_COBRO." AND co.id_punto_cobranza = {$filtro['id_punto_cobranza']} )
) AS serie_completa(numero_faltante)
WHERE serie_completa.numero_faltante NOT IN (
......@@ -213,7 +230,7 @@ class dao_comprobantes extends dao
FROM
comprobantes
WHERE
id_comprobante_template = {$filtro['id_comprobante_template']} AND
id_comprobante_template = ".constantes::COMPROBANTE_TEMPLATE_COBRO." AND
id_punto_cobranza = {$filtro['id_punto_cobranza']} AND
numero_comprobante IS NOT NULL
ORDER BY
......@@ -223,12 +240,12 @@ class dao_comprobantes extends dao
foreach ($this->entorno()->db()->consultar($sql) as $r) {
$faltante = [];
$faltante['id_comprobante_template'] = $filtro['id_comprobante_template'];
$faltante['id_punto_cobranza'] = $filtro['id_punto_cobranza'];
$faltante['comprobante_template_descripcion'] = $filtro['comprobante_template_descripcion'];
$faltante['punto_cobranza_descripcion'] = $filtro['punto_cobranza_descripcion'];
$faltante['numero_faltante'] = $r['numero_faltante'];
$faltante['punto_cobranza_codigo'] = $filtro['punto_cobranza_codigo'];
$faltante['unidad_venta_id'] = $filtro['unidad_venta_id'];
$faltante['unidad_venta_descripcion'] = $filtro['unidad_venta_descripcion'];
$faltantes[] = $faltante;
}
......
......@@ -111,6 +111,12 @@ class dao_facturador extends dao
$select.="anio,";
$join.= " join anios a on a.id=r.id_anio";
}
if (isset($filtro['anio'])) {
$join.= " join anios a on a.id=r.id_anio and a.codigo=". $this->quote($filtro['anio']);
}
if (isset($filtro['mes'])) {
$join.= " join meses m on m.id=r.id_mes and m.numero_mes=". $this->quote($filtro['mes']);
}
if (isset($filtro['id_reloj_facturador_estado'])) {
$where .= " AND r.id_reloj_facturador_estado = " . $this->quote($filtro['id_reloj_facturador_estado']);
}
......
......@@ -20,6 +20,7 @@ class dao_ventas extends dao
if (count($rs) == 1) {
return $rs;
}
return null;
}
public function get_info_personalizada_por_entidad($id_venta, $entidad)
......@@ -28,13 +29,18 @@ class dao_ventas extends dao
$info_personalizada = $this->get_info_personalizada($id_venta);
if (!empty($info_personalizada)) {
if (count($info_personalizada) == 1) {
foreach (json_decode(array_a_utf8($info_personalizada[0]['datos'])) as $info) {
$info_personalizada_decode = json_decode(array_a_utf8($info_personalizada[0]['datos']));
if (json_last_error() != JSON_ERROR_NONE) {
lib::entorno()->log()->error(__METHOD__ . ": Error JSON: No se pudo decodificar la info personalizada de la venta");
throw new error_negocio("No se pudo decodificar la info personalizada de la venta ID: '" . $id_venta );
}
foreach ($info_personalizada_decode as $info) {
if ($entidad == $info->entidad) {
$datos = $info->datos;
}
}
} else {
$msg = "Se encontraron '" . count($info_personalizada) . "' registros de info_personalizada asociados a la venta ID: '" . $this->id_venta . "' cuando solo se permite 1.";
$msg = "Se encontraron '" . count($info_personalizada) . "' registros de info_personalizada asociados a la venta ID: '" . $id_venta . "' cuando solo se permite 1.";
lib::entorno()->log()->error(__METHOD__ . ": " . $msg);
throw new error_negocio($msg);
}
......
......@@ -18,7 +18,6 @@ class comprobante_template extends modelo
$this->datos['tipo_comprobante'] = null;
$this->datos['modelo'] = null;
$this->datos['numeracion'] = null;
$this->datos['numeracion_externa'] = false;
$this->datos['estado'] = null;
$this->datos['estado_actualizado_en'] = null;
}
......@@ -57,7 +56,6 @@ class comprobante_template extends modelo
'tipo_comprobante' => $this->datos['tipo_comprobante'],
'modelo' => $this->datos['modelo'],
'numeracion' => $this->datos['numeracion'],
'numeracion_externa' => $this->datos['numeracion_externa'],
'estado' => $this->datos['estado'],
'estado_actualizado_en' => $this->datos['estado_actualizado_en']
];
......@@ -73,7 +71,6 @@ class comprobante_template extends modelo
'tipo_comprobante' => $this->datos['tipo_comprobante'],
'modelo' => $this->datos['modelo'],
'numeracion' => $this->datos['numeracion'],
'numeracion_externa' => $this->datos['numeracion_externa'],
'estado' => $this->datos['estado'],
'estado_actualizado_en' => $this->datos['estado_actualizado_en']
];
......@@ -84,15 +81,10 @@ class comprobante_template extends modelo
public function avanzar_numeracion()
{
if ($this->datos['numeracion_externa'] == false) {
if (empty($this->datos['numeracion'])) {
$this->datos['numeracion'] = 1;
} else {
$this->datos['numeracion'] = $this->datos['numeracion'] + 1;
}
return $this->datos['numeracion'];
if (empty($this->datos['numeracion'])) {
$this->datos['numeracion'] = 1;
} else {
throw new error_negocio(__METHOD__ . " No se pudo generar el proximo número de comprobante ya que este posee numeración externa.");
$this->datos['numeracion'] = $this->datos['numeracion'] + 1;
}
}
......@@ -122,18 +114,9 @@ class comprobante_template extends modelo
$this->datos['modelo'] = $modelo;
}
public function set_numeracion_externa($numeracion_externa)
{
$this->datos['numeracion_externa'] = $numeracion_externa;
}
public function set_numeracion($numeracion)
{
if ($this->datos['numeracion_externa'] == true) {
$this->datos['numeracion'] = $numeracion;
} else {
throw new error_negocio(__METHOD__ . " No se puede setear el número de comprobante ya que el template posee numeración externa.");
}
$this->datos['numeracion'] = $numeracion;
}
public function set_estado($estado)
......@@ -151,8 +134,4 @@ class comprobante_template extends modelo
return $this->datos['numeracion'];
}
public function tiene_numeracion_externa()
{
return $this->datos['numeracion_externa'];
}
}
......@@ -622,12 +622,29 @@ TODO:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$filtro['id_tipo_servicio'] = $this->id_tipo_servicio;
$cantidad_ventas_por_suscripcion_cliente = sq_uv::catalogo_daos()->ventas()->get_cantidad_ventas_por_suscripcion_y_cliente($filtro);
$cantidad_ventas_sumarizadas = 0;
$ventas_sumarizadas_generadas = [];
foreach (array_keys($cantidad_ventas_por_suscripcion_cliente) as $id) {
$id_cliente = $cantidad_ventas_por_suscripcion_cliente[$id]['id_cliente'];
$id_suscripcion = $cantidad_ventas_por_suscripcion_cliente[$id]['id_servicio_suscripcion'];
// Cargar las ventas para el cliente actual
$ventas_por_cliente = sq_uv::catalogo_daos()->ventas()->get_ventas_por_suscripcion_y_cliente($id_cliente, $cantidad_ventas_por_suscripcion_cliente[$id]['id_servicio_suscripcion'], $filtro);
$ventas_por_cliente = sq_uv::catalogo_daos()->ventas()->get_ventas_por_suscripcion_y_cliente($id_cliente, $id_suscripcion, $filtro);
$es_suscripcion_mensual = sq_uv::catalogo_daos()->ventas()->es_suscripcion_mensual($id_suscripcion);
if(sizeof($es_suscripcion_mensual) != 0) {
//Es suscipcion mensual
$filtro['id_venta_estado'] = constantes::VENTA_COBRADA;
$filtro['id_servicio_susciprion'] =$id_suscripcion;
$filtro['cod_articulo'] = constantes::CODIGO_MATRICULA;
$filtro['cod_frecuencia_facturacion'] = constantes::FRECUENCIA_FACTURACION_SIEMPRE;
$filtro['cod_programacion_venta'] = constantes::CODIGO_PROGRAMACION_VENTA_SUSCRIPCION_MENSUAL;
$venta_matricula = sq_uv::catalogo_daos()->ventas()->get_matricula_suscripcion_mensual($filtro);
if (sizeof($venta_matricula) == 0) {
//No pago la matricula y hay que generarla
}
}
if ($cantidad_ventas_por_suscripcion_cliente[$id]['cantidad'] == 1) {
//-- Pasar el flag "a_agrupar" a false.
$venta = sq_uv::catalogo_modelo()->modelador_venta()->cargar($ventas_por_cliente[0]['id']);
......@@ -809,10 +826,14 @@ TODO:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$this->generar_cobranza($venta, $ventas_por_cliente, $id_cliente, true, constantes::MEDIO_PAGO_CTA_CTE);
} else {
// Pago parcial
if (lib::parametros_sistema()->get_valor('PAGOS_PARC') == 'S') {
// Recalamar credito si existe
$this->generar_cobranza($venta, $ventas_por_cliente, $id_cliente, true, constantes::MEDIO_PAGO_CTA_CTE, true);
}
}
}
protected function generar_cobranza($venta, $ventas_por_cliente, $id_cliente, $utiliza_credito_disponible, $id_medio_pago)
protected function generar_cobranza($venta, $ventas_por_cliente, $id_cliente, $utiliza_credito_disponible, $id_medio_pago, $es_pago_parcial = false)
{
$datos_cobranza = array();
$importe_total_cobranza = 0;
......@@ -841,7 +862,29 @@ TODO:!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$transaccion_cobranza->set_datos($datos);
$transaccion_cobranza->procesar();
//- tomar la cantidad disponible hasta el total de la deuda y guardarlo en la tabla de debitos
$venta->cambiar_estado(constantes::VENTA_COBRADA);
if ($es_pago_parcial) {
$venta->cambiar_estado(constantes::VENTA_PENDIENTE);
$importe_total_cobrado = sq_uv::catalogo_daos()->cobranzas()->obtener_importe_total_cobrado($transaccion_cobranza->get_id());
$importe_total_a_cobrar = round(($importe_total_cobranza - $importe_total_cobrado), 2);
$venta->set_importe_total_a_cobrar($importe_total_a_cobrar);
$venta->set_importe_total_cobrado($importe_total_cobrado);
$dao_ventas = sq_uv::catalogo_daos()->ventas();
$venta_articulo = $dao_ventas->get_articulos_por_venta($venta->get_id(),['id_articulo' => constantes::CUOTA_ID_ARTICULO])[0];
$articulo['id_venta_articulo'] = $venta_articulo['id_venta_articulo'];
$articulo['importe_total_cobrado'] = $importe_total_cobrado;
$venta->actualizar_importe_cobrado_venta_articulo($articulo);
} else {
$venta->cambiar_estado(constantes::VENTA_COBRADA);
}
$this->cantidad_ventas_cobradas++;
$this->importe_ventas_cobradas += $importe_total_cobranza;
//-- Guardar la venta.
......
......@@ -365,8 +365,9 @@ class notificacion extends modelo
$mensaje_parcial = str_replace('{comprobante_fecha}', substr($comp['fecha'], 0, strrpos($comp['fecha'], '.')), $mensaje_parcial);
$mensaje_parcial = str_replace('{comprobante_importe}', $comp['importe'], $mensaje_parcial);
$mensaje_parcial = str_replace('{comprobante_cae}', $comp['cae'], $mensaje_parcial);
$mensaje_parcial = str_replace('{cliente_razon_social}', $comp['cliente_razon_social'], $mensaje_parcial);
if (isset($comp['cliente_razon_social'])){
$mensaje_parcial = str_replace('{cliente_razon_social}', $comp['cliente_razon_social'], $mensaje_parcial);
}
$breaks = empty($mensaje) ? '' : '<br/><br/>';
$mensaje = $mensaje . $breaks . $mensaje_parcial;
}
......
......@@ -207,12 +207,18 @@ class fecha
public static function get_nombre_mes($id_mes)
{
$meses = self::get_meses_anio();
return fecha::get_mes($id_mes, 'mes');
}
public static function get_mes($id_mes, $dimencion)
{
$meses = fecha::get_meses_anio();
foreach (array_keys($meses) as $id) {
if ($meses[$id]['id'] == $id_mes) {
return $meses[$id]['mes'];
return $meses[$id][$dimencion];
}
}
return "";
}
public static function get_meses_anio()
......@@ -231,30 +237,65 @@ class fecha
}//while */
//Por ahora lo hacemos asi mas croto.
$meses[0]['id'] = 1;
$meses[0]['mes'] = "Enero";
$meses[1]['id'] = 2;
$meses[1]['mes'] = "Febrero";
$meses[2]['id'] = 3;
$meses[2]['mes'] = "Marzo";
$meses[3]['id'] = 4;
$meses[3]['mes'] = "Abril";
$meses[4]['id'] = 5;
$meses[4]['mes'] = "Mayo";
$meses[5]['id'] = 6;
$meses[5]['mes'] = "Junio";
$meses[6]['id'] = 7;
$meses[6]['mes'] = "Julio";
$meses[7]['id'] = 8;
$meses[7]['mes'] = "Agosto";
$meses[8]['id'] = 9;
$meses[8]['mes'] = "Septiembre";
$meses[9]['id'] = 10;
$meses[9]['mes'] = "Octubre";
$meses[10]['id'] = 11;
$meses[10]['mes'] = "Noviembre";
$meses[11]['id'] = 12;
$meses[11]['mes'] = "Diciembre";
$meses[1]['id'] = 1;
$meses[1]['mes'] = "Enero";
$meses[1]['nro'] = "01";
$meses[1]['mes_abreviado'] = "Ene.";
$meses[2]['id'] = 2;
$meses[2]['mes'] = "Febrero";
$meses[2]['nro'] = "02";
$meses[2]['mes_abreviado'] = "Feb.";
$meses[3]['id'] = 3;
$meses[3]['mes'] = "Marzo";
$meses[3]['nro'] = "03";
$meses[3]['mes_abreviado'] = "Mar.";
$meses[4]['id'] = 4;
$meses[4]['mes'] = "Abril";
$meses[4]['nro'] = "04";
$meses[4]['mes_abreviado'] = "Abr.";
$meses[5]['id'] = 5;
$meses[5]['mes'] = "Mayo";
$meses[5]['nro'] = "05";
$meses[5]['mes_abreviado'] = "May.";
$meses[6]['id'] = 6;
$meses[6]['mes'] = "Junio";
$meses[6]['nro'] = "06";
$meses[6]['mes_abreviado'] = "Jun.";
$meses[7]['id'] = 7;
$meses[7]['mes'] = "Julio";
$meses[7]['nro'] = "07";
$meses[7]['mes_abreviado'] = "Jul.";
$meses[8]['id'] = 8;
$meses[8]['mes'] = "Agosto";
$meses[8]['nro'] = "08";
$meses[8]['mes_abreviado'] = "Ago.";
$meses[9]['id'] = 9;
$meses[9]['mes'] = "Septiembre";
$meses[9]['nro'] = "09";
$meses[9]['mes_abreviado'] = "Sep.";
$meses[10]['id'] = 10;
$meses[10]['mes'] = "Octubre";
$meses[10]['nro'] = "10";
$meses[10]['mes_abreviado'] = "Oct.";
$meses[11]['id'] = 11;
$meses[11]['mes'] = "Noviembre";
$meses[11]['nro'] = "11";
$meses[11]['mes_abreviado'] = "Nov.";
$meses[12]['id'] = 12;
$meses[12]['mes'] = "Diciembre";
$meses[12]['nro'] = "12";
$meses[12]['mes_abreviado'] = "Dic.";
return $meses;
}
......@@ -322,50 +363,20 @@ class fecha
return false;
}
public static function tal_mes($mes)
{
if ($mes == 1) return "Ene.";
if ($mes == 2) return "Feb.";
if ($mes == 3) return "Mar.";
if ($mes == 4) return "Abr.";
if ($mes == 5) return "May.";
if ($mes == 6) return "Jun.";
if ($mes == 7) return "Jul.";
if ($mes == 8) return "Ago.";
if ($mes == 9) return "Sep.";
if ($mes == 10) return "Oct.";
if ($mes == 11) return "Nov.";
if ($mes == 12) return "Dic.";
return "";
public static function tal_mes($id_mes)
{
return fecha::get_mes($id_mes, 'mes_abreviado');
}
public static function get_nro_mes($mes)
{
if ($mes == "Enero")
return "01";
if ($mes == "Febrero")
return "02";
if ($mes == "Marzo")
return "03";
if ($mes == "Abril")
return "04";
if ($mes == "Mayo")
return "05";
if ($mes == "Junio")
return "06";
if ($mes == "Julio")
return "07";
if ($mes == "Agosto")
return "08";
if ($mes == "Septiembre")
return "09";
if ($mes == "Octubre")
return "10";
if ($mes == "Noviembre")
return "11";
if ($mes == "Diciembre")
return "12";
return "-1";
}
}
$meses = fecha::get_meses_anio();
foreach (array_keys($meses) as $id) {
if ($meses[$id]['mes'] == $mes) {
return $meses[$id]['nro'];
}
}
return "";
}
}
\ No newline at end of file