Code : Tout sélectionner
XIncludeFile "spd.pbi"
Procedure EmailValidate(value$)
If value$=""
ProcedureReturn #True
EndIf
If CountString(value$,"@")=1
ProcedureReturn #True
EndIf
MessageRequester("Fiche client","Adresse Email invalide")
ProcedureReturn #False
EndProcedure
Procedure TesteValideLink(value$)
ProcedureReturn #True
EndProcedure
; Initialisation de la base de donnée
spd::InitDb("teste.sqlite")
;-* Ajout de la table Pays
spd::AddTable("pays")
spd::AddItem("pays","nom",spd::#TP_Varchar,30,#True,#True)
;}
;-* Ajout de la table localité
spd::AddTable("localite")
spd::AddItem("localite","code_postal",spd::#TP_Varchar,10,#True,#True)
spd::AddItem("localite","nom",spd::#TP_Varchar,30,#True,#True)
; Liaison entre Localite et pays
; --> Chaque localité à un pays
spd::AddLink("localite","pays")
;}
;-* Ajout de la table Client
spd::AddTable("client")
spd::AddItem("client","nom",spd::#TP_Varchar,30,#True)
spd::AddItem("client","adresse",spd::#TP_Varchar,60,#True)
spd::AddItem("client","telephone",spd::#TP_Varchar,30,#False)
spd::AddItem("client","gsm",spd::#TP_Varchar,30,#False)
spd::AddItem("client","email",spd::#TP_Varchar,100,#False)
; Liaison client localité
; --> Chaque client à une localité
spd::AddLink("client","localite")
;}
;-* Ajout de la table Fournisseur
spd::AddTable("fournisseur")
spd::AddItem("fournisseur","nom",spd::#TP_Varchar,30,#True)
spd::AddItem("fournisseur","adresse",spd::#TP_Varchar,60,#True)
spd::AddItem("fournisseur","telephone",spd::#TP_Varchar,30,#False)
spd::AddItem("fournisseur","gsm",spd::#TP_Varchar,30,#False)
spd::AddItem("fournisseur","email",spd::#TP_Varchar,100,#False)
; Liaison fournisseur localité
; --> Chaque client à une localité
spd::AddLink("fournisseur","localite")
;}
;-* Ajout de la table Catégorie
spd::AddTable("categorie")
spd::AddItem("categorie","nom",spd::#TP_Varchar,30,#True,#True)
;}
;-* Ajout de la table TVA
spd::AddTable("tva")
spd::AddItem("tva","taux",spd::#TP_Float)
spd::FixDecimal(2)
;}
;-* Ajout de la table Produit"
spd::AddTable("produit")
spd::AddItem("produit","nom",spd::#TP_Varchar,30,#True,#True)
spd::AddItem("produit","pa",spd::#TP_Float)
spd::FixDecimal(2)
spd::AddItem("produit","pv",spd::#TP_Float)
spd::FixDecimal(2)
; Liaison produit TVA
; --> Chaque produit à un taux de tva
spd::AddLink("produit","tva")
; Liaison produit Catégorie
; --> Chaque produit a une catégorie
spd::AddLink("produit","categorie")
; Liaison produit Fournisseur
; --> Chaque produit a un fournisseur
spd::AddLink("produit","fournisseur")
;}
;-* Ajout de la table Facture
spd::AddTable("facture")
spd::AddItem("facture","numero",spd::#TP_Varchar,20,#True,#True)
spd::AddItem("facture","date",spd::#TP_Date,0,#True)
; Liaison facture Client
; --> Chaque facture a un client
spd::AddLink("facture","client")
;}
;-* Ajout de la table Ligne de facture
spd::AddTable("lgn_facture")
spd::AddItem("lgn_facture","qte",spd::#TP_Integer)
spd::AddItem("lgn_facture","pv",spd::#TP_Float)
spd::FixDecimal(2)
spd::AddItem("lgn_facture","tva",spd::#TP_Float)
spd::FixDecimal(2)
; Liaison ligne de facture produit
; --> Chaque ligne de facture a un produit
spd::AddLink("lgn_facture","produit")
; Liaison ligne de facture facture
; --> Chaque ligne de facture a une facture
spd::AddLink("lgn_facture","facture")
;}
spd::BuildDb()
Enumeration
#MainForm
#PaysTab
#PaysFic
#LocaliteTab
#LocaliteFic
#ClientTab
#ClientFic
#FournisseurTab
#FournisseurFic
#TvaTab
#TvaFic
#CategorieTab
#CategorieFic
#ProduitTab
#ProduitFic
#MainMenu
#FactureForm
#FactureFic
#M_Pays
#M_Localite
#M_Client
#M_Tva
#M_Categorie
#M_Fournisseur
#M_Produit
#M_Facture
EndEnumeration
; Teste ajout de 10000000 de record
OpenDatabase(0,"teste.sqlite","","")
; For N=0 To 10000000
; query$="INSERT INTO pays (nom) VALUES ('"+Str(N)+"')"
; If DatabaseUpdate(0,query$)=0
; MessageRequester("Erreur",DatabaseError())
; EndIf
; ; Debug query$
; Next
;-* Pays form
; Création de la fenêtre table des pays
spd::CreateTableWindow(#PaysTab,"pays","Liste des pays",400,600,120,30,#PaysFic,#MainForm)
spd::AddColumn("Nom","nom",400)
spd::EnableColumnShearch()
; Création de la fenêtre fiche des pays
spd::CreateSheetWindow(#PaysFic,"pays",180,30,1,"Nouveau pays","Edition d'un pays")
spd::AddStringToSheet("Pays","nom",spd::#Mask_FirstUper)
;}
;-* Localité form
; Création de la fenêtre table des localités
spd::CreateTableWindow(#LocaliteTab,"localite","Liste des localités",600,600,120,30,#LocaliteFic,#MainForm)
spd::AddColumn("Pays","id_pays",195,"nom")
spd::AddColumn("Code postal","code_postal",200)
spd::AddColumn("Localité","nom",200)
spd::EnableColumnShearch()
spd::SetTableFormOrder(#LocaliteTab,"pays.nom,localite.nom ASC")
; Création de la fenêtre fiche des localités
spd::CreateSheetWindow(#LocaliteFic,"localite",180,30,1,"Nouvelle localité","Edition d'une localité")
spd::AddComboLinkToSheet("Pays","id_pays","nom",#True)
spd::AddValidateProcedure(@TesteValideLink())
spd::AddStringToSheet("Code postal","code_postal",spd::#Mask_AllLower)
spd::AddStringToSheet("Localité","nom",spd::#Mask_FirstUper)
;}
;-* Client form
; Création de la fenêtre Table des clients
spd::CreateTableWindow(#ClientTab,"client","Liste des clients",400,600,120,30,#ClientFic,#MainForm)
spd::AddColumn("Localité","id_localite",195,"nom")
spd::EnableColumnFilters("Pas de filtre")
spd::AddColumn("Nom","nom",200)
spd::EnableColumnShearch()
spd::SetTableFormOrder(#ClientTab,"localite.nom,client.nom ASC")
; Création de la fenêtre fiche d'un client
spd::CreateSheetWindow(#ClientFic,"client",280,30,1,"Nouveau client","Edition d'un client")
spd::AddStringToSheet("Nom","nom",spd::#Mask_FirstUper)
spd::AddComboLinkToSheet("Localité","id_localite","nom",#True)
spd::AddStringToSheet("Adresse","adresse")
spd::AddStringToSheet("Téléphone","telephone",spd::#Mask_Phone)
spd::AddStringToSheet("Gsm","gsm",spd::#Mask_Phone)
spd::AddStringToSheet("Email","email")
spd::AddValidateProcedure(@EmailValidate())
;}
;-* Tva form
; Création de la fenêtre Table des taux de tva
spd::CreateTableWindow(#TvaTab,"tva","Liste des taux de TVA",180,600,120,30,#TvaFic,#MainForm)
spd::AddColumn("Taux de TVA","taux",175)
spd::FixExtend(" %")
spd::SetColumnAlign(spd::#A_Right)
spd::SetTableFormOrder(#TvaTab,"taux ASC")
; Création de la fenêtre fiche d'un taux de tva
spd::CreateSheetWindow(#TvaFic,"tva",180,30,1,"Nouveau Taux de TVA","Edition d'un Taux de Tva")
spd::AddStringToSheet("Taux","taux",spd::#Mask_Number,2," %")
;}
;-* Catégorie form
; Création de la fenêtre Table des catégories
spd::CreateTableWindow(#CategorieTab,"categorie","Liste des catégories",220,600,120,30,#CategorieFic,#MainForm)
spd::AddColumn("Catégorie","nom",215)
spd::EnableColumnShearch()
spd::SetTableFormOrder(#CategorieTab,"categorie.nom ASC")
; Création de la fenêtre fiche d'une catégorie
spd::CreateSheetWindow(#CategorieFic,"categorie",180,30,1,"Nouvelle catégorie","Edition d'une catégorie")
spd::AddStringToSheet("Catégorie","nom")
;}
;-* Fournisseur form
; Création de la fenêtre Table des fournisseurs
spd::CreateTableWindow(#FournisseurTab,"fournisseur","Liste des fournisseurs",400,600,120,30,#FournisseurFic,#MainForm)
spd::AddColumn("Localité","id_localite",195,"nom")
spd::AddColumn("Nom","nom",200)
spd::EnableColumnShearch()
spd::SetTableFormOrder(#FournisseurTab,"localite.nom,fournisseur.nom ASC")
; Création de la fenêtre fiche d'un fournisseur
spd::CreateSheetWindow(#FournisseurFic,"fournisseur",280,30,1,"Nouveau fournisseur","Edition d'un fournisseur")
spd::AddStringToSheet("Nom","nom",spd::#Mask_FirstUper)
spd::AddComboLinkToSheet("Localité","id_localite","nom",#True)
spd::AddStringToSheet("Adresse","adresse")
spd::AddStringToSheet("Téléphone","telephone",spd::#Mask_Phone)
spd::AddStringToSheet("Gsm","gsm",spd::#Mask_Phone)
spd::AddStringToSheet("Email","email")
spd::AddValidateProcedure(@EmailValidate())
;}
;-* Produit form
; Création de la fenêtre Table des produits
spd::CreateTableWindow(#ProduitTab,"produit","Liste des produits",600,600,120,30,#ProduitFic,#MainForm)
spd::AddColumn("Fournisseur","id_fournisseur",200,"nom")
spd::EnableColumnFilters("Pas de filtre")
spd::AddColumn("Catégorie","id_categorie",200,"nom")
spd::EnableColumnFilters("Pas de filtre")
spd::AddColumn("Nom","nom",200)
; spd::SetTableFormOrder(#ProduitTab,"produit.nom ASC")
spd::EnableColumnShearch()
;Création de la fenêtre fiche d'un Produit
spd::CreateSheetWindow(#ProduitFic,"produit",180,30,2,"Nouveau produit","Edition d'un produit")
spd::AddComboLinkToSheet("Catégorie","id_categorie","nom",#True)
spd::AddStringToSheet("Nom","nom")
spd::AddStringToSheet("Prix d'achat","pa",spd::#Mask_Number,2," "+Chr(128))
spd::AddStringToSheet("Prix de vente","pv",spd::#Mask_Number,2," "+Chr(128))
spd::AddComboLinkToSheet("Tva","id_tva","taux",#True)
spd::AddComboLinkToSheet("Fournisseur","id_fournisseur","nom",#True)
;}
;-* Facture Form Visualisation
Procedure EventNewFacture()
Debug "ok"
EndProcedure
Procedure$ CalculTotalFacture(IdFacture)
Protected query$,Db,Total.f
Db=OpenDatabase(#PB_Any,"teste.sqlite","","")
If Db=0
MessageRequester("Erreur Data base","Impossible d'ouvrir la base de donnée")
ProcedureReturn
EndIf
query$="SELECT qte,pv,tva FROM lgn_facture WHERE id_facture="+Str(IdFacture)
If DatabaseQuery(Db,query$)=0
MessageRequester("Erreur Data base",DatabaseError())
ProcedureReturn
EndIf
While NextDatabaseRow(Db)
Total+((GetDatabaseLong(Db,0) * GetDatabaseFloat(Db,1)) * (1+(GetDatabaseFloat(Db,2)/100)))
Wend
FinishDatabaseQuery(Db)
CloseDatabase(Db)
ProcedureReturn StrF(Total,2)
EndProcedure
Procedure$ CalculPrixHt(IdLgn)
Protected query$,Db,Total.f
Db=OpenDatabase(#PB_Any,"teste.sqlite","","")
If Db=0
MessageRequester("Erreur Data base","Impossible d'ouvrir la base de donnée")
ProcedureReturn
EndIf
query$="SELECT qte,pv,tva FROM lgn_facture WHERE id="+Str(IdLgn)
If DatabaseQuery(Db,query$)=0
MessageRequester("Erreur Data base",DatabaseError())
ProcedureReturn
EndIf
While NextDatabaseRow(Db)
Total+(GetDatabaseLong(Db,0) * GetDatabaseFloat(Db,1))
Wend
FinishDatabaseQuery(Db)
CloseDatabase(Db)
ProcedureReturn StrF(Total,2)
EndProcedure
Procedure$ CalculPrixTTC(IdLgn)
Protected query$,Db,Total.f
Db=OpenDatabase(#PB_Any,"teste.sqlite","","")
If Db=0
MessageRequester("Erreur Data base","Impossible d'ouvrir la base de donnée")
ProcedureReturn
EndIf
query$="SELECT qte,pv,tva FROM lgn_facture WHERE id="+Str(IdLgn)
If DatabaseQuery(Db,query$)=0
MessageRequester("Erreur Data base",DatabaseError())
ProcedureReturn
EndIf
While NextDatabaseRow(Db)
Total+((GetDatabaseLong(Db,0) * GetDatabaseFloat(Db,1)) * (1+(GetDatabaseFloat(Db,2)/100)))
Wend
FinishDatabaseQuery(Db)
CloseDatabase(Db)
ProcedureReturn StrF(Total,2)
EndProcedure
Procedure EventSelectFacture(Id_facture)
spd::FreeFilters(#FactureForm,1)
spd::AddFilters(#FactureForm,1,"lgn_facture.id_facture="+Str(Id_facture))
; spd::RefreshTable(#FactureForm,0)
spd::RefreshTable(#FactureForm,1)
EndProcedure
spd::CreateCustomForm(#FactureForm,0,0,800,700,"Liste des factures",#MainForm)
spd::AddCustomTable(#FactureForm,"facture",10,10,-1,300,"Liste des factures",100)
spd::SetEventSelectCallback(@EventSelectFacture())
spd::AddCustomColumn("Date","date",190)
spd::AddCustomColumn("Client","id_client",300,"nom")
spd::EnableColumnFilters("Pas de filtre")
spd::AddCustomColumn("Total facture","",200)
spd::SetColumnAlign(spd::#A_Right)
spd::FixExtend(" "+Chr(128))
spd::SetMemorisCalculateProcedure(@CalculTotalFacture())
spd::AddCustomTable(#FactureForm,"lgn_facture",10,320,-1,370,"Détaille de la facture",100)
spd::AddCustomColumn("Qte","qte",80)
spd::SetColumnAlign(spd::#A_Right)
spd::AddCustomColumn("Produit","id_produit",190,"nom")
spd::AddCustomColumn("Prix HT","pv",100)
spd::FixExtend(" "+Chr(128))
spd::SetColumnAlign(spd::#A_Right)
spd::AddCustomColumn("Taux Tva","tva",100)
spd::FixExtend(" "+Chr(37))
spd::SetColumnAlign(spd::#A_Right)
spd::AddCustomColumn("Total HT","",100)
spd::SetColumnAlign(spd::#A_Right)
spd::SetMemorisCalculateProcedure(@CalculPrixHt())
spd::FixExtend(" "+Chr(128))
spd::AddCustomColumn("Total TTC","",120)
spd::SetColumnAlign(spd::#A_Right)
spd::FixExtend(" "+Chr(128))
spd::SetMemorisCalculateProcedure(@CalculPrixTTC())
spd::AddCustomButton("Nouveau",800-90,10,80,30,@EventNewFacture())
;}
;-* Facture Fiche
;}
Procedure Exit()
End
EndProcedure
Procedure OpenPays()
spd::DisplayTableWindow(#PaysTab)
EndProcedure
Procedure OpenLocalite()
spd::DisplayTableWindow(#LocaliteTab)
EndProcedure
Procedure OpenClient()
spd::DisplayTableWindow(#ClientTab)
EndProcedure
Procedure OpenTva()
spd::DisplayTableWindow(#TvaTab)
EndProcedure
Procedure OpenCategorie()
spd::DisplayTableWindow(#CategorieTab)
EndProcedure
Procedure OpenFournisseur()
spd::DisplayTableWindow(#FournisseurTab)
EndProcedure
Procedure OpenProduit()
spd::DisplayTableWindow(#ProduitTab)
EndProcedure
Procedure OpenFacture()
spd::DisplayCustomForm(#FactureForm)
EndProcedure
OpenWindow(#MainForm,0,0,800,600,"Teste Speed Dev",#PB_Window_Maximize|#PB_Window_SystemMenu)
BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
CreateMenu(#MainMenu,WindowID(#MainForm))
MenuTitle("Fichiers annexes")
MenuItem(#M_Pays,"Pays")
MenuItem(#M_Localite,"Localité")
MenuItem(#M_Tva,"Taux de TVA")
MenuItem(#M_Categorie,"Catégorie de produits")
MenuTitle("Fichiers principales")
MenuItem(#M_Client,"Clients")
MenuItem(#M_Fournisseur,"Fournisseurs")
MenuItem(#M_Produit,"Produits")
MenuItem(#M_Facture,"Factures")
BindMenuEvent(#MainMenu,#M_Pays,@OpenPays())
BindMenuEvent(#MainMenu,#M_Localite,@OpenLocalite())
BindMenuEvent(#MainMenu,#M_Client,@OpenClient())
BindMenuEvent(#MainMenu,#M_Tva,@OpenTva())
BindMenuEvent(#MainMenu,#M_Categorie,@OpenCategorie())
BindMenuEvent(#MainMenu,#M_Fournisseur,@OpenFournisseur())
BindMenuEvent(#MainMenu,#M_Produit,@OpenProduit())
BindMenuEvent(#MainMenu,#M_Facture,@OpenFacture())
Repeat:WaitWindowEvent():ForEver