Skip to main content

Overview

Advertising and propaganda permits are required for businesses or individuals who want to display promotional materials in public spaces within the municipality. These permits specify the types of materials authorized and include additional details like comments and material descriptions.

Material Types

The system supports the following advertising material types:

Volantes

Flyers and leaflets

Afiches

Posters

Pendones

Banners

Habladores

Shelf talkers / wobbler signs

Stands

Display stands and booths

Calcomanías

Stickers and decals

Banderolas

Street banners

Otros

Other materials (requires description)

Required Fields

Applicant Information

nombre
string
required
Applicant’s first name
apellido
string
required
Applicant’s last name
idDocument
string
required
Applicant’s identification document number
tlf
string
required
Applicant’s phone number
habitacion
string
required
Applicant’s address or location

Permit Details

habilitacion
date
required
Start date when the permit becomes valid
vencimiento
date
required
Expiration date of the permit
horario
string
required
Authorized display schedule
sector
string
required
Sector or area where materials can be displayed

Advertising Material Types

publicidad_volantes
string
Quantity or description of flyers authorized
publicidad_afiches
string
Quantity or description of posters authorized
publicidad_pendones
string
Quantity or description of banners authorized
publicidad_habladores
string
Quantity or description of shelf talkers authorized
publicidad_stands
string
Quantity or description of stands authorized
publicidad_calcomanias
string
Quantity or description of stickers authorized
publicidad_banderolas
string
Quantity or description of street banners authorized
publicidad_otros
string
Quantity of other materials
publicidad_otros_descripcion
string
Description of other materials (required if publicidad_otros is provided)

Additional Information

comentarios
text
Additional comments or special conditions for the permit
comprobante
file
Payment receipt file upload (optional)
today
string
required
Current date in YYYY-MM-DD format for validation

Creating a Permit

To create a new advertising permit, send a POST request with multipart form data:
POST /publicidad_y_propaganda/add
Content-Type: multipart/form-data

Request Example

const formData = new FormData();

// Basic information
formData.append('habilitacion', '2026-03-01');
formData.append('vencimiento', '2026-06-01');
formData.append('horario', 'Todo el día');
formData.append('nombre', 'María');
formData.append('apellido', 'González');
formData.append('idDocument', 'V-23456789');
formData.append('tlf', '0424-2345678');
formData.append('habitacion', 'Av. Bolívar #456');
formData.append('sector', 'Centro de la ciudad');

// Material types
formData.append('publicidad_volantes', '500');
formData.append('publicidad_afiches', '20');
formData.append('publicidad_pendones', '5');
formData.append('publicidad_habladores', '');
formData.append('publicidad_stands', '1');
formData.append('publicidad_calcomanias', '100');
formData.append('publicidad_banderolas', '');
formData.append('publicidad_otros', '10');
formData.append('publicidad_otros_descripcion', 'Banderas corporativas');

// Additional details
formData.append('comentarios', 'Campaña promocional de verano');
formData.append('comprobante', fileInput.files[0]); // Optional
formData.append('today', '2026-03-04');

Response

{
  "success": "¡Se ha registrado correctamente el permiso!",
  "permiso": "2026-001"
}

Editing a Permit

Update an existing permit:
POST /publicidad_y_propaganda/edit
Content-Type: multipart/form-data

Request Body

All fields from creation plus:
permiso
integer
required
ID of the permit to edit
needPermiso
string
Set to “true” if updating the payment receipt, “false” otherwise

Example

const formData = new FormData();
formData.append('permiso', '7');
formData.append('habilitacion', '2026-03-01');
formData.append('vencimiento', '2026-06-01');
formData.append('horario', 'Todo el día');
formData.append('nombre', 'María');
formData.append('apellido', 'González');
formData.append('idDocument', 'V-23456789');
formData.append('tlf', '0424-2345678');
formData.append('habitacion', 'Av. Bolívar #456');
formData.append('sector', 'Centro de la ciudad');
formData.append('publicidad_volantes', '1000'); // Updated quantity
formData.append('publicidad_afiches', '20');
formData.append('publicidad_pendones', '5');
formData.append('publicidad_habladores', '');
formData.append('publicidad_stands', '1');
formData.append('publicidad_calcomanias', '100');
formData.append('publicidad_banderolas', '');
formData.append('publicidad_otros', '10');
formData.append('publicidad_otros_descripcion', 'Banderas corporativas');
formData.append('comentarios', 'Campaña promocional de verano - extendida');
formData.append('needPermiso', 'false');
formData.append('today', '2026-03-04');

Response

{
  "success": "¡Se ha editado correctamente el permiso!",
  "permiso": 7
}

