33 lines
2.7 KiB
JavaScript
33 lines
2.7 KiB
JavaScript
export const workshopSections=[
|
|
{id:'workshop_panel',label:'Painel da oficina'},
|
|
{id:'workshop_clients',label:'Clientes'},
|
|
{id:'workshop_equipment',label:'Equipamentos'},
|
|
{id:'workshop_schedule',label:'Agendamentos',pending:'Calendário, disponibilidade e lembretes ainda não estão implementados. Não são criadas marcações ou enviados lembretes por este menu.'},
|
|
{id:'workshop_quotes',label:'Orçamentos',pending:'O orçamento comercial da reparação e o registo da aprovação do cliente ainda não estão implementados como documento próprio. As autorizações de trabalho existentes conservam o seu âmbito e evidência; não são convertidas em orçamentos.'},
|
|
{id:'workshop',label:'Ordens de serviço'},
|
|
{id:'workshop_stock',label:'Peças e stock',pending:'O stock de oficina, reservas, mínimos e inventário ainda não estão implementados neste módulo. Os apontamentos de material existentes são observações de ocorrências, não saldos nem movimentos de armazém.'},
|
|
{id:'workshop_purchasing',label:'Compras e fornecedores',pending:'O percurso completo de Compras ainda não está incorporado nesta composição da oficina. As demonstrações de obrigações e orçamento mantêm os seus contextos próprios; nenhuma compra é criada por esta página.'},
|
|
{id:'workshop_finance',label:'Facturação e caixa'},
|
|
{id:'workshop_team',label:'Equipa'},
|
|
{id:'workshop_reports',label:'Relatórios'},
|
|
{id:'workshop_settings',label:'Configurações'},
|
|
];
|
|
|
|
export function visibleWorkshopSections(can,unit) {
|
|
if(unit===null||!can('workshop.view',unit))return [];
|
|
return workshopSections.filter(s=>s.id!=='workshop_clients'||can('clients.view')).filter(s=>s.id!=='workshop_finance'
|
|
||can('service_invoices.view',unit)||can('billing_drafts.view',unit)||can('service_receivables.view',unit)||can('workshop_billing.view',unit));
|
|
}
|
|
|
|
export const workshopStates={open:'Aberta',in_review:'Apontamentos em revisão',exception_review:'Ocorrências fora do âmbito para revisão',records_verified:'Registos verificados — sem conclusão comercial'};
|
|
|
|
export function filterWorkshopOrders(orders,search='',state='') {
|
|
const normalise=v=>String(v??'').normalize('NFD').replace(/[\u0300-\u036f]/g,'').toLocaleLowerCase('pt');
|
|
const query=normalise(search).trim();
|
|
return orders.filter(o=>(!state||o.state===state)&&(!query||[o.reference,o.equipment?.identifier,o.equipment?.description,o.equipment?.serial,o.client_id,o.assigned_to].some(v=>normalise(v).includes(query))));
|
|
}
|
|
|
|
export function visibleWorkshopEquipment(orders) {
|
|
return [...new Map(orders.filter(o=>o.equipment).map(o=>[o.equipment.id,{...o.equipment,orders:orders.filter(other=>other.equipment?.id===o.equipment.id).map(other=>other.id)}])).values()];
|
|
}
|