CodeIgniter Forums

Full Version: ayuda con codigo
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hola, gente les escribo desde mexico.

tengo un sistema hecho en codeigniter 2

necesito una opinion para este problema que se me presenta:

explicare de forma general lo que estoy haciendo

el sistema que utilizo genera un recibo de pago de sueldo para el empleado, como el sistema genera el pago de sueldos SOLO UNA VEZ POR MES, el pago siempre lo realizan los días 20 de cada mes, hay veces que entran empleados a la empresa despues de que ya se hizo el pago de sueldos, entonces el sistema debe calcularles a esas personas que entraron despues del pago de sueldos, el sueldo proporcional desde la fecha que entro hasta el ultimo día del mes (para la empresa todos los meses tienen 30 días)

hice una prueba con un usuario que di de alta y el cual tiene un sueldo de 32000 pesos mexicanos, esta persona entro el día 21 del mes y en teoría el sistema debería pagarle 10666.67 pesos ((32000 / 30) * 10) 32000 es el sueldo, divido entre 30 días para saber cuanto gana por día y ese resultado multiplicado por lo dias que trabajo, en este caso 10 días, contemplando que trabaja desde el día 21 hasta el día 30 de ese mes, sin embargo el sistema no me dio el calculo que esperaba, el resultado que me dio del sueldo de esta persona fue de 9600 pesos.

di de alta a otro usuario con sueldo de 24000 pesos y trabajo solo los ultimos 5 dias del mes, en teoría se le deben pagar 4000 pesos mexicanos y aqui el sistema sí le pago correctamente.

curiosamente a uno si le paga bien y a otro no

anexo el codigo que utilizo para que el sistema calcule el pago requerido, el detalle que me doy cuenta que presenta el problema es lo siguiente:

la variable $dias, si se fijan me calcula los dias trabajados de el mes en curso (y-m-30) hasta la fecha en la que ingreso el empleado, el problema que yo me di cuenta es que si yo en vez de poner 30 pongo 31, si me calcula bien el pago para el empleado con 32000 pesos, es decir poniendoles 31 dias al sistema sí le paga 10666 pesos, sin embargo al empleado con sueldo de 24000 aqui le paga mal, ya que le estaría pagando 4800 pesos y no 4000 como debe ser.

if ($alta >= $fecha_pago_comision)
            {
                $datos = array();
                $dias =  (strtotime(date('Y-m-30')) - $alta ) / (60*60*24);
                $datos['id_comisionista'] = $comisionista->id_comisionista;
                $datos['percepciones'] = (float) ($comisionista->sueldo_comision)/30 * $dias;
                
 
                $datos['id_cat_poliza'] = 1;
                $datos['factura'] = (int) $comisionista->factura;
                $datos['fecha'] = date('Y-m-d');
                
                $total = $datos['percepciones'];
                
                if($datos['factura'] == 1)
                {
                    $datos['iva'] = round($datos['percepciones'] * ((float) $comisionista->porcentaje / 100), 2);
                    $total += $datos['iva'];
                    if ($comisionista->persona_moral != 1) 
                    {
                        $datos['retencion'] = round($datos['iva'] * (2 / 3), 2);
                        $total -= $datos['retencion'];
                    } else 
                    {
                        $datos['retencion'] = 0;
                    }
                }

¿tienen algun caso similar que les haya pasado?
¿como puedo hacer que el sistema calcule el pago correctamente como si todos los meses tuvieran 30 días?

como dato adicional la variable $alta la mando llamar desde otra funcion y el valor que tiene es el siguiente:

$alta = strtotime($comisionista->fecha_ingreso)

agradezco sus comentarios.