-- Tabel Template Sampling
CREATE TABLE sampling_templates (
    SamplingTemplateID INT PRIMARY KEY AUTO_INCREMENT,
    SamplingTemplateName VARCHAR(100),
    SamplingTemplateDescription TEXT,
    SamplingTemplateIsActive BOOLEAN DEFAULT TRUE,
    SamplingTemplateCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    SamplingTemplateCreatedUserID INT,
    SamplingTemplateUpdatedAt DATETIME,
    SamplingTemplateUpdatedUserID INT,
    SamplingTemplateDeletedAt DATETIME,
    SamplingTemplateDeletedUserID INT
);

-- Tabel Template Analisis
CREATE TABLE analysis_templates (
    AnalysisTemplateID INT PRIMARY KEY AUTO_INCREMENT,
    AnalysisTemplateName VARCHAR(100),
    AnalysisTemplateDescription TEXT,
    AnalysisTemplateIsLabAnalysis BOOLEAN DEFAULT TRUE,
    AnalysisTemplateIsActive BOOLEAN DEFAULT TRUE,
    AnalysisTemplateCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    AnalysisTemplateCreatedUserID INT,
    AnalysisTemplateUpdatedAt DATETIME,
    AnalysisTemplateUpdatedUserID INT,
    AnalysisTemplateDeletedAt DATETIME,
    AnalysisTemplateDeletedUserID INT
);

-- Tabel Parameter Analisis
CREATE TABLE analysis_parameters (
    AnalysisParameterID INT PRIMARY KEY AUTO_INCREMENT,
    AnalysisParameterCode VARCHAR(20),
    AnalysisParameterName VARCHAR(100),
    AnalysisParameterTestingMethod VARCHAR(100),
    AnalysisParameterUnit VARCHAR(20),
    AnalysisParameterStandardMethodNumber VARCHAR(50),
    AnalysisParameterPrice DECIMAL(10,2),
    AnalysisParameterIsActive BOOLEAN DEFAULT TRUE,
    AnalysisParameterCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    AnalysisParameterCreatedUserID INT,
    AnalysisParameterUpdatedAt DATETIME,
    AnalysisParameterUpdatedUserID INT,
    AnalysisParameterDeletedAt DATETIME,
    AnalysisParameterDeletedUserID INT
);

-- Tabel Template Parameter
CREATE TABLE template_parameters (
    TemplateParameterID INT PRIMARY KEY AUTO_INCREMENT,
    AnalysisTemplateID INT,
    AnalysisParameterID INT,
    TemplateParameterIsRequired BOOLEAN DEFAULT FALSE,
    TemplateParameterCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    TemplateParameterCreatedUserID INT,
    TemplateParameterUpdatedAt DATETIME,
    TemplateParameterUpdatedUserID INT,
    TemplateParameterDeletedAt DATETIME,
    TemplateParameterDeletedUserID INT
);

-- Tabel Permintaan Layanan
CREATE TABLE service_requests (
    ServiceRequestID INT PRIMARY KEY AUTO_INCREMENT,
    ServiceRequestCode VARCHAR(20) UNIQUE,
    CustomerID INT,
    ServiceRequestType ENUM('sampling_analysis', 'analysis_only'),
    AnalysisTemplateID INT,
    ServiceRequestSamplingDate DATE,
    ServiceRequestSamplingLocation TEXT,
    ServiceRequestGPSCoordinates VARCHAR(50),
    ServiceRequestStatus ENUM('draft', 'submitted', 'approved', 'rejected', 'in_progress', 'completed'),
    ServiceRequestSamplingOfficerID INT,
    ServiceRequestTestingOfficerID INT,
    ServiceRequestTotalAmount DECIMAL(10,2),
    ServiceRequestDPAmount DECIMAL(10,2),
    ServiceRequestDPStatus ENUM('unpaid', 'paid') DEFAULT 'unpaid',
    ServiceRequestNotes TEXT,
    ServiceRequestCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    ServiceRequestCreatedUserID INT,
    ServiceRequestUpdatedAt DATETIME,
    ServiceRequestUpdatedUserID INT,
    ServiceRequestDeletedAt DATETIME,
    ServiceRequestDeletedUserID INT
);

-- Tabel Detail Parameter Permintaan
CREATE TABLE request_parameters (
    RequestParameterID INT PRIMARY KEY AUTO_INCREMENT,
    ServiceRequestID INT,
    AnalysisParameterID INT,
    RequestParameterPrice DECIMAL(10,2),
    RequestParameterStatus ENUM('pending', 'in_progress', 'completed', 'rejected'),
    RequestParameterResultValue VARCHAR(50),
    RequestParameterResultUnit VARCHAR(20),
    RequestParameterIsCompliant BOOLEAN,
    RequestParameterNotes TEXT,
    RequestParameterCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    RequestParameterCreatedUserID INT,
    RequestParameterUpdatedAt DATETIME,
    RequestParameterUpdatedUserID INT,
    RequestParameterDeletedAt DATETIME,
    RequestParameterDeletedUserID INT
);

