-- ============================================================
-- quoERP — Pagos sobre Órdenes de Compra
-- Migración: 011_purchase_payments.sql
-- Versión: 1.0.0 | Fecha: 2026-06-05
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ─────────────────────────────────────────────────────────────
-- AJUSTE: purchase_orders — estado y monto de pagos realizados
-- ─────────────────────────────────────────────────────────────
ALTER TABLE purchase_orders
    ADD COLUMN IF NOT EXISTS payment_status ENUM('pendiente','parcial','pagada','anulada')
                                            NOT NULL DEFAULT 'pendiente'
        COMMENT 'Estado de pago al proveedor (recalculado automáticamente)',
    ADD COLUMN IF NOT EXISTS paid_amount    DECIMAL(12,2) NOT NULL DEFAULT 0
        COMMENT 'Suma de pagos activos realizados al proveedor';


-- ─────────────────────────────────────────────────────────────
-- TABLA: purchase_order_payments — Pagos realizados al proveedor
-- Espejo de sale_invoice_payments pero para el lado de compras.
-- Permite múltiples formas de pago, adjuntos y anulación individual.
-- Al registrar un pago → asiento: DR CxP / CR Banco (si hay config contable)
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS purchase_order_payments (
    id               INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    order_id         INT UNSIGNED    NOT NULL,
    method           ENUM('efectivo','transferencia','cheque','tarjeta','otro')
                                     NOT NULL DEFAULT 'transferencia',
    amount           DECIMAL(12,2)   NOT NULL,
    payment_date     DATE            NOT NULL,
    note             TEXT            DEFAULT NULL  COMMENT 'N° cheque, referencia de transferencia, etc.',
    attachment_path  VARCHAR(255)    DEFAULT NULL  COMMENT 'Ruta en public/uploads/payments/',
    attachment_name  VARCHAR(255)    DEFAULT NULL,
    attachment_size  INT UNSIGNED    DEFAULT NULL,
    status           ENUM('active','voided') NOT NULL DEFAULT 'active',
    void_reason      TEXT            DEFAULT NULL,
    voided_at        DATETIME        DEFAULT NULL,
    voided_by        INT UNSIGNED    DEFAULT NULL,
    created_by       INT UNSIGNED    DEFAULT NULL,
    created_at       DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    INDEX idx_order  (order_id),
    INDEX idx_status (status),
    INDEX idx_date   (payment_date),

    CONSTRAINT fk_pop_order    FOREIGN KEY (order_id)  REFERENCES purchase_orders(id) ON DELETE CASCADE,
    CONSTRAINT fk_pop_voided   FOREIGN KEY (voided_by) REFERENCES users(id)           ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Pagos realizados al proveedor contra una OC. Múltiples métodos, adjuntos, anulación individual.';

SET FOREIGN_KEY_CHECKS = 1;
