Vai al contenuto

COGZ43 - Stesura Preventivo Laboratorio

Sorgente: cbl/cogz43.cbl | Program-ID: COGZ43 | Tipo: Programma interattivo (generazione preventivo da commessa)

Menu: Lab.Odont. > Operativo > Stesura Preventivo


Scopo

Genera automaticamente un preventivo (COGTESPR/COGRIGPR) a partire da una commessa di laboratorio gia' preparata. L'operatore identifica la prescrizione/commessa tramite la ricerca generica (studio medico, paziente, progressivo, numero commessa) via COGS98W; il programma verifica che la commessa esista e sia in stato valido (non "N" = non ancora preparata, non "E" = evasa), quindi propone di creare un nuovo preventivo, agganciare/rielaborare un preventivo esistente o modificarlo.

Le righe del preventivo sono composte esplodendo il piano di fabbricazione temporaneo della commessa (LODPNMAT, tipo "T"): vengono generate righe descrittive di riferimento (paziente, prescrizione) e le righe di dettaglio per prestazioni ("P") e materiali ("M") con flag di fatturazione. I prezzi sono calcolati tramite COGS01 (listino/fascia/sconti) con arrotondamento valuta via COGU10W. Il raccordo tra commessa e preventivo e' memorizzato su COGRACBB (tipo "CV").

Il programma delega la gestione interattiva del preventivo a COGV91, la stampa a COGV92 e la visualizzazione dei preventivi del cliente a COGV93.

File e tabelle

File/Tabella Tipo Modalita' Descrizione
FEURTAB ISAM Input Parametri generali azienda (cogfiles.cpy)
LODCMTES ISAM (k02) Input Testata commessa via chiave 2 (lct-chia2, lct-piano, lct-coeff)
LODPRESC ISAM Input Prescrizione (lpm-rec, lpm-stato, lpm-cod, lpm-data) - popolata da COGS98W
LODPNMAT ISAM Input Righe piano fabbricazione temporaneo (lmt-piano-tip, lmt-piano-cod, lmt-tip, lmt-merce, lmt-qta, lmt-fl-fat, lmt-fl-qta)
COGMERCI ISAM Input Anagrafica merci (mer-chia, mer-coeff)
COGGEANA ISAM Input Anagrafica generale clienti (ana-riflistino, ana-fascia, ana-nome, ana-ind)
COGTESPR ISAM I-O Testata preventivo (tpr-anno, tpr-numero, tpr-cliente, tpr-currency, ...)
COGRIGPR ISAM I-O Righe preventivo (rpr-anno, rpr-numero, rpr-riga, rpr-merce, rpr-qta, rpr-prezzo, ...)
COGRACBB ISAM (k02) I-O Raccordo commessa-preventivo, tipo "CV" (rbb-tip, rbb-a-bol, rbb-b-bol, rbb-pro)

Copybook utilizzate

Copybook Descrizione
cogz43.select, cogz43.fd, cogz43.wrk, cogz43-01.scr, cogz43.prc, cogz43.decla Screen Designer
feurtab.fd, cogfiles.cpy FEURTAB
wstato.cpy, wopenf.cpy, wgrave.cpy, wnscr.cpy, cogazien.cpy Working storage standard + dati azienda
utilcogv93.cpy Linkage subroutine COGV93
utils25.cpy, utils52.cpy, utils98.cpy Linkage COGS25 (numeratore), COGS52, COGS98W
utilncnf.cpy Linkage RNEWCONF
utilu10.cpy Linkage COGU10W (arrotondamento valuta)
utildlg.cpy Linkage DIALOGS
wcont.cpy, utils01.cpy, utilz43.cpy, utilv91.cpy, utilv92.cpy, wcont1.cpy Linkage di chiamata (COGS01, COGV91, COGV92)
stato1.cpy, stato.cpy, winmsg.cpy, grave.cpy, mmmask.cpy, opengen.cpy Copybook di fine procedure
cogracbb.k02, lodcmtes.k02 Chiavi secondarie (aggiunte a fine procedure)

Logica