-- Tabel Quotation
CREATE TABLE quotations (
    QuotationID INT PRIMARY KEY AUTO_INCREMENT,
    QuotationCode VARCHAR(20) UNIQUE,
    ServiceRequestID INT,
    QuotationIssueDate DATE,
    QuotationValidUntil DATE,
    QuotationStatus ENUM('draft', 'sent', 'approved', 'rejected'),
    QuotationSubtotal DECIMAL(10,2),
    QuotationTaxPercentage DECIMAL(5,2),
    QuotationTaxAmount DECIMAL(10,2),
    QuotationTotalAmount DECIMAL(10,2),
    QuotationTermsAndConditions TEXT,
    QuotationNotes TEXT,
    QuotationCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    QuotationCreatedUserID INT,
    QuotationUpdatedAt DATETIME,
    QuotationUpdatedUserID INT,
    QuotationDeletedAt DATETIME,
    QuotationDeletedUserID INT
);

-- Tabel Peralatan Sampling
CREATE TABLE sampling_equipment (
    SamplingEquipmentID INT PRIMARY KEY AUTO_INCREMENT,
    SamplingEquipmentName VARCHAR(100),
    SamplingEquipmentCode VARCHAR(50),
    SamplingEquipmentIsAvailable BOOLEAN DEFAULT TRUE,
    SamplingEquipmentLastCalibrationDate DATE,
    SamplingEquipmentNextCalibrationDate DATE,
    SamplingEquipmentNotes TEXT,
    SamplingEquipmentCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    SamplingEquipmentCreatedUserID INT,
    SamplingEquipmentUpdatedAt DATETIME,
    SamplingEquipmentUpdatedUserID INT,
    SamplingEquipmentDeletedAt DATETIME,
    SamplingEquipmentDeletedUserID INT
);

-- Tabel Peralatan yang Digunakan dalam Sampling
CREATE TABLE request_equipment (
    RequestEquipmentID INT PRIMARY KEY AUTO_INCREMENT,
    ServiceRequestID INT,
    SamplingEquipmentID INT,
    RequestEquipmentUsageDate DATE,
    RequestEquipmentReturnDate DATE,
    RequestEquipmentNotes TEXT,
    RequestEquipmentCreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
    RequestEquipmentCreatedUserID INT,
    RequestEquipmentUpdatedAt DATETIME,
    RequestEquipmentUpdatedUserID INT,
    RequestEquipmentDeletedAt DATETIME,
    RequestEquipmentDeletedUserID INT
);

-- Contoh data template sampling
INSERT INTO sampling_templates (SamplingTemplateName, SamplingTemplateDescription) VALUES
('Air Limbah Industri', 'Template untuk sampling air limbah industri'),
('Kualitas Udara Ambien', 'Template untuk sampling kualitas udara'),
('Air Permukaan', 'Template untuk sampling air sungai/danau');

-- Contoh data parameter analisis
INSERT INTO analysis_parameters (AnalysisParameterCode, AnalysisParameterName, AnalysisParameterUnit, AnalysisParameterPrice, AnalysisParameterTestingMethod) VALUES
('BOD5', 'Biochemical Oxygen Demand', 'mg/L', 250000, 'SNI 6989.72:2009'),
('COD', 'Chemical Oxygen Demand', 'mg/L', 200000, 'SNI 6989.2:2009'),
('TSS', 'Total Suspended Solid', 'mg/L', 150000, 'SNI 06-6989.3-2004'),
('PH', 'Derajat Keasaman', '-', 100000, 'SNI 06-6989.11-2004');

-- Contoh data permintaan layanan
INSERT INTO service_requests (ServiceRequestCode, CustomerID, ServiceRequestType, ServiceRequestSamplingDate, ServiceRequestSamplingLocation, ServiceRequestStatus, ServiceRequestTotalAmount) VALUES
('REQ001', 1, 'sampling_analysis', '2024-03-20', 'Plant A - Outlet IPAL', 'approved', 700000),
('REQ002', 2, 'analysis_only', '2024-03-21', 'Lab Internal', 'submitted', 450000),
('REQ003', 3, 'sampling_analysis', '2024-03-22', 'Intake Water Treatment', 'draft', 550000);

-- Contoh data parameter yang diminta
INSERT INTO request_parameters (ServiceRequestID, AnalysisParameterID, RequestParameterPrice) VALUES
(1, 1, 250000),
(1, 2, 200000),
(1, 3, 150000),
(1, 4, 100000),
(2, 1, 250000),
(2, 2, 200000),
(3, 3, 150000),
(3, 4, 100000);

-- Contoh data quotation
INSERT INTO quotations (QuotationCode, ServiceRequestID, QuotationIssueDate, QuotationValidUntil, QuotationStatus, QuotationTotalAmount) VALUES
('QUO001', 1, '2024-03-15', '2024-04-15', 'approved', 700000),
('QUO002', 2, '2024-03-16', '2024-04-16', 'sent', 450000),
('QUO003', 3, '2024-03-17', '2024-04-17', 'draft', 550000);
