DROP VIEW "public"."contracts_detail_view";--> statement-breakpoint
CREATE VIEW "public"."contracts_detail_view" AS (select "contracts"."id", "contracts"."contract_no", "contracts"."contract_name", "contracts"."status", "contracts"."start_date", "contracts"."end_date", "contracts"."project_id", "projects"."code", "projects"."name", "contracts"."vendor_id", "vendors"."vendor_name", "contracts"."payment_terms", "contracts"."delivery_terms", "contracts"."delivery_date", "contracts"."delivery_location", "contracts"."currency", "contracts"."total_amount", "contracts"."discount", "contracts"."tax", "contracts"."shipping_fee", "contracts"."net_total", "contracts"."partial_shipping_allowed", "contracts"."partial_payment_allowed", "contracts"."remarks", "contracts"."version", "contracts"."created_at", "contracts"."updated_at", EXISTS (
                SELECT 1 
                FROM "contract_envelopes" 
                WHERE "contract_envelopes"."contract_id" = "contracts"."id"
            ) as "has_signature", COALESCE((
        SELECT json_agg(
          json_build_object(
            'id', ce.id,
            'envelopeId', ce.envelope_id,
            'documentId', ce.document_id,
            'envelopeStatus', ce.envelope_status,
            'fileName', ce.file_name,
            'filePath', ce.file_path,
            'createdAt', ce.created_at,
            'updatedAt', ce.updated_at,
            'signers', (
              SELECT json_agg(
                json_build_object(
                  'id', cs.id,
                  'vendorContactId', cs.vendor_contact_id,
                  'signerType', cs.signer_type,
                  'signerEmail', cs.signer_email,
                  'signerName', cs.signer_name,
                  'signerPosition', cs.signer_position,
                  'signerStatus', cs.signer_status,
                  'signedAt', cs.signed_at
                )
              )
              FROM "contract_signers" AS cs
              WHERE cs.envelope_id = ce.id
            )
          )
        )
        FROM "contract_envelopes" AS ce
        WHERE ce.contract_id = "contracts"."id"
    ), '[]') as "envelopes" from "contracts" left join "projects" on "contracts"."project_id" = "projects"."id" left join "vendors" on "contracts"."vendor_id" = "vendors"."id");