Struttura goto-driven. Flusso principale:

  • apri: init, open-files; recupero dati di chiamata (z43-called, z43-prescrizione); legge configurazione (x99-src-cfg); abilita tasti F3, F4, F8 aiuto/calendario, F9 nuovo/ricerca avanzata; carica bitmap labodonto/labodonto2 e crea pulsanti custom "Commessa (F5)" e "Visualizza preventivi cliente (F6)"; z-costruisci-controlli, z-s98-init.
  • a4: reset maschera (divisa da w-currency-conto); se chiamato (w-dc-called = "S") esegue find su COGS98W con la prescrizione ricevuta e salta a a-10-cerca.
  • a-tm-cli: accept della prescrizione/commessa via COGS98W (z-s98-tm-presc, s98-fun = "accept"); gestione esiti exit/prev/next.
  • a-10-cerca / a-fine-commessa: x-controlla-commessa (COGS98W display, poi legge LODCMTES per chiave 2, verifica stato prescrizione: blocca se "N" = non preparata o "E" = evasa); recupera piano (lct-piano), coefficiente (lct-coeff), codice e data prescrizione.
  • a-40: cerca un raccordo esistente su COGRACBB (tipo "CV", rbb-a-bol = numero commessa); se il preventivo di riferimento non esiste piu' cancella il raccordo, altrimenti eventualmente ripristina nome/indirizzo cliente su COGTESPR da COGGEANA.
  • a-tm-prv-ann / a-tm-prv-num: accept anno/numero preventivo; F6 richiama COGV93 (visualizza preventivi cliente), F9 forza nuovo preventivo (anno/numero a 0), F3 conferma.
  • a-richiesta-conferma-bis: valida i campi; su nuovo preventivo (anno/numero = 0) chiede conferma inserimento; su preventivo esistente valido (trovato-p) chiede conferma agganciamento ed esegue aggancia-cogracbb. x-controlla-tm-prv-num verifica via COGRACBB (chiave 2) e COGTESPR che il preventivo non sia gia' assegnato ad altra commessa (altra-comm), non sia di altro cliente (altro-cli) e non sia inesistente (non-trovato-p).
  • Se il preventivo esiste (tm-prv-ann <> 0) apre una DIALOG (Rielabora F3 / Modifica F6 / Annulla Esc): F6 richiama COGV91 (gestione), F3 rielabora.
  • Rielaborazione/inserimento: legge listino/fascia cliente da COGGEANA; se nuovo (tm-prv-ann = 0) inserisce testata (d-inserisci-testata) e righe (b-inserisci-righe); se esistente cancella le righe (c-cancella-righe) e le reinserisce, poi riaggancia.
  • d-inserisci-testata: chiama COGS25 per il numeratore preventivo (s25-i-cod = 7), inizializza COGTESPR (cliente, nome/indirizzo da COGGEANA, data, listino, flag), scrive; poi aggancia-cogracbb.
  • b-inserisci-righe: righe descrittive (riferimento paziente, riferimento prescrizione con data) via b1-descrizione; poi b2-righe per prestazioni ("P") e materiali ("M").
  • b2-righe: scorre LODPNMAT (tipo "T", piano commessa) filtrando lmt-tip = w-tip, lmt-fl-fat = "F", lmt-qta <> 0; calcola quantita' (moltiplicata per coefficiente se lmt-fl-qta = "U" e coeff <> 0), applica eventuale calo peso (tm-cfg-calopeso = "A" usa mer-coeff), chiama COGS01 per prezzo/sconti, arrotonda l'importo con COGU10W, scrive la riga COGRIGPR.
  • a-50: DIALOG finale (Prosegui Esc / Gestione F6 = COGV91 / Stampa F9 = COGV92).
  • aggancia-cogracbb: scrive COGRACBB tipo "CV" (a-bol = commessa, b-bol = preventivo).
  • fine / z-chiudi: z-close-files, cancel 'COGS98W', exit program.

Configurazioni (RNEWCONF)

Pacchetto "C", punto 01, percorso GESTBUONIC:

Chiave Uso
euta-c034-calopeso Se "A", applica il calo peso (coefficiente merce mer-coeff) alle quantita' delle righe preventivo (tm-cfg-calopeso, x99-src-cfg)

CALL

Programma Scopo
COGS98W Ricerca/accept generico prescrizione-commessa (studio/paziente/progressivo/numero)
COGS01 Calcolo prezzo/sconti da listino, fascia e valuta
COGU10W Arrotondamento importo secondo la valuta
COGS25 Numeratore progressivo preventivo (codice 7)
COGV91 Gestione interattiva del preventivo (via set-win-appoggio/close-win-appoggio)
COGV92 Stampa del preventivo
COGV93 Visualizzazione preventivi del cliente (F6)
DIALOGS Dialoghi di scelta (rielabora/modifica, prosegui/gestione/stampa)
RNEWCONF Lettura configurazione calo peso

Note

  • Il codice usa PERFORM ... THRU e GO TO in modo estensivo (stile legacy pre-convenzioni attuali).
  • Il raccordo commessa-preventivo su COGRACBB usa il tipo "CV"; rbb-a-bol contiene il numero commessa, rbb-b-bol l'anno+numero del preventivo. La ricerca inversa (dal preventivo alla commessa) usa la chiave secondaria cogracbb.k02.
  • La commessa e' letta da LODCMTES tramite chiave secondaria lct-chia2 (studio+paziente+progressivo); serve lodcmtes.k02.
  • Il numero commessa (tm-num) e' popolato da COGS98W. Nel controllo x-controlla-tm-prv-num, un preventivo con rbb-a-bol = 0 e' considerato agganciabile (non ancora legato ad alcuna commessa).
  • La divisa: su rielaborazione la valuta resta quella memorizzata in testata preventivo (tpr-currency), non quella corrente.
  • La numerazione preventivo usa l'anno di sistema (sis-aa) come tpr-anno e il progressivo COGS25 come tpr-numero.