import java.sql.Timestamp;
import java.util.List;
import java.util.Arrays;
import org.compiere.model.MPeriod;
import org.compiere.model.MPeriodControl;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Trx;
public class PeriodManagement {
public static void setPeriodStatusByDate(Timestamp date, String status) {
Trx trx = Trx.get(Trx.createTrxName("PeriodTrx"), true);
try {
// Buscar el período activo, estándar, y de tipo 'S' para la fecha proporcionada
String sql = "SELECT C_Period_ID FROM C_Period "
+ "WHERE ? BETWEEN StartDate AND EndDate "
+ "AND IsActive='Y' AND PeriodType='S' AND AD_Client_ID=?";
int C_Period_ID = DB.getSQLValue(trx.getTrxName(), sql, date, Env.getAD_Client_ID(Env.getCtx()));
if (C_Period_ID <= 0) {
System.out.println("No se encontró un período estándar (PeriodType='S') activo para la fecha: " + date);
return;
}
MPeriod period = new MPeriod(Env.getCtx(), C_Period_ID, trx.getTrxName());
// Cambiar el estado de cada control del período
List<MPeriodControl> periodControls = Arrays.asList(period.getPeriodControls(true));
for (MPeriodControl control : periodControls) {
control.setPeriodStatus(status);
control.saveEx(trx.getTrxName());
}
trx.commit();
System.out.println("El estado del período estándar para la fecha " + date + " fue actualizado a: " + status);
} catch (Exception e) {
trx.rollback();
e.printStackTrace();
} finally {
trx.close();
}
}
public static void main(String[] args) {
// Ejemplo: Abrir un período para la fecha actual
Timestamp date = new Timestamp(System.currentTimeMillis());
setPeriodStatusByDate(date, MPeriodControl.PERIODSTATUS_Open);
// Ejemplo: Cerrar un período para una fecha específica
Timestamp specificDate = Timestamp.valueOf("2024-12-01 00:00:00");
setPeriodStatusByDate(specificDate, MPeriodControl.PERIODSTATUS_Closed);
}
}