Kassensoftware für eine Kleine Bar V0.4.9 - Beta

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Kassensoftware für eine Kleine Bar V0.4.9 - Beta

Beitrag von Ground0 »

Hallo

Dies ist ein Kleines Projekt welches ich für eine Kollegin schreiben musste sie wolte einfach nur ne art kasse mit der Sie alles eintippen kann damit sie +/- am abend weiss was sie eingenommen hat...

Code: Alles auswählen

;Kleine Kassensoftware, um Einnahmen zu überprüfen.
; Funktioniert mit dem FSC 10er Block. Spezielle Funktionen wird die Maus gebraucht.
;(c)2007 by René Linder
;Mit unterstützung aus dem Pure-Board.
;Changelog:
;****************************
;V0.1
;=======
; - Erste Version
;
;V0.2
;=======
; - Der del Button ist jetzt endlich zu was zu gebrauchen, eintrag Links Markieren und da drauf drücken ;)
; - Textfonts abgeändert.
; - Speichern des Logs geschieht jetzt Mit Datum-Zeit Kenzeichen.
;
;V0.3
;=======
; - Bugfix mit nicht gezeichneten Buttons. (Danke an D@nte)
; - Bugfix mit zu kurzem Stringgadget für die Textgrösse. (Danke an D@nte & edel)
; - Code Optimierung und Flackern behoben (Danke an D@nte & edel)
;
;V0.4
;======
; - Letzer eintrag markieren und löschen geht nicht löscht immer den ersten. Variabelschreibfehler...
;
;V0.4.5 - beta
;======
; - Testversion Vollbild ohne Fontanpassung
;
;V0.4.9 - beta
;======
; - Infobox welches die Fontgrösse zurückgibt entfernt
; - Herunterfahrenmöglichkeit mit Maus geschaffen. (Momentan Windows Only)


Declare ZeichenHinzu(Zeichen$)
Declare Shutdown(flags.l)

Macro MSGLF
  Chr(13)+Chr(10)