Approving a Permit

Approve a permit by uploading the authorized permit document:
POST /publicidad_y_propaganda/aprobate
Content-Type: multipart/form-data

Request Body

permiso
integer
required
ID of the permit to approve
permiso_aprobado
file
required
Authorized permit document file

Response

{
  "success": "¡Se ha aprobado correctamente el permiso!",
  "permiso": 7
}

Canceling a Permit

Cancel a permit with an observation note:
POST /publicidad_y_propaganda/cancel
Content-Type: multipart/form-data

Request Body

permiso
integer
required
ID of the permit to cancel
observacion
string
required
Reason for cancellation

Example

const formData = new FormData();
formData.append('permiso', '7');
formData.append('observacion', 'Cancelado a solicitud del cliente');

Response

{
  "success": "¡Se ha cancelado la emisión del permiso correctamente!",
  "permiso": 7
}

Searching and Filtering

Search for permits with various filters:
POST /publicidad_y_propaganda/search
Content-Type: multipart/form-data

Request Body

busqueda
string
Search term (searches across permit code, dates, applicant name, document, phone, sector)
estado
string
required
Filter by status: “Todos” (all), “Emitido” (approved), or “No Emitido” (not approved)

Response

Returns HTML template with search results:
{
  "plantilla": "<button class='item aproved' id='itemResult1'>...</button>..."
}

Getting Permit Details

Retrieve details for a specific permit:
POST /publicidad_y_propaganda/get
Content-Type: multipart/form-data

Request Body

id
integer
required
Permit ID

Response

{
  "result": {
    "id": 7,
    "codigo_permiso": "2026-001",
    "habilitacion": "2026-03-01",
    "vencimiento": "2026-06-01",
    "horario": "Todo el día",
    "dat_confirmacion": 1,
    "requisitor_nombre": "María",
    "requisitor_apellido": "González",
    "requisitor_doc": "V-23456789",
    "requisitor_tlf": "0424-2345678",
    "requisitor_habitacion": "Av. Bolívar #456",
    "sector_permisado": "Centro de la ciudad",
    "publicidad_volantes": "500",
    "publicidad_afiches": "20",
    "publicidad_pendones": "5",
    "publicidad_habladores": "",
    "publicidad_stands": "1",
    "publicidad_calcomanias": "100",
    "publicidad_banderolas": "",
    "publicidad_otros": "10",
    "publicidad_otros_descripcion": "Banderas corporativas",
    "comentarios": "Campaña promocional de verano",
    "comprobante_de_pago": "comprobante_de_pago_1234567890.pdf",
    "permiso_autorizado": "permiso_autorizado1234567890.pdf",
    "creador": "Admin User",
    "editor": "Admin User",
    "emitido": 1,
    "cancelado": 0,
    "observacion": ""
  },
  "usuario": { /* current session user */ }
}

PDF Generation

Generate a PDF document for a specific permit:
GET /publicidad_y_propaganda/permiso/publicidad-y-propaganda_2026-001
The URL pattern is: publicidad-y-propaganda_{codigo_permiso}

Response

Returns a PDF document with:
  • Content-Type: application/pdf
  • All permit details including material types
  • Formatted using the template at views/templates/permisos/publicidad.html

Deleting a Permit

Only users with “Administrador” or “Desarrollador” roles can delete permits.
Delete a permit (only if not approved):
DELETE /publicidad_y_propaganda/
Content-Type: multipart/form-data

Request Body

id
integer
required
ID of the permit to delete

Response

{
  "message": "¡El permiso ha sido eliminado!"
}
Same restrictions apply as with alcoholic beverage permits.

Report Generation

Generate a comprehensive PDF report:
GET /publicidad_y_propaganda/reporte
The report includes statistics and detailed tables for all advertising permits.

Database Schema

The permisos_publicidad table extends the base permit structure with additional fields:
FieldTypeDescription
publicidad_volantesvarcharFlyers quantity/description
publicidad_afichesvarcharPosters quantity/description
publicidad_pendonesvarcharBanners quantity/description
publicidad_habladoresvarcharShelf talkers quantity/description
publicidad_standsvarcharStands quantity/description
publicidad_calcomaniasvarcharStickers quantity/description
publicidad_banderolasvarcharStreet banners quantity/description
publicidad_otrosvarcharOther materials quantity
publicidad_otros_descripciontextDescription of other materials
comentariostextAdditional comments
Plus all standard permit fields (id, codigo_permiso, dates, applicant info, etc.)

File Storage

Files are stored in:
../public/server-files/asuntos_publicos/permisos_municipales/publicidad/

Build docs developers (and LLMs) love