//calcula lo que te quita de las bajas de ese mes, le pasas la fecha de inicio de la baja, la fecha de final y lo que debería cobrar ese mes el trabajador. Además hay una variable fechaTeclado, que es la fecha del día uno del mes a calcular
private static double CalcularBajas(Date inicioBaja, Date finBaja, double brutoMensual){
double salarioDiario = brutoMensual/30;
int diasInicioFin = calcularDiasAFecha(inicioBaja, finBaja);
if(inicioBaja.getMonth()==fechaTeclado.getMonth()){
int diasEntreFechas = calcularDiasAFecha(inicioBaja, ponerDiasFechaFinMes(fechaTeclado));
if(diasInicioFin<diasEntreFechas){
return dineroBaja(salarioDiario, diasInicioFin);
}else{
return dineroBaja(salarioDiario, diasEntreFechas);
}
}else if(fechaTeclado.after(inicioBaja) && finBaja==null ){
int diasPrimerMes = calcularDiasAFecha(inicioBaja, ponerDiasFechaFinMes(inicioBaja));
if(fechaTeclado.getMonth()-1==inicioBaja.getMonth()){
int diasSegundoMes = calcularDiasAFecha(fechaTeclado, ponerDiasFechaFinMes(fechaTeclado));
if(diasPrimerMes<3){
return (salarioDiario*(3-diasPrimerMes))/2+(18*salarioDiario)/4;
}else{
return (salarioDiario*(21-diasPrimerMes))/4;
}
}
}else if(fechaTeclado.after(inicioBaja) && fechaTeclado.before(finBaja)){
int diasPrimerMes = calcularDiasAFecha(inicioBaja, ponerDiasFechaFinMes(inicioBaja));
if(fechaTeclado.getMonth()-1==inicioBaja.getMonth()){
int diasSegundoMes = calcularDiasAFecha(fechaTeclado, ponerDiasFechaFinMes(fechaTeclado));
if(diasPrimerMes<3){
return (salarioDiario*(3-diasPrimerMes))/2+(18*salarioDiario)/4;
}else{
return (salarioDiario*(21-diasPrimerMes))/4;
}
}
}
return 0;
}
private static double dineroBaja(double salarioDiario, int diasEntreFechas) {
double dineroQuitadoPorBaja50 = 0;
double dineroQuitadoPorBaja25 = 0;
if(diasEntreFechas>0&&diasEntreFechas<=3){
//50 por ciento
dineroQuitadoPorBaja50 = (salarioDiario*diasEntreFechas)/2;
}else if (diasEntreFechas>3&&diasEntreFechas<21){
//50 y 25 por ciento
dineroQuitadoPorBaja50 = (salarioDiario*3)/2;
dineroQuitadoPorBaja25 = (salarioDiario*(diasEntreFechas-3))/4;
}else if(diasEntreFechas>20){
//50, 25 y 0 por ciento
dineroQuitadoPorBaja50 = (salarioDiario*3)/2;
dineroQuitadoPorBaja25 = (salarioDiario*(17))/4;
}
return dineroQuitadoPorBaja25+dineroQuitadoPorBaja50;
}
private static Date ponerDiasFechaFinMes(Date fecha){
Calendar calendar = Calendar.getInstance();
calendar.setTime(fecha); // Configuramos la fecha que se recibe
//calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
int dias = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
Date aux = calendar.getTime();
Date ret = new Date(aux.getYear(), aux.getMonth(), dias);
return ret; // Devuelve el objeto Date con los nuevos días añadidos
}