EndMacro
Macro Tastenabfragen
  Select Gadget
    Case #Button_Num0
      ZeichenHinzu("0")
    Case #Button_Num1
      ZeichenHinzu("1")
    Case #Button_Num2
      ZeichenHinzu("2")
    Case #Button_Num3
      ZeichenHinzu("3")
    Case #Button_Num4
      ZeichenHinzu("4")
    Case #Button_Num5
      ZeichenHinzu("5")
    Case #Button_Num6
      ZeichenHinzu("6")
    Case #Button_Num7
      ZeichenHinzu("7")
    Case #Button_Num8
      ZeichenHinzu("8")
    Case #Button_Num9
      ZeichenHinzu("9")
    Case #Button_Num00
      ZeichenHinzu("00")
    Case #Button_M
      Artikel$="Mineral"
    Case #Button_W
      Artikel$="Wein / Spirituosen"
    Case #Button_B
      Artikel$="Bier"
    Case #Button_X
      Artikel$=""
      Preis$=""
    Case #Button_Ok
      If Artikel$<>"" And Preis$<>""
        Laenge = Len(Preis$)
        Preis$ = Left(Preis$,Laenge - 2)+"."+Right(Preis$,2)
        AddGadgetItem(#Listview_0,-1,Artikel$+Chr(10)+Preis$)
        Artikel$=""
        Preis$=""
      EndIf
    Case #Button_Z
      Ergebnis = CountGadgetItems(#Listview_0)
      Abschluss$= "Wollen sie Wircklich abschliessen bei "+Str(Ergebnis)+" einträgen?"
      Result = MessageRequester("Tagesabschluss...",Abschluss$,#PB_MessageRequester_YesNo)
      If Result = #PB_MessageRequester_Yes
        Preisende.f=0
        Preisbier.f=0
        PreisWein.f=0
        PreisMineral.f=0
        CreateFile(#File_Log,FormatDate("%dd-%mm-%yyyy--%hh-%ii-%ss", Date())+".txt")
        For Zaehlen = 0 To Ergebnis-1
          Artikelb$ = GetGadgetItemText(#Listview_0,Zaehlen,0)
          Preisb$ = GetGadgetItemText(#Listview_0,Zaehlen,1)
          WriteStringN(#File_Log,"Artikel:" + Artikelb$ +" Preis:"+Preisb$)
          Preisende = Preisende + ValF(Preisb$)
          Select Artikelb$
            Case "Mineral"
              PreisMineral = PreisMineral + ValF(Preisb$)
            Case "Wein / Spirituosen"
              PreisWein = PreisWein + ValF(Preisb$)
            Case "Bier"
              Preisbier = Preisbier + ValF(Preisb$)
          EndSelect
        Next
        WriteStringN(#File_Log,"Endabrechnung:"+StrF(Preisende,2))
        WriteStringN(#File_Log,"Endabrechnung Bier:"+StrF(Preisbier,2))
        WriteStringN(#File_Log,"Endabrechnung Wein / Spirituosen:"+StrF(PreisWein,2))
        WriteStringN(#File_Log,"Endabrechnung Mineral:"+StrF(PreisMineral,2))
        CloseFile(#File_Log)
        MessageRequester("Info","Abschluss bei:"+StrF(Preisende,2)+MSGLF+"Total Bier:"+StrF(Preisbier,2)+MSGLF+"Total Mineral:"+StrF(PreisMineral,2)+MSGLF+"Total Wein / Spirituosen:"+StrF(PreisWein,2))
        ClearGadgetItemList(#Listview_0)
      EndIf
    Case #Button_Del
      Markiert=GetGadgetState(#Listview_0)
      ArtikelM$ = GetGadgetItemText(#Listview_0,Markiert,0)
      PreisM$ = GetGadgetItemText(#Listview_0,Markiert,1)
      Result = MessageRequester("Info","Eintrag Wircklich löschen?"+MSGLF+"Artikel:"+ArtikelM$+" Preis:"+PreisM$,#PB_MessageRequester_YesNo)
      If Result = #PB_MessageRequester_Yes
        RemoveGadgetItem(#Listview_0,Markiert)
      EndIf
    Case #Button_Stdn
      Result = MessageRequester("Abfrage","Herunterfahren?",#PB_MessageRequester_YesNo)
      If Result = #PB_MessageRequester_Yes
        CompilerIf #PB_Compiler_OS = #PB_OS_Windows
          Shutdown(1 )
        CompilerEndIf
      EndIf
  EndSelect
EndMacro
Global Artikel$, Preis$, Status$

Enumeration
  #Window_0
EndEnumeration

ExamineDesktops()
DeskX = DesktopWidth(0)
DeskY = DesktopHeight(0)
OpenWindow(#Window_0, 0, 0, DesktopWidth(0), DesktopHeight(0),"Kasse V0.4 , (c)2007 by René Linder",#PB_Window_BorderLess)

Enumeration
  #File_Log
EndEnumeration

Enumeration
  #Button_0
  #Button_M
  #Button_W
  #Listview_0
  #String_0
  #Button_B
  #Button_Num7
  #Button_Num8
  #Button_Num9
  #Button_Num4
  #Button_Num5
  #Button_Num6
  #Button_Num1
  #Button_Num2
  #Button_Num3
  #Button_Z
  #Button_X
  #Button_Num0
  #Button_Num00
  #Button_Ok
  #Button_Del
  #Button_Stdn
EndEnumeration

If CreateGadgetList(WindowID(#Window_0))
  ButtonX=(DeskX-280)/4-10
  ButtonY=(DeskY-10)/6-10
  ButtonXP=ButtonX+10
  ButtonYP=ButtonY+10
  ;***********************
  ;* Default Fontgrösse Setzen
  FontsX=DeskX/31-1
  ;MessageRequester("Info","Info:"+Str(FontsX))
  If LoadFont(1,"Courier",FontsX)
    SetGadgetFont(#PB_Default, FontID(1))
  EndIf
  
  ButtonGadget(#Button_Del,  280             , 10             , ButtonX, ButtonY, "Del")
  ButtonGadget(#Button_M,    280+ButtonXP    , 10             , ButtonX, ButtonY, "Mineral")
  ButtonGadget(#Button_W,    280+(2*ButtonXP), 10             , ButtonX, ButtonY, "Wein Sprit.", #PB_Button_MultiLine | #PB_ListIcon_AlwaysShowSelection)
  ButtonGadget(#Button_B,    280+(3*ButtonXP), 10             , ButtonX, ButtonY, "Bier")
  ButtonGadget(#Button_Num7, 280             , 10+ButtonYP    , ButtonX, ButtonY, "7")
  ButtonGadget(#Button_Num8, 280+ButtonXP    , 10+ButtonYP    , ButtonX, ButtonY, "8")
  ButtonGadget(#Button_Num9, 280+(2*ButtonXP), 10+ButtonYP    , ButtonX, ButtonY, "9")
  ButtonGadget(#Button_Num4, 280             , 10+(2*ButtonYP), ButtonX, ButtonY, "4")
  ButtonGadget(#Button_Num5, 280+ButtonXP    , 10+(2*ButtonYP), ButtonX, ButtonY, "5")
  ButtonGadget(#Button_Num6, 280+(2*ButtonXP), 10+(2*ButtonYP), ButtonX, ButtonY, "6")
  ButtonGadget(#Button_Num1, 280             , 10+(3*ButtonYP), ButtonX, ButtonY, "1")
  ButtonGadget(#Button_Num2, 280+ButtonXP    , 10+(3*ButtonYP), ButtonX, ButtonY, "2")
  ButtonGadget(#Button_Num3, 280+(2*ButtonXP), 10+(3*ButtonYP), ButtonX, ButtonY, "3")
  ButtonGadget(#Button_Z,    280+(3*ButtonXP), 10+ButtonYP    , ButtonX, 2*ButtonY+10, "Z")
  ButtonGadget(#Button_X,    280+(3*ButtonXP), 10+(3*ButtonYP), ButtonX, ButtonY, "X")
  ButtonGadget(#Button_Num0, 280             , 10+(4*ButtonYP), 10+(2*ButtonX), ButtonY, "0")
  ButtonGadget(#Button_Num00,280+(2*ButtonXP), 10+(4*ButtonYP), ButtonX, ButtonY, "00")
  ButtonGadget(#Button_Ok,   280+(3*ButtonXP), 10+(4*ButtonYP), ButtonX, ButtonY, "Ok")
  ButtonGadget(#Button_Stdn, 280+(3*ButtonXP), 10+(5*ButtonYP), ButtonX, ButtonY, "Ende")
  ListIconGadget(#Listview_0, 10, 10, 260, 5*ButtonYP-10,"Artikel",180,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect )
  StringGadget(#String_0, 10, 10+5*ButtonYP, 280+(3*ButtonXP)-20, ButtonY, "")
EndIf
AddGadgetColumn(#Listview_0, 1, "Preis", 55)
SetGadgetText(#String_0,Artikel$ + ", Preis:" + Preis$)

;************************
;* Gadget Formatierungen

If LoadFont(0,"Courier",10)
  SetGadgetFont(#Listview_0, FontID(0))
EndIf 

AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad0, #Button_Num0)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad1, #Button_Num1)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad2, #Button_Num2)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad3, #Button_Num3)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad4, #Button_Num4)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad5, #Button_Num5)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad6, #Button_Num6)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad7, #Button_Num7)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad8, #Button_Num8)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Pad9, #Button_Num9)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Divide, #Button_M)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Multiply, #Button_W)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Subtract, #Button_B)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Add, #Button_Z)
AddKeyboardShortcut(#Window_0, 110, #Button_Num00)
AddKeyboardShortcut(#Window_0, 255, #Button_X)
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, #Button_Ok)


Repeat
  EventID = WaitWindowEvent()
  PreisA$=Preis$
  ArtikelA$=Artikel$
  If EventID = #PB_Event_Gadget
    Gadget = EventGadget()
    Tastenabfragen
  EndIf
  If EventID = #PB_Event_Menu
    Gadget = EventMenu()
    Tastenabfragen
  EndIf
  
  If EventID = #PB_Event_CloseWindow
    Quit=1
  EndIf
  Delay(0)
  If Artikel$<>ArtikelA$ Or Preis$<>PreisA$
    SetGadgetText(#String_0,Artikel$ + ", Preis:" + Preis$)
  EndIf
Until Quit=1

Procedure Shutdown( flags.l )
  CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    Privileges.TOKEN_PRIVILEGES
    OpenProcessToken_(GetCurrentProcess_(), 40, @hToken)
    Privileges\PrivilegeCount           = 1
    Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
    LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid)
    AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0)
    CloseHandle_(hToken)
    ExitWindowsEx_(flags, 0)
  CompilerEndIf
EndProcedure

Procedure ZeichenHinzu(Zeichen$)
  If Artikel$ = ""
    
  EndIf
  If Artikel$ <> ""
    If Len(Preis$)<5
      If Preis$ = "" And Zeichen$="0"
      Else
        Preis$ = Preis$ + Zeichen$
      EndIf
    EndIf
  EndIf
EndProcedure 
Vieleicht kans ja mal jemand brauchen bzw. erweitern...
Ich werde selbst noch weiter drann schreiben so das ein Ständiges Protokoll gedruckt wird sobald ich ein solchen Protokolldrucker in die Finger Krieg ^^

Gruss G0

Dankeschöns und Changelog im Source.
Zuletzt geändert von Ground0 am 16.05.2007 10:49, insgesamt 7-mal geändert.
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Line 82 : ClearGadgetItemList(#Listview_0)

Ist da glaubig falsch...
Oder ist das gewollt dass wenn ich gefragt werde (#Button_Z) "Wollen Sie wirklich abschliessen" -> "NEIN" die komplette Preisliste gelöscht wird?!
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Ouch nein :(

Wird gleich korrigiert...

Gruss G0
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

O.O

Das ist doch mal ne geile Idee. Benutzt man einfach den eigenen Rechner als Kasse.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Es wird nur leider niemand ein Notebook zum Abrechnen verwenden :,-(
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Naja so flasch ist das nicht, weis nicht ob in Deutschland Winware bekannt ist... aber die haben eine Kassensoftware mit zusätzlichem Protokolldrucker, haben etwa 4 solche Pakete im einsatz und alle laufen mit NB...

Meine Software dient nur dazu einen Einahme überblick zu haben... die hat noch keinerelei normen die sie Als vollwertige kasse machen würden ;)

Achja nebenbei hab jetzt noch ein paar Features hinzugefügt...

Gruss G0
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Soooo....

Pack ma das

Code: Alles auswählen

StringGadget(#String_0, 10, 310, 260, 40, "")
Line : 147 ans Ende deines CreateGadgetList dann werden alle Buttons angezeigt.

Und ich persönlich würd versuchen die Lines : 212 / 213 anders zu lösen ersten mag ich son delay gewurste im Repeat nit und was viel schlimmer is die Schrift flackert ;p
Achja und die FONT is viel zu gross für dein Gadget #String_0 bei Wein & Sprit wird fast nix angezeigt

@Lapi als POS
Warum nit?! Ham auch mehrere Kunden die ihren Laptop als Kassensystem benutzen...
Und wir selber tun das auch wenn wir "on-the-fly" Rechnungen im Wagen drucken müssen...
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Das hat nichts mit persoenlich zu tun , das hat da einfach nichts zu suchen.
SetGadgetText erzeugt ein Event, dadurch wird SetGadgetText wieder
aufgerufen usw. ... eine Endlosschleife.

Rufe SetGadgetText nur dort auf, wo es auch benoetigt wird, Z.B.
bei einem gedrueckten Button.

Wenn du das hast , klappt es auch mit dem Anzeigen deiner
restlichen Button ;-)
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Hallo!

Also es spricht aus meinen Augen nichts dagegen, sowas mitm PC / Laptop zu machen, nur so wie das Programm grad läuft kann ich mir nicht vorstellen, dass es verwendet wird. Die "usability" ist irgendwo bei 0 angelangt, wenn ich zunächst mit der Maus den richtigen Button suchen muss, und dann mit der Tastatur den Preis eingeben muss.

Simon
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Das Programm ist so ausgelegt das bis auf eine Funktion (Mit müh und not läst sich sogar dies noch mit einem Zehnerblock machen) als mit einem Zehner Block gemacht werden kann.

Nur der del Button um einen beliebigen betrag aus der liste zu löschen ist nicht daüf ausgelegt daüf solte die maus verwedet werden.

Grob gesagt tipst du so ein:
Zuerst Artikel (Mineral[/] Wein Spirituosen [*] Bier [-])
Danach den Preis eine beliebige zahl alle stellen incl. bei einem Totalbetrag von 6€ z.B. 600 anschliessend auf die enter Taste so das sich der Betrag richtig als 6.00€ Speichert...

Danach gehts wieder von vorne los...

Ganz simpel...

Gruss G0
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Antworten