untitled

Pasted Nov 11, 2026, 8:27 PM1 file273 lines

Scan to open on your phone

Point a camera at the QR code - it opens this exact paste, no app needed.

https://codepastes.com/zzgs7bx3grrh74f2
untitled

package com.negocio.desinfectantes.data

import android.content.Context
import androidx.room.Room
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase

object DatabaseProvider {

    private val MIGRATION_2_3 = object : Migration(2, 3) {
        override fun migrate(database: SupportSQLiteDatabase) {

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS producciones (
                    id TEXT NOT NULL,
                    presentacionId TEXT NOT NULL,
                    cantidadProducida INTEGER NOT NULL,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS distribuciones_produccion (
                    id TEXT NOT NULL,
                    produccionId TEXT NOT NULL,
                    sede TEXT NOT NULL,
                    cantidad INTEGER NOT NULL,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS movimientos_inventario (
                    id TEXT NOT NULL,
                    presentacionId TEXT NOT NULL,
                    sede TEXT NOT NULL,
                    tipoMovimiento TEXT NOT NULL,
                    cantidad INTEGER NOT NULL,
                    referenciaId TEXT,
                    observacion TEXT,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)
        }
    }

    private val MIGRATION_3_4 = object : Migration(3, 4) {
        override fun migrate(database: SupportSQLiteDatabase) {

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS clientes (
                    id TEXT NOT NULL,
                    nombre TEXT NOT NULL,
                    telefono TEXT,
                    direccion TEXT,
                    observaciones TEXT,
                    activo INTEGER NOT NULL,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)
        }
    }

    private val MIGRATION_4_5 = object : Migration(4, 5) {
        override fun migrate(database: SupportSQLiteDatabase) {

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS ventas (
                    id TEXT NOT NULL,
                    clienteId TEXT NOT NULL,
                    sede TEXT NOT NULL,
                    tipoVenta TEXT NOT NULL,
                    estadoEntrega TEXT NOT NULL,
                    total REAL NOT NULL,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS detalles_venta (
                    id TEXT NOT NULL,
                    ventaId TEXT NOT NULL,
                    presentacionId TEXT NOT NULL,
                    cantidad INTEGER NOT NULL,
                    precioUnitario REAL NOT NULL,
                    subtotal REAL NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS pagos_venta (
                    id TEXT NOT NULL,
                    ventaId TEXT NOT NULL,
                    monto REAL NOT NULL,
                    metodoPago TEXT NOT NULL,
                    observacion TEXT,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)
        }
    }

    // Nueva migración: versión 5 a 6
    private val MIGRATION_5_6 = object : Migration(5, 6) {
        override fun migrate(database: SupportSQLiteDatabase) {

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS lotes_produccion (
                    id TEXT NOT NULL,
                    productoId TEXT NOT NULL,
                    aromaId TEXT NOT NULL,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS lotes_detalle (
                    id TEXT NOT NULL,
                    loteId TEXT NOT NULL,
                    presentacionId TEXT NOT NULL,
                    cantidadFabricada INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS lotes_gastos (
                    id TEXT NOT NULL,
                    loteId TEXT NOT NULL,
                    concepto TEXT NOT NULL,
                    monto REAL NOT NULL,
                    observacion TEXT,
                    fechaCreacion INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS lotes_inventario (
                    id TEXT NOT NULL,
                    loteId TEXT NOT NULL,
                    presentacionId TEXT NOT NULL,
                    sede TEXT NOT NULL,
                    cantidadDisponible INTEGER NOT NULL,
                    cantidadReservada INTEGER NOT NULL,
                    PRIMARY KEY(id)
                )
            """)

            database.execSQL("""
                CREATE TABLE IF NOT EXISTS lotes_ventas (
                    id TEXT NOT NULL,
                    ventaId TEXT NOT NULL,
                    detalleVentaId TEXT NOT NULL,
                    loteInventarioId TEXT NOT NULL,
                    cantidad INTEGER NOT NULL,
                    estado TEXT NOT NULL,
                    PRIMARY KEY(id)
                )
            """)
        }
    }


    val MIGRATION_6_7 = object : Migration(6, 7) {
        override fun migrate(db: SupportSQLiteDatabase) {

            db.execSQL("""
            ALTER TABLE lotes_produccion
            ADD COLUMN numeroLote TEXT NOT NULL DEFAULT ''
        """)

            db.execSQL("""
            UPDATE lotes_produccion
            SET numeroLote = 'LOTE-' || printf('%04d',
                (
                    SELECT COUNT(*)
                    FROM lotes_produccion AS anterior
                    WHERE anterior.fechaCreacion < lotes_produccion.fechaCreacion
                    OR (
                        anterior.fechaCreacion = lotes_produccion.fechaCreacion
                        AND anterior.id <= lotes_produccion.id
                    )
                )
            )
        """)
            db.execSQL("""
    CREATE TABLE IF NOT EXISTS control_numeracion_lotes (
        id INTEGER NOT NULL PRIMARY KEY,
        ultimoNumero INTEGER NOT NULL
    )
""")

            db.execSQL("""
    INSERT INTO control_numeracion_lotes (id, ultimoNumero)
    SELECT 1, COUNT(*) FROM lotes_produccion
""")
        }
    }

    private val MIGRATION_7_8 = object : Migration(7, 8) {
        override fun migrate(database: SupportSQLiteDatabase) {

            database.execSQL("""
            ALTER TABLE lotes_inventario
            ADD COLUMN cantidadInicial INTEGER NOT NULL DEFAULT 0
        """)

            database.execSQL("""
            UPDATE lotes_inventario
            SET cantidadInicial = cantidadDisponible + cantidadReservada
        """)
        }
    }

    private val MIGRATION_8_9 = object : Migration(8, 9) {
        override fun migrate(database: SupportSQLiteDatabase) {
            database.execSQL("""
            ALTER TABLE ventas
            ADD COLUMN descuento REAL NOT NULL DEFAULT 0.0
        """)
        }
    }

    private val MIGRATION_9_10 = object : Migration(9, 10) {
        override fun migrate(database: SupportSQLiteDatabase) {
            database.execSQL("""
            ALTER TABLE presentaciones
            ADD COLUMN fotoUri TEXT
        """)
        }
    }

    @Volatile
    private var INSTANCE: PrestigeDatabase? = null

    fun obtenerBaseDatos(context: Context): PrestigeDatabase {

        return INSTANCE ?: synchronized(this) {

            val instancia = Room.databaseBuilder(
                context.applicationContext,
                PrestigeDatabase::class.java,
                "prestige_clean_database"
            )
                .addMigrations(
                    MIGRATION_2_3,
                    MIGRATION_3_4,
                    MIGRATION_4_5,
                    MIGRATION_5_6,
                    MIGRATION_6_7,
                    MIGRATION_7_8,
                    MIGRATION_8_9,
                    MIGRATION_9_10
                )
                .build()

            INSTANCE = instancia

            instancia
        }
    }
}

8,790 chars · codepastes.com