viernes, 20 de diciembre de 2024

Set Period Status By Date in iDempiere

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);

    }

}

miércoles, 9 de octubre de 2024

Replace text contained in files inside a folder in Windows

Puedes usar PowerShell para buscar y reemplazar texto en varios archivos dentro de una carpeta. Aquí tienes un ejemplo que te permitirá hacer esto:

Reemplazar texto usando PowerShell:

  1. Abre PowerShell como administrador.
  2. Ejecuta el siguiente comando:

 

Get-ChildItem -Path "C:\ruta\de\la\carpeta" -Recurse -Filter "*.txt" | ForEach-Object {
    (Get-Content $_.FullName) -replace 'texto_a_reemplazar', 'nuevo_texto' | Set-Content $_.FullName
}

  • Get-ChildItem: Busca los archivos dentro de la carpeta especificada.
  • -Path "C:\ruta\de\la\carpeta": Cambia esto por la ruta de tu carpeta.
  • -Recurse: Busca en subcarpetas.
  • -Filter "*.txt": Aplica el filtro solo para archivos .txt. Puedes cambiar esto según el tipo de archivo.
  • ForEach-Object: Recorre cada archivo encontrado.
  • Get-Content $_.FullName: Obtiene el contenido del archivo.
  • -replace 'texto_a_reemplazar', 'nuevo_texto': Reemplaza el texto.
  • Set-Content $_.FullName: Guarda el archivo con el nuevo contenido.

Este script busca el texto específico en todos los archivos y lo reemplaza por el nuevo texto.

 

martes, 16 de julio de 2024

Get DocumentType From FactAcct Generated By AI

 
-- select * from adempiere.fnt_getdocumenttypebyid(318, 1546039);

CREATE OR REPLACE FUNCTION fnt_getdocumenttypebyid(table_id numeric(10,0), record_id numeric(10,0))
RETURNS varchar AS $$
DECLARE
    table_name TEXT;
    select_query TEXT;
    result RECORD;
    document_type VARCHAR;
BEGIN
    -- Obtiene el nombre de la tabla a partir de ad_table_id
    SELECT t.TableName
    INTO table_name
    FROM AD_Table t
    WHERE t.AD_Table_ID = table_id;

    -- Construye la consulta SELECT
    select_query := 'SELECT C_DocType_ID FROM ' || table_name ||
        ' WHERE ' || table_name || '_ID = ' || record_id || ';';

    -- Ejecuta la consulta y obtiene el C_DocType_ID
    EXECUTE select_query INTO document_type;

    -- Obtiene el nombre del tipo de documento
    SELECT dt.Name
    INTO document_type
    FROM C_DocType dt
    WHERE dt.C_DocType_ID = document_type::int;

    RETURN document_type;
END;
$$ LANGUAGE plpgsql;

Get DocumentNo By Table ID and Record ID

 
-- drop function fnt_getdocumentbyid(table_id numeric(10,0), record_id numeric(10,0));

-- select * from adempiere.fnt_getdocumentbyid(321, 1000000);

CREATE OR REPLACE FUNCTION fnt_getdocumentbyid(table_id numeric(10,0), record_id numeric(10,0))
RETURNS varchar AS $$
DECLARE
    table_name TEXT;
    select_query TEXT;
    result RECORD;
        v_documentno varchar;
BEGIN
    -- Obtiene el nombre de la tabla a partir de ad_table_id
    SELECT t.TableName
    INTO table_name
    FROM AD_Table t
    WHERE t.AD_Table_ID = table_id;

    -- Construye la consulta SELECT
    select_query := 'SELECT * FROM ' || table_name ||
        ' WHERE ' || table_name || '_ID = ' || record_id || ';';

    -- Ejecuta la consulta y muestra los resultados
    FOR result IN EXECUTE select_query LOOP
        -- Imprime los valores de cada fila
        -- RAISE NOTICE '%', result.DocumentNo; -- Reemplaza los nombres de columna
                v_documentno = result.DocumentNo;
    END LOOP;

    return v_documentno;
END;
$$ LANGUAGE plpgsql;