Está en la página 1de 1

fmod EnviosYPaquetes is

protecting FLOAT .
protecting INT .
protecting STRING .
protecting BOOL .
sorts Cliente LCliente Envio LEnvio Paquete LPaquete.
subsort Cliente<LCliente.
subsort Envio<LEnvio.
subsort Paquete<LPaquete.
op nilLCliente: ->LCliente[ctor].
op _ _:LCliente LCliente -> LCliente [ctor assoc id: nilLCleinte].
op Cliente:Int String String Float Float Float Float -> Cliente [ctor].
op nilLEnvio: -> LEnvio [ctor].
op _ _:LEnvio LEnvio->LEnvio [ctor assoc id: nilLEnvio].
op Envio:Int String Int -> Envio[ctor].
op nilLPaquete: -> LEnvio [ctor].
op _ _ : LPaquete LPaquete -> LPaquete [ctor assoc id: nilLPaquete].
op Paquete: Float Float -> Float [ctor].
op montoBruto : Envio Cliente Paquete -> Float.
op Iva: Envio Cliente Paqute -> Float.
op montoNeto: Envio Cliente Paquete -> Float.
Vars IDE IDC PT :Int.
Vars ND CT MD :String.
vars PW PV VC VP W V:Float.
var C :Cliente.
var P :Paquete.
ceq montoBruto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paquete
(w,v))= (W*PW) if(MD =/= ND).
ceq montoBruto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paquete
(w,v))=(W*PW + (V-VC)*PV) if(V<VC).
ceq Iva(Envio(IDE,ND,CT,PW,PV,VC,VP), C, P)= (montoBruto(Envio(IDE,ND,CT
,PW,PV,VC,VP), C, P)*0.15) if(CT=="areo").
ceq Iva(Envio(IDE,ND,CT,PW,PV,VC,VP), C, P)= (montoBruto(Envio(IDE,ND,CT
,PW,PV,VC,VP), C, P)*0.1) if(CT=="Terrestre").
ceq Iva(Envio(IDE,ND,CT,PW,PV,VC,VP), C, P)= (montoBruto(Envio(IDE,ND,CT
,PW,PV,VC,VP), C, P)*0.05) if(CT=="barco").
ceq montoNeto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paquete(
w,v))= (Iva(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paquete(w,v))) if(
( VP*PT)>=(montoBruto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Pa
quete(w,v)))).
ceq montoNeto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paquete(
w,v))= (montoBruto(Envio(IDE,ND,CT,PW,PV,VC,VP), Cliente(IDC, MD, PT),Paquete(w,
v))+ Iva(Envio(IDE,ND,CT,PW,PV,VC,VP), Cliente(IDC, MD, PT),Paquete(w,v))-(VP*PT
)) if((VP*PT)<(montoBruto(Envio(IDE,ND,CT,PW,PV,VC,VP),Cliente(IDC, MD, PT),Paqu
ete(w,v)))).
endfm

También podría gustarte