class SmsFrame(wx.Dialog):
	"""docstring for SmsFrame"""
	def __init__(self, *arg, **kwargs):
		super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500))
		panel = wx.Panel(self)
		panel.SetBackgroundColour(wx.WHITE)
		wx.StaticText(self, -1, "Penerima", pos=(10, 10))
		self.nomor  = wx.TextCtrl(self, -1, pos=(10, 40), size=(300, 30))
		self.boxmsg = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, pos=(330, 40), size=(330, 350))
		self.send = wx.Button(self,  -1, "Kirim", pos=(330, 400))
		wx.Button(self, -1, "Batal", pos=(420, 400))
		self.pilihb = wx.Button(self, -1 , "Pilih", pos=(510, 400))
		self.pilihb.Bind(wx.EVT_BUTTON, self.pilih)
		self.send.Bind(wx.EVT_BUTTON, self.kirim)

		self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, pos=(10, 100), size=(300,350))
		self.dataOlv.SetColumns([
			ColumnDefn("No", "left", 150, "no_telp"),
			ColumnDefn("Nama", "left", 100, "nama")
			])
		query = ("SELECT nama_pel, no_telp FROM tb_member")
		stmt = ''
		hasil = connector.Execute(query, stmt, 4)
		sql = hasil["Data"]
		data = []
		for i in sql:
			dict = {"no_telp": i[0], "nama": i[1]} 
			data.append(dict)

		self.dataOlv.SetObjects(data)

		self.SetTitle("Sms Gateway")
		self.Show(True)
	def kirim(self, e):
		no_telp = self.nomor.GetValue()
		msg = self.boxmsg.GetValue()
		
		account_sid = "AC3cddc95d61ca0bb2e33dc5f8b48c93e8"
		auth_token = "f8d01a882f7e58b8b87d34fe1c6f1865"

		client = Client(account_sid, auth_token)

		message = client.messages.create(
			        to=no_telp,
			        from_="+15863718428",
			        body=msg
			    )
			    
		tglhari = datetime.datetime.now().date()
		query = ("INSERT INTO tb_sms_terkirim (status, no_telp, tanggal, keterangan) VALUES (%s,%s,%s,%s)")
		stmt = ("terkirim", no_telp, tglhari, msg)
		connector.Execute(query, stmt, 1)
	def pilih(self, e):
		ind = self.dataOlv.GetFirstSelected()
		if ind >= 0 :
			self.item = self.dataOlv.GetItem(ind, 1)
			self.nomor.SetValue(self.item.GetText())
Exemple #2
0
class Problems(wx.Panel):
    def __init__(self, parent, id, ptID):
        wx.Panel.__init__(self, parent, id)

        self.ptID = ptID
        self.problem = ''  #receives the newly selected problem back from AddProblemDialog
        self.probs = []
        for items in prob_find(ptID):
            self.probs.append(
                Problem(items["short_des"], items["prob_date"], items["icd10"],
                        items["problem_number"]))
        self.problist = ObjectListView(self,
                                       -1,
                                       style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.problist.SetColumns([
            ColumnDefn("Problem", "left", 400, valueGetter="short_des"),
            ColumnDefn("First Treated", "left", 100, valueGetter="prob_date"),
            ColumnDefn("ICD-10 Code", "left", 100, valueGetter="icd10")
        ])
        self.problist.rowFormatter = self.rowFormatter
        self.problist.useAlternateBackColors = False
        self.problist.SetObjects(self.probs)
        self.problist.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.problist.Bind(EVT_CELL_EDIT_STARTING, self.HandleCellEditStarting)
        self.problist.Bind(EVT_CELL_EDIT_FINISHED, self.HandleCellEditFinished)

        leftprob = wx.BoxSizer(wx.VERTICAL)
        rightprob = wx.BoxSizer(wx.VERTICAL)
        mainsizer = wx.BoxSizer(wx.HORIZONTAL)

        buttons = (('Add', self.OnNewProb,
                    leftprob), ('Remove', self.OnRemProb, leftprob),
                   ('icd Toggle', self.OnToggle, leftprob))
        for label, handler, sizer in buttons:
            EMR_utilities.buildOneButton(self, self, label, handler, sizer)
        clock = EMR_utilities.makeClock(self, leftprob)

        rightprob.Add(self.problist, 1, wx.EXPAND | wx.TOP, 5)
        mainsizer.Add(leftprob, 0)
        mainsizer.Add(rightprob, 1, wx.EXPAND)
        self.SetSizer(mainsizer)
        listBilledICD(ptID)
        self.myFont = wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD)

    def OnNewProb(self, event):
        #opens dialog window with fields for new problem, does lookup based on description only, updates MySQL,
        #then clears the list and resets the lists with new query for problems
        dlg = AddProblemDialog(self, self, -1, 'New Problem')
        dlg.ProbInstance = self
        dlg.CenterOnScreen()
        if dlg.ShowModal() == wx.ID_OK:
            today = datetime.date.today()
            newICD = EMR_utilities.getData(
                'SELECT icd10 FROM ICD10billable WHERE short_des = "%s";' %
                self.problem)
            query = 'INSERT INTO problems10 SET short_des = "%s", prob_date = "%s", patient_ID = "%s", icd10 = "%s";' % \
                (self.problem, today, self.ptID, newICD[0])
            EMR_utilities.updateData(query)
            self.UpdateList()
        dlg.Destroy()

    def OnRemProb(self, event):
        obj = self.problist.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM problems10 WHERE problem_number = %s;' % items.problem_number
            self.problist.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def UpdateList(self):
        #problems = prob_find(self.ptID)
        self.probs = []
        for items in prob_find(self.ptID):
            self.probs.append(
                Problem(items["short_des"], items["prob_date"], items["icd10"],
                        items["problem_number"]))
        self.problist.SetObjects(self.probs)

    def HandleCellEditStarting(self, event):
        pass

    def HandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE problems10 SET short_des = "%s" WHERE problem_number = %s;' \
                  % (self.problist.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["problem_number"])
        EMR_utilities.updateData(sqlstmt)

    def OnToggle(self, event):
        pass

    def rowFormatter(self, listItem, model):
        qryBill = 'SELECT billable FROM ICD10billable WHERE icd10 = "%s";' % model.icd10
        qryHCC = 'SELECT hcc FROM hcc WHERE icd10 = "%s";' % model.icd10
        resultsBill = EMR_utilities.getData(qryBill)
        resultsHCC = EMR_utilities.getData(qryHCC)
        if resultsBill[0] == '0':
            listItem.SetTextColour(wx.RED)
        else:
            pass
        try:
            if resultsHCC[0] == 'Yes':
                listItem.SetBackgroundColour('Light Grey')
        except:
            pass
Exemple #3
0
class TestObjectListView(wtc.WidgetTestCase):
    """
    Setup of all base tests used for all types of ObjectListView's and do test the
    normal ObjectListView.

    The other ObjectListView tests just override setUp to create the appropriate ListView.
    """
    def setUp(self):
        super(TestObjectListView, self).setUp()

        panel = wx.Panel(self.frame, -1)
        self.objectListView = ObjectListView(panel,
                                             -1,
                                             style=wx.LC_REPORT
                                             | wx.SUNKEN_BORDER)
        sizerPanel = wx.BoxSizer(wx.VERTICAL)
        sizerPanel.Add(self.objectListView, 1, wx.ALL | wx.EXPAND, 4)
        panel.SetSizer(sizerPanel)

        sizerFrame = wx.BoxSizer(wx.VERTICAL)
        sizerFrame.Add(panel, 1, wx.ALL | wx.EXPAND, 4)
        self.frame.SetSizer(sizerFrame)

        loadOLV(self.objectListView)

    def testInitialState(self):
        self.objectListView.ClearAll()
        self.assertEqual(self.objectListView.GetColumnCount(), 0)
        self.assertEqual(self.objectListView.GetItemCount(), 0)
        self.assertEqual(len(self.objectListView.modelObjects), 0)
        loadOLV(self.objectListView)

    def testBasicState(self):
        self.assertEqual(self.objectListView.GetColumnCount(),
                         len(personColumns))
        self.assertEqual(self.objectListView.GetItemCount(), len(persons))

    def testSelectObject(self):
        self.objectListView.SelectObject(persons[0])
        self.assertEqual(self.objectListView.GetSelectedObject(), persons[0])

        males = [x for x in persons if x.sex == "Male"]
        self.objectListView.SelectObjects(males)
        self.assertEqual(set(self.objectListView.GetSelectedObjects()),
                         set(males))

    def testSelectAll(self):
        self.objectListView.SelectAll()
        for i in range(0, self.objectListView.GetItemCount()):
            self.assertTrue(self.objectListView.IsSelected(i))

    def testDeSelectAll(self):
        self.objectListView.SelectAll()
        self.objectListView.DeselectAll()
        for i in range(0, self.objectListView.GetItemCount()):
            self.assertFalse(self.objectListView.IsSelected(i))

    def testGetSelectedObject(self):
        self.objectListView.SelectAll()
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

        self.objectListView.DeselectAll()
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

        self.objectListView.SelectObject(persons[0])
        self.assertEqual(self.objectListView.GetSelectedObject(), persons[0])

        self.objectListView.SelectObject(persons[1], False)
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

    def testGetSelectedObjects(self):
        self.objectListView.SelectAll()
        self.assertEqual(set(self.objectListView.GetSelectedObjects()),
                         set(persons))

        self.objectListView.SelectObject(persons[0])
        self.assertEqual(len(self.objectListView.GetSelectedObjects()), 1)

        self.objectListView.DeselectAll()
        self.assertEqual(len(self.objectListView.GetSelectedObjects()), 0)

    def testRefresh(self):
        rowIndex = 1
        primaryColumn = self.objectListView.GetPrimaryColumnIndex()
        person = self.objectListView[rowIndex]
        nameInList = self.objectListView.GetItem(rowIndex,
                                                 primaryColumn).GetText()
        self.assertEqual(nameInList, person.name)

        person.name = "Some different name"
        self.assertNotEqual(nameInList, person.name)

        self.objectListView.RefreshObject(person)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex, primaryColumn).GetText(),
            person.name)
        person.name = nameInList

    def testSorting(self):
        self.objectListView.SortBy(0, False)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Zoe Meliko")
        self.objectListView.SortBy(0, True)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "ae cummings")
        self.objectListView.SortBy(2, False)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Ginger Hawk")
        self.objectListView.SortBy(2, True)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Ian Janide")

    def testColumnResizing(self):
        widths = [
            self.objectListView.GetColumnWidth(i)
            for i in range(len(self.objectListView.columns))
        ]
        self.frame.SetSize(self.frame.GetSize() + (100, 100))
        self.objectListView.Layout()

        # The space filling columns should have increased in width, but the
        # others should be the same
        for (colIndex, oldWidth) in enumerate(widths):
            if self.objectListView.columns[colIndex].isSpaceFilling:
                self.assertTrue(
                    oldWidth < self.objectListView.GetColumnWidth(colIndex))
            else:
                self.assertEqual(oldWidth,
                                 self.objectListView.GetColumnWidth(colIndex))

    def testEditing(self):
        rowIndex = 1
        primaryColumnIndex = self.objectListView.GetPrimaryColumnIndex()
        self.objectListView.cellEditMode = ObjectListView.CELLEDIT_F2ONLY
        # self.objectListView.SortBy(primaryColumnIndex+1)

        originalName = self.objectListView[rowIndex].name
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            originalName)
        self.objectListView.DeselectAll()
        self.objectListView.SetItemState(
            rowIndex, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED,
            wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)

        # Fake an F2, change the value of the edit, and then fake a Return to
        # commit the change
        evt = wx.KeyEvent(wx.EVT_CHAR.evtType[0])
        evt.m_keyCode = wx.WXK_F2
        self.objectListView._HandleChar(evt)
        self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex)
        self.objectListView.cellEditor.SetValue("new name for X")
        self.objectListView.FinishCellEdit()
        evt.m_keyCode = wx.WXK_RETURN
        self.objectListView._HandleChar(evt)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            "new name for X")

        # Put the original value back
        evt.m_keyCode = wx.WXK_F2
        self.objectListView._HandleChar(evt)
        self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex)
        self.objectListView.cellEditor.SetValue(originalName)
        self.objectListView.FinishCellEdit()
        evt.m_keyCode = wx.WXK_RETURN
        self.objectListView._HandleChar(evt)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            originalName)

    def testLackOfCheckboxes(self):
        self.objectListView.InstallCheckStateColumn(None)

        firstObject = self.objectListView[0]
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (None, False))

        self.assertEqual(self.objectListView.GetCheckedObjects(), list())

        self.objectListView.Check(firstObject)
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (None, False))

    def testCreateCheckStateColumn(self):
        self.objectListView.InstallCheckStateColumn(None)

        firstObject = self.objectListView[0]
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (False, None))

        self.objectListView.CreateCheckStateColumn()
        self.objectListView.Check(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)

    def testAutoCheckboxes(self):
        col = ColumnDefn("Check")
        self.objectListView.AddColumnDefn(col)
        self.assertTrue(col.checkStateGetter is None)
        self.assertTrue(col.checkStateSetter is None)

        self.objectListView.InstallCheckStateColumn(col)
        self.assertTrue(col.checkStateGetter is not None)
        self.assertTrue(col.checkStateSetter is not None)

        object = self.objectListView[0]
        self.assertEqual(self.objectListView.IsChecked(object), False)

        self.objectListView.Check(object)
        self.assertEqual(self.objectListView.IsChecked(object), True)

    def testCheckboxes(self):
        def myGetter(modelObject):
            return getattr(modelObject, "isChecked", False)

        def mySetter(modelObject, newValue):
            modelObject.isChecked = newValue

        self.objectListView.SetImageLists()
        col = ColumnDefn("Check",
                         checkStateGetter=myGetter,
                         checkStateSetter=mySetter)
        self.objectListView.AddColumnDefn(col)
        self.assertEqual(self.objectListView.checkStateColumn, col)

        firstObject = self.objectListView[1]
        lastObject = self.objectListView[4]
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

        self.objectListView.Check(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

        self.objectListView.Check(lastObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)
        self.assertEqual(self.objectListView.IsChecked(lastObject), True)
        if not isinstance(self.objectListView, VirtualObjectListView):
            self.assertEqual(set(self.objectListView.GetCheckedObjects()),
                             set([firstObject, lastObject]))

        self.objectListView.Uncheck(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), True)

        self.objectListView.ToggleCheck(lastObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

    def testNoAlternateColours(self):
        # When there is no alternate colors, each row's background colour
        # should be invalid
        self.objectListView.useAlternateBackColors = False
        self.objectListView.RepopulateList()
        bkgdColours = [
            self.getBackgroundColour(i)
            for i in range(self.objectListView.GetItemCount())
        ]
        self.assertFalse(
            self.objectListView.oddRowsBackColor in set(bkgdColours))
        self.assertFalse(
            self.objectListView.evenRowsBackColor in set(bkgdColours))

    def testAlternateColours(self):
        self.objectListView.useAlternateBackColors = True
        self.objectListView.RepopulateList()
        for i in range(self.objectListView.GetItemCount()):
            if i & 1:
                self.assertEqual(self.objectListView.oddRowsBackColor,
                                 self.getBackgroundColour(i))
            else:
                self.assertEqual(self.objectListView.evenRowsBackColor,
                                 self.getBackgroundColour(i))

    def getBackgroundColour(self, i):
        # There is no consistent way to get the background color of an item (i.e. one that
        # works on both normal and virtual lists) so we have to split this into a method
        # so we can change it for a virtual list
        return self.objectListView.GetItemBackgroundColour(i)

    def testEmptyListMsg(self):
        self.objectListView.SetObjects(None)
        self.assertTrue(self.objectListView.stEmptyListMsg.IsShown())

        self.objectListView.SetObjects(persons)
        self.assertFalse(self.objectListView.stEmptyListMsg.IsShown())

    def testFilteringHead(self):
        self.objectListView.SetFilter(Filter.Head(1))
        self.objectListView.SetObjects(persons)
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0],
                         persons[0])

        self.objectListView.SetFilter(None)

    def testFilteringTail(self):
        self.objectListView.SetFilter(Filter.Tail(1))
        self.objectListView.SetObjects(persons)
        # The group list will have a group header at row 0 so skip it
        if isinstance(self.objectListView, GroupListView):
            firstDataIndex = 1
        else:
            firstDataIndex = 0
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0],
                         persons[-1])

        self.objectListView.SetFilter(None)

    def testFilteringPredicate(self):
        males = [x for x in persons if x.sex == "Male"]
        self.objectListView.SetFilter(
            Filter.Predicate(lambda person: person.sex == "Male"))
        self.objectListView.SetSortColumn(personColumns[-1])
        self.objectListView.SetObjects(persons)

        self.assertEqual(set(self.objectListView.GetFilteredObjects()),
                         set(males))

        self.objectListView.SetFilter(None)

    def testFilteringTextSearch(self):
        containsF = [
            x for x in persons
            if "f" in x.sex.lower() or "f" in x.name.lower()
        ]

        self.objectListView.SetFilter(
            Filter.TextSearch(self.objectListView, text="f"))
        self.objectListView.SetObjects(persons)
        self.assertEqual(set(self.objectListView.GetFilteredObjects()),
                         set(containsF))

        self.objectListView.SetFilter(None)

    def testFilteringChain(self):
        filterMale = Filter.Predicate(lambda person: person.sex == "Male")
        filterContainsF = Filter.TextSearch(self.objectListView, text="f")
        self.objectListView.SetFilter(Filter.Chain(filterMale,
                                                   filterContainsF))
        self.objectListView.SetObjects(persons)
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0].name,
                         "Eric Fandango")

        self.objectListView.SetFilter(None)
Exemple #4
0
class Prevention(wx.Panel):
    def __init__(self, parent, id, ptID):
        wx.Panel.__init__(self, parent, id)

        self.ptID = ptID
        prevents = prevent_find(ptID)
        self.preventList = ObjectListView(self,
                                          -1,
                                          style=wx.LC_REPORT
                                          | wx.SUNKEN_BORDER)
        self.preventList.SetColumns([
            ColumnDefn("Name",
                       "left",
                       250,
                       valueGetter="prevent_name",
                       isEditable=True),
            ColumnDefn("Last Date",
                       "center",
                       100,
                       valueGetter="date",
                       isEditable=True),
            ColumnDefn("Result",
                       "center",
                       300,
                       valueGetter="reason",
                       isEditable=True),
            ColumnDefn("Interval",
                       "center",
                       60,
                       valueGetter="p_interval",
                       isEditable=True),
            ColumnDefn("Notes",
                       "left",
                       500,
                       valueGetter="notes",
                       isEditable=True),
        ])
        self.preventList.SetObjects(prevents)
        self.preventList.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.preventList.Bind(EVT_CELL_EDIT_STARTING,
                              self.HandleCellEditStarting)
        self.preventList.Bind(EVT_CELL_EDIT_FINISHED,
                              self.preventListHandleCellEditFinished)

        mainSizer = wx.BoxSizer(wx.VERTICAL)

        vaccines = vaccine_find(ptID)
        self.vaccineList = ObjectListView(self,
                                          -1,
                                          style=wx.LC_REPORT
                                          | wx.SUNKEN_BORDER)
        self.vaccineList.SetColumns([
            ColumnDefn("Vaccine",
                       "left",
                       150,
                       valueGetter="vaccine",
                       isEditable=True),
            ColumnDefn("Dates Given",
                       "left",
                       600,
                       valueGetter="dates",
                       isEditable=True),
            ColumnDefn("Notes",
                       "left",
                       500,
                       valueGetter="notes",
                       isEditable=True),
        ])
        self.vaccineList.SetObjects(vaccines)
        self.vaccineList.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.vaccineList.Bind(EVT_CELL_EDIT_STARTING,
                              self.HandleCellEditStarting)
        self.vaccineList.Bind(EVT_CELL_EDIT_FINISHED,
                              self.vaccineListHandleCellEditFinished)

        #Build the add/delete buttons for each list
        preventSizer = wx.BoxSizer(wx.HORIZONTAL)
        vaccineSizer = wx.BoxSizer(wx.HORIZONTAL)
        prevButtons = (('Add', self.OnAddPrevent), ('Delete',
                                                    self.OnDelPrevent))
        for label, handler in prevButtons:
            EMR_utilities.buildOneButton(self, self, label, handler,
                                         preventSizer)
        vacButtons = (('Add', self.OnAddVaccine),
                      ('Delete', self.OnDelVaccine), ('Print',
                                                      self.OnPrintVaccines))
        for label, handler in vacButtons:
            EMR_utilities.buildOneButton(self, self, label, handler,
                                         vaccineSizer)


#Set the sizers	that have not already been set
        self.preventTitle = wx.StaticText(self, -1, 'Health Maintenance')
        self.vaccineTitle = wx.StaticText(self, -1, 'Vaccines')
        titlefont = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        self.preventTitle.SetFont(titlefont)
        self.vaccineTitle.SetFont(titlefont)
        preventSizer.Add(self.preventTitle, 0, wx.ALIGN_CENTER | wx.ALL, 5)
        mainSizer.Add(preventSizer)
        mainSizer.Add(self.preventList, 1, wx.EXPAND | wx.TOP, 3)
        mainSizer.Add((15, -1))
        vaccineSizer.Add(self.vaccineTitle, 0, wx.ALIGN_CENTER | wx.ALL, 5)
        mainSizer.Add(vaccineSizer)
        mainSizer.Add(self.vaccineList, 1, wx.EXPAND | wx.TOP, 3)
        mainSizer.Add((-1, 5))

        self.SetSizer(mainSizer)
        self.Centre()
        self.Show(True)

    #def getKey(item):
    #	return item['vaccine']

    def OnPrintVaccines(self, event):
        obj = self.vaccineList.GetObjects()
        string = ''
        v = []
        for items in obj:
            v.append((items['vaccine'], items['dates'], items['notes']))
        for things in sorted(v):
            string = '%s     %s     %s\n' % \
                            (things[1], things[0], things[2]) + string

        form_lt = "%s/EMR_outputs/Vaccines.html" % settings.LINUXPATH
        form_at = "%s/EMR_outputs/Vaccines.html" % settings.APPLEPATH
        form_wt = "%s\EMR_outputs\Vaccines.html" % settings.WINPATH
        form = open(EMR_utilities.platformText(form_lt, form_at, form_wt), 'r')
        s = form.read()
        form.close()
        dem_data = EMR_utilities.getDictData(
            'SELECT * FROM demographics WHERE patient_ID = %s;' % self.ptID)
        dem_data['string'] = string
        dem_data['date'] = EMR_utilities.dateToday()
        dem_data['name_address'] = EMR_formats.format_address(dem_data)
        script_text = s % (dem_data)
        printer = EMR_utilities.Printer()
        printer.PreviewText(script_text)
        '''path_lt = "%s/EMR_outputs/%s/Orders" % (settings.LINUXPATH, self.ptID)
	path_at = "%s/EMR_outputs/%s/Orders" % (settings.APPLEPATH, self.ptID)
	path_wt = "%s\EMR_outputs\%s\Orders" % (settings.WINPATH, self.ptID)
	path = EMR_utilities.platformText(path_lt, path_at, path_wt)
	filename = "%s\script%s.html" % (path, EMR_utilities.dateToday(t='yes'))
	f = open(filename, 'w')
	f.write(script_text)
	f.close()'''

    def HandleCellEditStarting(self, event):
        pass

    def vaccineListHandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE vaccines SET %s = "%s" WHERE vaccine_number = %s;' \
                  % (self.vaccineList.columns[event.subItemIndex].valueGetter,
                     self.vaccineList.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["vaccine_number"])
        EMR_utilities.updateData(sqlstmt)

    def preventListHandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE prevents2 SET %s = "%s" WHERE prevent_number = %s;' \
                  % (self.preventList.columns[event.subItemIndex].valueGetter,
                     self.preventList.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["prevent_number"])
        EMR_utilities.updateData(sqlstmt)

    def OnAddPrevent(self, event):
        prev = wx.GetTextFromUser('What is the new health maintance item?',
                                  'Health Maintenance')
        if prev == "": pass
        else:
            note = wx.GetTextFromUser('Any notes?', 'Notes')
            query = 'INSERT INTO prevents2 SET prevent_name = "%s", date = "%s", reason = "normal", p_interval = 1, notes = "%s", patient_ID = %s;' % \
         (prev, EMR_utilities.dateToday(), note, self.ptID)
            EMR_utilities.updateData(query)
            self.UpdatePrevents()

    def OnAddVaccine(self, event):
        vac = wx.GetTextFromUser('What is the new vaccine?', 'Vaccines')
        dates = wx.GetTextFromUser('What date(s) was vaccine given?',
                                   'Vaccines')
        if vac == "": pass
        else:
            note = wx.GetTextFromUser('Any notes?', 'Notes')
            query = 'INSERT INTO vaccines SET vaccine = "%s", dates = "%s", notes = "%s", patient_ID = %s;' % \
          (vac, dates, note, self.ptID)
            EMR_utilities.updateData(query)
            self.UpdateVaccines()

    def OnDelPrevent(self, event):
        obj = self.preventList.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM prevents2 WHERE prevent_number = %s;' % items[
                'prevent_number']
            self.preventList.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def OnDelVaccine(self, event):
        obj = self.vaccineList.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM vaccines WHERE vaccine_number = %s;' % items[
                'vaccine_number']
            self.vaccineList.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def UpdatePrevents(self):
        prevents = prevent_find(self.ptID)
        self.preventList.SetObjects(prevents)

    def UpdateVaccines(self):
        vac = vaccine_find(self.ptID)
        self.vaccineList.SetObjects(vac)
Exemple #5
0
class TabTwo(wx.Panel):
    """docstring for TabTwo"""
    capture = ''

    def __init__(self, parent, capture=capture):
        wx.Panel.__init__(self, parent)

        self.photoDefault = "images/no_webcam.jpg"
        self.pathp = ''

        #pic = wx.Image(self.photoDefault, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        #wx.StaticBitmap(self, -1, pic, (50,20), (1000,300))
        bitmap = wx.Bitmap(self.photoDefault)
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))  #50, 420

        self.text = wx.StaticText(self, -1, "B805WYN", (790, 280))
        font = wx.Font(20, wx.DECORATIVE, wx.NORMAL, wx.NORMAL)
        self.text.SetFont(font)

        #Button
        self.btnOpenFile = wx.Button(self,
                                     -1,
                                     "Open File",
                                     pos=(720, 320),
                                     size=(120, 30))
        self.btnStart = wx.Button(self,
                                  -1,
                                  "Start",
                                  pos=(720, 350),
                                  size=(120, 30))
        self.btnStop = wx.Button(self,
                                 -1,
                                 "Stop",
                                 pos=(720, 350),
                                 size=(120, 30))
        self.btnRecog = wx.Button(self,
                                  -1,
                                  "Recognize",
                                  pos=(720, 380),
                                  size=(120, 30))
        self.btntambahData = wx.Button(self,
                                       -1,
                                       "Tambah Data",
                                       pos=(850, 320),
                                       size=(120, 30))
        self.btnKepen = wx.Button(self,
                                  -1,
                                  "Tambah Kepentingan",
                                  pos=(850, 350),
                                  size=(120, 30))

        #

        #event
        self.btnStop.Hide()
        self.btnStart.Bind(wx.EVT_BUTTON, self.start)
        self.btnStop.Bind(wx.EVT_BUTTON, self.stop)
        self.btnOpenFile.Bind(wx.EVT_BUTTON, self.openFile)
        self.btnRecog.Bind(wx.EVT_BUTTON, self.recognition)
        self.btnKepen.Bind(wx.EVT_BUTTON, self.kepentingan)
        self.btntambahData.Bind(wx.EVT_BUTTON, self.tambahData)

        #bx = wx.StaticBox(self, 1, pos=(690,9), size=(300, 140))
        #customize
        self.btnStart.SetBitmap(wx.Bitmap("images/rec.png"))
        self.btnStop.SetBitmap(wx.Bitmap("images/stop.png"))
        self.btnOpenFile.SetBitmap(wx.Bitmap("images/folder(1).png"))
        self.btnRecog.SetBitmap(wx.Bitmap("images/eye-button.png"))
        #camera setup

        #videoWarper = wx.StaticBox(self, label="Video",size=(400,300))
        #videoBoxSizer = wx.StaticBoxSizer(videoWarper, wx.VERTICAL)

        parent.Centre()
        self.Show()

        #hasil Recog
        text = wx.StaticText(self, -1, "Nomor Plat     :", (1020, 30))
        text = wx.StaticText(self, -1, "Daerah             :", (1020, 50))

        self.plateNumberPlat = wx.StaticText(self, -1, "Unknown", (1140, 30))
        daerahPlat = wx.StaticText(self, -1, "Unknown", (1140, 50))

        #-----Database------
        text = wx.StaticText(self, -1, "Name               :", (1020, 70))
        text = wx.StaticText(self, -1, "Date Added     :", (1020, 90))
        text = wx.StaticText(self, -1, "Latest Visit       :", (1020, 110))
        text = wx.StaticText(self, -1, "Visit                  :", (1020, 130))
        text = wx.StaticText(self, -1, "Kepentingan   :", (1020, 150))
        text = wx.StaticText(self, -1, "Tanggal Rekom  :", (1020, 150))

        self.nameDatabaseRecog = wx.StaticText(self, -1, "Unknown", (1140, 70))
        self.dateAddedRecog = wx.StaticText(self, -1, "Unknown", (1140, 90))
        self.latestVisitDatabaseRecog = wx.StaticText(self, -1, "Unknown",
                                                      (1140, 110))
        self.visitDatabaseRecog = wx.StaticText(self, -1, "Unknown",
                                                (1140, 130))
        self.kepentinganText = wx.StaticText(self, -1, "Unknown", (1140, 150))
        self.rekomendasiText = wx.StaticText(self, -1, "Unknown", (1140, 170))

        #end Recog
        #list Recognition
        self.dataOlv = ObjectListView(self,
                                      -1,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                      pos=(50, 20),
                                      size=(950, 250))
        #list candidates
        self.dataOlvCand = ObjectListView(self,
                                          -1,
                                          style=wx.LC_REPORT
                                          | wx.SUNKEN_BORDER,
                                          pos=(1020, 270),
                                          size=(310, 200))
        self.dataMobilTampil = []
        #List Credit Digunakan
        labelCredit = wx.StaticText(self,
                                    -1,
                                    "Credit 2000 / Month",
                                    pos=(1020, 503))
        self.dataOlvCre = ObjectListView(self,
                                         -1,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                         pos=(1020, 520),
                                         size=(320, 150))
        self.dataCredit = []
        self.btnRecog.Disable()

    def tambahData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
        print(ind)
        app = data_kendaraan.data_Kendaraan(self)
        app.Show(True)

    def kepentingan(self, e):
        hasil = kp.KepentinganFrame(self)
        hasil.Show(True)

    def start(self, e):
        self.capture = cv2.VideoCapture(0)
        videoFrame = wx.Panel(self, -1, pos=(50, 280), size=(640, 380))
        ShowCapture(videoFrame, self.capture)
        self.btnStart.Hide()
        self.btnStop.Show()
        self.btnRecog.Enable()
        self.pathp = ''

    def stop(self, e):
        self.btnStart.Show()
        self.btnStop.Hide()
        bitmap = wx.Bitmap(self.photoDefault)
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))
        self.btnRecog.Disable()

        self.capture.release()

    def openFile(self, e):
        openFileDialog = wx.FileDialog(self, "Open", "", "",
                                       "Image File (*.jpg, *.png)|*.jpg",
                                       wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)

        openFileDialog.ShowModal()
        #Pake If kjklnjaksjdhkdj
        self.pathp = openFileDialog.GetPath()
        bitmap = wx.Bitmap(openFileDialog.GetPath())
        bitmap = scale_bitmap(bitmap, 640, 380)
        control = wx.StaticBitmap(self, -1, bitmap)
        control.SetPosition((50, 280))
        openFileDialog.Destroy()
        self.btnRecog.Enable()

    def recognition(self, e):

        print(self.pathp)
        if self.pathp == '':
            self.ret, self.image = self.capture.read()
            print(self.ret)
            print(self.image)
            if os.path.exists("itemp\plate\plat1.jpg"):
                self.imageName = "itemp\plate\plat_{0}.jpg".format(
                    int(time.time()))
                cv2.imwrite(self.imageName, self.image)
                self.jsonName = "itemp\json\json_{0}.json".format(
                    int(time.time()))

            else:
                self.imageName = "itemp\plate\plat1.jpg"
                cv2.imwrite(self.imageName, self.image)
                self.jsonName = "itemp\json\json1.json"

            bitmap = wx.Bitmap(self.imageName)
            bitmap = scale_bitmap(bitmap, 280, 200)
            control = wx.StaticBitmap(self, -1, bitmap)
            control.SetPosition((720, 420))
            IMAGE_PATH = self.imageName
        else:
            IMAGE_PATH = self.pathp
        SECRET_KEY = 'sk_42b18388bc96def5ad015425'
        with open(IMAGE_PATH, 'rb') as image_file:
            img_base64 = base64.b64encode(image_file.read())
        url = 'https://api.openalpr.com/v2/recognize_bytes?recognize_vehicle=1&country=id&secret_key=%s' % (
            SECRET_KEY)
        try:
            r = requests.post(url, data=img_base64)
        except Exception as e:

            print("Error: Kendaraan Tidak Ditemukan")
            return
        data_file = json.dumps(r.json(), indent=2)

        data = json.loads(str(data_file))
        hasil = data['results'][0]
        tanggalini = datetime.datetime.now()
        query = (
            "SELECT keterangan2, rekomendasi FROM tb_kunjungan WHERE plate = %s and tgl_kunjungan = %s"
        )
        stmt = (hasil['plate'], "{0}".format(str(tanggalini)[:10]))
        datarek = connector.Execute(query, stmt, 4)
        hasilrek = datarek["Data"]
        print(hasilrek)
        if len(hasilrek) > 0:
            self.kepentinganText.SetLabel(str(hasilrek[0][0]))
            self.rekomendasiText.SetLabel(str(hasilrek[0][1]))
        else:
            self.kepentinganText.SetLabel("Belum Terdaftar")
            self.rekomendasiText.SetLabel("Belum Terdaftar")

        query = ("SELECT * FROM tb_member WHERE plate IN (%s)")
        stmt = (hasil['plate'])
        hasilSql = connector.Execute(query, stmt, 3)
        dataSql = hasilSql['Data']
        print(dataSql)
        if len(dataSql) > 0:
            self.dict = {
                "camera": "Camera 1",
                "time": str(datetime.datetime.now().time()),
                "merk": dataSql[0][5],
                "perusahaan": dataSql[0][6],
                "model": dataSql[0][7],
                "warna": dataSql[0][4],
                "tahun": dataSql[0][8],
                "plate": hasil['plate']
            }
        else:
            self.plateMobil = hasil['plate']
            self.warnaMobil = hasil["vehicle"]['color'][0]['name'].upper()
            self.merkMobil = hasil["vehicle"]['make_model'][0]['name'].upper(),
            self.perusahaanMobil = hasil["vehicle"]['make'][0]['name'].upper()
            self.tahunMobil = str(hasil["vehicle"]['year'][0]['name'])
            self.modelMobil = hasil["vehicle"]['body_type'][0]['name'].upper()
            self.dict = {
                "camera": "Camera 1",
                "time": str(datetime.datetime.now().time()),
                "merk": self.merkMobil,
                "perusahaan": self.perusahaanMobil,
                "model": self.modelMobil,
                "warna": self.warnaMobil,
                "tahun": self.tahunMobil,
                "plate": self.plateMobil
            }

        self.plateNumberPlat.SetLabel(hasil['plate'])
        self.text.SetLabel(hasil['plate'])
        if len(dataSql) > 0:
            tanggal = str(dataSql[0][2])
            self.nameDatabaseRecog.SetLabel(dataSql[0][1])
            self.dateAddedRecog.SetLabel("{0}".format(tanggal[:10]))
            self.latestVisitDatabaseRecog.SetLabel(str(dataSql[0][11]))

            query = ("SELECT * FROM tb_kunjungan WHERE plate IN (%s)")
            stmt = (hasil['plate'])
            jmlSql = connector.Execute(query, stmt, 3)
            datajmlh = jmlSql['Data']
            self.visitDatabaseRecog.SetLabel(str(len(datajmlh) + 1))

            query = (
                "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)"
            )
            stmt = (dataSql[0][0], datetime.datetime.now())
            hasilSql = connector.Execute(query, stmt, 1)

            query = ("UPDATE tb_member SET latest_visit = %s WHERE plate = %s")
            stmt = (datetime.datetime.now(), dataSql[0][0])
            hasilSql = connector.Execute(query, stmt, 1)

        else:
            self.nameDatabaseRecog.SetLabel("Tidak Terdaftar")
            self.dateAddedRecog.SetLabel("Tidak Terdaftar")
            self.latestVisitDatabaseRecog.SetLabel("Hari Ini")
            self.visitDatabaseRecog.SetLabel("1")

            query = (
                "INSERT INTO tb_kunjungan (plate, tgl_kunjungan) VALUES (%s, %s)"
            )
            stmt = (hasil['plate'], datetime.datetime.now())
            hasilSql = connector.Execute(query, stmt, 1)

        candidates = hasil['candidates']
        e = []
        for i in candidates:
            Candidates = {
                'confidences': str(int(i['confidence'])) + " " + "%",
                'plate': i['plate']
            }
            e.append(Candidates)

        self.dataOlv.SetColumns([
            ColumnDefn("Camera", "left", 100, "camera"),
            ColumnDefn("Time", "left", 100, "time"),
            ColumnDefn("Plate", "left", 100, "plate"),
            ColumnDefn("Merk", "left", 100, "merk"),
            ColumnDefn("Perusahaan", "left", 102, "perusahaan"),
            ColumnDefn("Model", "left", 100, "model"),
            ColumnDefn("Warna", "left", 100, "warna"),
            ColumnDefn("Tahun", "left", 100, "tahun")
        ])

        self.dataMobilTampil.append(self.dict)
        self.dataOlv.SetObjects(self.dataMobilTampil)

        self.dataOlvCand.SetColumns([
            ColumnDefn("Plate", 'left', 100, 'plate'),
            ColumnDefn("confidence", 'left', 100, 'confidences')
        ])
        self.dataOlvCand.SetObjects(e)
        credit = {
            "credit": 2000,
            "digunakan": data['credits_monthly_used'],
            "sisa": 2000 - int(data['credits_monthly_used'])
        }
        self.dataOlvCre.SetColumns([
            ColumnDefn("Credit", "left", 100, "credit"),
            ColumnDefn("Digunakan", "left", 100, "digunakan"),
            ColumnDefn("Sisa", "left", 100, "sisa")
        ])
        self.dataCredit.append(credit)
        self.dataOlvCre.SetObjects(self.dataCredit)
Exemple #6
0
class Vitals(wx.Panel):
    def __init__(self, parent, ID, PtID):
	wx.Panel.__init__(self, parent, ID)
	#I need some way to set the max size for the grid
	self.PtID = PtID
	self.qry = "SELECT * FROM vitals WHERE patient_ID = %s;" % (str(self.PtID))
	self.vitals = list(EMR_utilities.getAllDictData(self.qry))
	self.textctrl = {}
	self.vitalsList = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
	self.vitalsList.SetColumns([
            ColumnDefn("Weight", "center", 80, valueGetter="wt"),
            ColumnDefn("Height", "center", 80, valueGetter="ht"),
            ColumnDefn("HC", "center", 80, valueGetter="hc"),
            ColumnDefn("Systolic", "center", 80, valueGetter="sBP"),
            ColumnDefn("Diastolic", "center", 80, valueGetter="dBP"),
            ColumnDefn("Pulse", "center", 80, valueGetter="pulse"),
            ColumnDefn("Resp", "center", 80, valueGetter="resp"),
            ColumnDefn("O2 Sat", "center", 80, valueGetter="sats"),
	    ColumnDefn("Temp", "center", 80, valueGetter="temp"),
	    ColumnDefn("Date", "center", 120, valueGetter="vitals_date")
            ])
	self.vitalsList.SetObjects(self.vitals)
	self.vitalsList.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
	self.vitalsList.Bind(EVT_CELL_EDIT_STARTING, self.HandleCellEditStarting)
	self.vitalsList.Bind(EVT_CELL_EDIT_FINISHED, self.listHandleCellEditFinished)
	self.vitalsbox = wx.BoxSizer(wx.HORIZONTAL)
	self.vitalsbox.Add(self.vitalsList, 1, wx.EXPAND |wx.ALL, 20)
	self.mainsizer = wx.BoxSizer(wx.VERTICAL)
	border = wx.StaticBox(self, -1, 'Add Vitals')
	f = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.LIGHT)
	border.SetFont(f)
	addvitals = wx.StaticBoxSizer(border, wx.HORIZONTAL)
	controls = [('Wt', 40), ('Ht', 30), ('HC', 30), ('Temp', 40), ('SBP', 40), ('DBP', 40), ('Pulse', 40), ('Resp', 30), \
		    ('O2 Sats', 30), ('Date', 80)]
	for label, size in controls:
	    EMR_utilities.buildOneTextCtrl(self, label, size, addvitals)
	self.textctrl['Date'].SetValue(str(EMR_utilities.dateToday()))
	self.mainsizer.Add(self.vitalsbox)
	self.mainsizer.Add(addvitals, 0, wx.ALL, 20)
	buttonAdd = EMR_utilities.buildOneButton(self, self, 'Update Vitals', self.UpdateVitals)
	buttonDel = EMR_utilities.buildOneButton(self, self, 'Delete Vitals', self.DeleteVitals)
	self.mainsizer.Add(buttonAdd, 0, wx.ALIGN_LEFT|wx.ALIGN_TOP|wx.LEFT|wx.TOP, 20)
	self.mainsizer.Add(buttonDel, 0, wx.ALIGN_LEFT|wx.ALIGN_TOP|wx.LEFT|wx.TOP, 20)
	self.SetSizer(self.mainsizer)

    def HandleCellEditStarting(self, event):
        pass

    def listHandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE vitals SET %s = "%s" WHERE vitals_number = %s;' \
                  % (self.vitalsList.columns[event.subItemIndex].valueGetter,
                     self.vitalsList.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["vitals_number"])
        EMR_utilities.updateData(sqlstmt)

    def UpdateVitals(self, event):
	updateqry = 'INSERT INTO vitals SET wt = "%s", ht = "%s", hc = "%s", temp = "%s", sBP = "%s", dBP = "%s", \
	      pulse = "%s", resp = "%s", sats = "%s", vitals_date = "%s", patient_ID = %s;' % (self.textctrl['Wt'].GetValue(), 
	      self.textctrl['Ht'].GetValue(), self.textctrl['HC'].GetValue(), self.textctrl['Temp'].GetValue(), 
	      self.textctrl['SBP'].GetValue(), self.textctrl['DBP'].GetValue(), self.textctrl['Pulse'].GetValue(), 
	      self.textctrl['Resp'].GetValue(), self.textctrl['O2 Sats'].GetValue(), self.textctrl['Date'].GetValue(), 
	      self.PtID)
	EMR_utilities.updateData(updateqry)
	self.UpdateList()
	data = EMR_utilities.getData("SELECT dob, sex FROM demographics WHERE patient_ID = %s;" % self.PtID)
	if data[1] == 'male':
	    sex = 'boy'
	else: sex = 'girl'
	s = data[0].strftime("%B") + ',' + str(data[0].day) + ',' + str(data[0].year) + ',' + sex + ',' + \
		self.textctrl['Ht'].GetValue() + ',' + self.textctrl['Wt'].GetValue() + ',' + self.textctrl['HC'].GetValue()
	with open('/home/mb/Dropbox/iMacros/Datasources/growth.txt', 'w') as f:
	    f.write(s)
	    f.close()
	self.Layout()			#this line from C M and Robin Dunn on the mailing list; see 20 Feb 08 email
	for items in self.textctrl:
	    self.textctrl[items].SetValue("")
	
    def DeleteVitals(self, event):
        obj = self.vitalsList.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM vitals WHERE vitals_number = %s;' % items['vitals_number']
            EMR_utilities.updateData(qry)
	self.UpdateList()

    def UpdateList(self):
	self.vitals = list(EMR_utilities.getAllDictData(self.qry))	#this function just updates the list after new vitals added or deleted
	self.vitalsList.SetObjects(self.vitals)
Exemple #7
0
class Meds(wx.Panel):
    def __init__(self, parent, id, ptID):
        wx.Panel.__init__(self, parent, id)

        self.ptID = ptID
        self.toggler = 'Current Meds'
        self.reviewed = 0
        meds = med_find(ptID)
        self.list = ObjectListView(self,
                                   -1,
                                   style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.list.SetColumns([
            ColumnDefn("Name", "left", 250, valueGetter="med_name"),
            ColumnDefn("Dose", "center", 180, valueGetter="dose"),
            ColumnDefn("Tablets", "center", 60, valueGetter="number_tablets"),
            ColumnDefn("Route", "left", 60, valueGetter="route"),
            ColumnDefn("Frequency", "left", 80, valueGetter="frequency"),
            ColumnDefn("#", "center", 40, valueGetter="number_pills"),
            ColumnDefn("Refills", "center", 50, valueGetter="refills"),
            ColumnDefn("Date", "left", 100, valueGetter="script_date")
        ])
        self.list.SetObjects(meds)
        self.list.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.list.Bind(EVT_CELL_EDIT_STARTING, self.HandleCellEditStarting)
        self.list.Bind(EVT_CELL_EDIT_FINISHED, self.listHandleCellEditFinished)

        leftmed = wx.BoxSizer(wx.VERTICAL)
        rightmed = wx.BoxSizer(wx.VERTICAL)
        mainmed = wx.BoxSizer(wx.HORIZONTAL)

        medbuttons = (('Archive', self.OnArchMed), ('Print', self.OnpRintMed),
                      ('Delete', self.OnDeleteMed), ('Toggle',
                                                     self.OnToggleMed),
                      ('Interactions', self.OnInteractions), ('Reviewed',
                                                              self.OnReviewed))
        for label, handler in medbuttons:
            EMR_utilities.buildOneButton(self, self, label, handler, leftmed)

        allergies = allergy_find(ptID)
        self.allergylist = ObjectListView(self,
                                          -1,
                                          style=wx.LC_REPORT
                                          | wx.SUNKEN_BORDER)
        self.allergylist.SetColumns([
            ColumnDefn("Allergy", "left", 200, valueGetter="allergy"),
            ColumnDefn("Reaction", "left", 250, valueGetter="reaction")
        ])
        self.allergylist.SetObjects(allergies)
        self.allergylist.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.allergylist.Bind(EVT_CELL_EDIT_STARTING,
                              self.HandleCellEditStarting)
        self.allergylist.Bind(EVT_CELL_EDIT_FINISHED,
                              self.allergyHandleCellEditFinished)

        leftall = wx.BoxSizer(wx.VERTICAL)
        rightall = wx.BoxSizer(wx.VERTICAL)
        mainall = wx.BoxSizer(wx.HORIZONTAL)

        allbuttons = (('Add', self.OnNewAll, leftall),
                      ('Remove', self.OnRemAll, leftall))
        for label, handler, sizer in allbuttons:
            EMR_utilities.buildOneButton(self, self, label, handler, sizer)
        addmed = AddMed(self, -1, self.ptID)
        #Set the sizers	that have not already been set
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        rightmed.Add(self.list, 1, wx.EXPAND | wx.TOP, 3)
        self.medtitle = wx.StaticText(self, -1, self.toggler)
        titlefont = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        self.medtitle.SetFont(titlefont)
        mainmed.Add(leftmed, 0)
        mainmed.Add((15, -1))
        mainmed.Add(rightmed, 1, wx.EXPAND)
        rightall.Add(self.allergylist, 1, wx.EXPAND | wx.TOP, 3)
        rightmed.Add(addmed, 1, wx.EXPAND)
        mainall.Add(leftall, 0)
        mainall.Add((15, -1))
        mainall.Add(rightall, 1, wx.EXPAND)
        mainsizer.Add(mainall, 2, wx.EXPAND)
        mainsizer.Add(self.medtitle, 0, wx.ALIGN_CENTER | wx.ALL, 5)
        mainsizer.Add(mainmed, 4, wx.EXPAND)
        mainsizer.Add((-1, 5))

        self.SetSizer(mainsizer)
        self.Centre()
        self.Show(True)

    def OnArchMed(
        self, event
    ):  #need add/edit form pulled up on selected meds, update query, requery meds
        #open AddEditMed form with selected/checked med filled in
        obj = self.list.GetSelectedObjects()
        for items in obj:
            qry = 'UPDATE meds SET archive = 1 WHERE med_number = %s;' % items[
                'med_number']
            self.list.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def OnpRintMed(self, event):
        obj = self.list.GetSelectedObjects()
        string = ''
        for items in obj:
            string = '%s %s\n   take %s %s %s   #%s refills: %s\n\n' % \
                     (items["med_name"],
                      items["dose"],
                      items["number_tablets"],
                      items["route"],
                      items["frequency"],
                      items["number_pills"],
                      items["refills"]) + string

        form_lt = "%s/EMR_outputs/Script.html" % settings.LINUXPATH
        form_at = "%s/EMR_outputs/Script.html" % settings.APPLEPATH
        form_wt = "%s\EMR_outputs\Script.html" % settings.WINPATH
        form = open(EMR_utilities.platformText(form_lt, form_at, form_wt), 'r')
        s = form.read()
        form.close()
        dem_data = EMR_utilities.getDictData(
            'SELECT * FROM demographics WHERE patient_ID = %s;' % self.ptID)
        dem_data['string'] = string
        dem_data['date'] = EMR_utilities.dateToday()
        dem_data['name_address'] = EMR_formats.format_address(dem_data)
        script_text = s % (dem_data)
        printer = EMR_utilities.Printer()
        printer.PreviewText(script_text)
        path_lt = "%s/EMR_outputs/%s/Orders" % (settings.LINUXPATH, self.ptID)
        path_at = "%s/EMR_outputs/%s/Orders" % (settings.APPLEPATH, self.ptID)
        path_wt = "%s\EMR_outputs\%s\Orders" % (settings.WINPATH, self.ptID)
        path = EMR_utilities.platformText(path_lt, path_at, path_wt)
        filename = "%s/script%s.html" % (
            path, EMR_utilities.dateToday(t='file format'))
        f = open(filename, 'w')
        f.write(script_text)
        f.close()

    def OnDeleteMed(self, event):
        obj = self.list.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM meds WHERE med_number = %s;' % items[
                'med_number']
            self.list.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def OnToggleMed(self, event):
        if self.toggler == 'Current Meds':
            self.toggler = 'Archived Meds'
            self.medtitle.SetLabel(self.toggler)
            qry = 'SELECT * FROM meds WHERE archive = 1 AND patient_ID = %s' % (
                self.ptID)
            data = EMR_utilities.getAllDictData(qry)
            self.list.SetObjects(list(data))
        else:
            self.toggler = 'Current Meds'
            self.medtitle.SetLabel(self.toggler)
            self.UpdateList()

    def OnInteractions(self, event):
        obj = self.list.GetSelectedObjects()
        string = 'http://mletter.best.vwh.net/Psc/dip2.cgi?userid=guest'
        count = 1
        for items in obj:
            string = string + '&drug%s=%s' % (count, items['med_name'])
            count = count + 1
        results = EMR_utilities.HTML_Frame(self,
                                           "Medication Interactions",
                                           html_str=string)
        results.Show()

    def OnReviewed(self, event):
        self.reviewed = 1

    def OnNewAll(self, event):
        allergy = wx.GetTextFromUser('What is the patient allergic to?',
                                     'New Allergy')
        if allergy == "": pass
        else:
            reaction = wx.GetTextFromUser('What happened?', 'Reaction')
            query = 'INSERT INTO allergies SET allergy = "%s", reaction = "%s", patient_ID = %s;' % \
          (allergy, reaction, self.ptID)
            EMR_utilities.updateData(query)
            self.UpdateAllergy()

    def OnRemAll(self, event):
        obj = self.allergylist.GetSelectedObjects()
        for items in obj:
            qry = 'DELETE FROM allergies WHERE allergy_number = %s;' % items[
                'allergy_number']
            self.allergylist.RemoveObject(items)
            EMR_utilities.updateData(qry)

    def UpdateList(
        self
    ):  #this function just updates the list after new med added or deleted
        meds = med_find(self.ptID)  #These lines put the data from the query
        self.list.SetObjects(meds)

    def UpdateAllergy(self):
        allergies = allergy_find(self.ptID)
        self.allergylist.SetObjects(allergies)

    def HandleCellEditStarting(self, event):
        pass

    def allergyHandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE allergies SET %s = "%s" WHERE allergy_number = %s;' \
                  % (self.allergylist.columns[event.subItemIndex].valueGetter,
                     self.allergylist.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["allergy_number"])
        EMR_utilities.updateData(sqlstmt)

    def listHandleCellEditFinished(self, event):
        sqlstmt = 'UPDATE meds SET %s = "%s" WHERE med_number = %s;' \
                  % (self.list.columns[event.subItemIndex].valueGetter,
                     self.list.GetItem(event.rowIndex, event.subItemIndex).GetText(),
                     event.rowModel["med_number"])
        EMR_utilities.updateData(sqlstmt)
class data_Kendaraan(wx.Dialog):
    """docstring for data_Kendaraan"""
    def __init__(self, *arg, **kwargs):
        super(data_Kendaraan, self).__init__(*arg,
                                             **kwargs,
                                             pos=(300, 50),
                                             size=(900, 600))

        self.SetTitle("Data Kendaraan")
        panel = wx.Panel(self)
        panel.SetBackgroundColour(wx.WHITE)

        #tampil data
        self.tampilMysql()

        #label-label
        wx.StaticText(self, -1, "Nomor Plat             :", pos=(30, 20))
        wx.StaticText(self, -1, "Nama Pelanggan   :", pos=(30, 50))
        wx.StaticText(self, -1, "No Telp                    :", (30, 80))
        wx.StaticText(self, -1, "Merk                        :", (30, 110))
        wx.StaticText(self, -1, "Model                      :", (30, 140))
        wx.StaticText(self, -1, "Perusahaan     :", (500, 20))
        wx.StaticText(self, -1, "Warna              :", (500, 50))
        wx.StaticText(self, -1, "Jenis                 :", (500, 80))
        wx.StaticText(self, -1, "Tahun              :", (500, 110))

        #textbox-textbox
        self.txtNomor = wx.TextCtrl(self, -1, pos=(150, 20), size=(30, 25))
        wx.TextCtrl(self, -1, pos=(190, 20), size=(50, 25))
        wx.TextCtrl(self, -1, pos=(250, 20), size=(50, 25))
        self.txtNama = wx.TextCtrl(self, -1, pos=(150, 50), size=(250, 25))
        self.txtTelp = wx.TextCtrl(self, -1, pos=(150, 80), size=(250, 25))
        self.txtMerk = wx.TextCtrl(self, -1, pos=(150, 110), size=(250, 25))
        self.txtModel = wx.TextCtrl(self, -1, pos=(150, 140), size=(250, 25))
        self.txtPerusahaan = wx.TextCtrl(self,
                                         -1,
                                         pos=(600, 20),
                                         size=(250, 25))
        self.txtWarna = wx.TextCtrl(self, -1, pos=(600, 50), size=(250, 25))
        pilihanJenis = ["Mobil", "Motor"]
        self.txtJenis = wx.ComboBox(self,
                                    choices=pilihanJenis,
                                    pos=(600, 80),
                                    size=(250, 25))
        pilihanTahun = [
            "1996 - 2000", "2001 - 2004", "2005 - 2009", "2010 - 2014",
            "2015 - 2019"
        ]
        self.txtTahun = wx.ComboBox(self,
                                    choices=pilihanTahun,
                                    pos=(600, 110),
                                    size=(250, 25))
        pilihanSort = ["Nomor Plat", "Nama", "Tanggal", "Jenis", "Perusahaan"]
        self.txtSort = wx.ComboBox(self,
                                   choices=pilihanSort,
                                   pos=(300, 191.5),
                                   size=(190, 24))
        self.txtSort.SetValue("Nama")
        self.txtSearch = wx.TextCtrl(self,
                                     -1,
                                     pos=(600, 191.5),
                                     size=(250, 24))
        self.txtPilihan = wx.TextCtrl(self, -1)
        self.txtPilihan.SetValue("add")
        self.txtPilihan.Hide()

        #button-button
        self.btnsave = wx.Button(self, -1, "Save", pos=(500, 140))
        self.btnCancel = wx.Button(self, -1, "Cancel", pos=(600, 140))
        self.btnEdit = wx.Button(self, -1, "Edit", pos=(30, 190))
        self.btnDelete = wx.Button(self, -1, "Delete", pos=(120, 190))
        self.btnSort = wx.Button(self, -1, "Sort By", pos=(210, 190))
        self.btnSearch = wx.Button(self, -1, "Search", pos=(500, 190))
        self.btnkepentingan = wx.Button(self,
                                        -1,
                                        "Kepentingan",
                                        pos=(700, 140))

        #event-event
        self.btnsave.Bind(wx.EVT_BUTTON, self.saveData)
        self.btnEdit.Bind(wx.EVT_BUTTON, self.editData)
        self.btnDelete.Bind(wx.EVT_BUTTON, self.deleteData)
        self.btnCancel.Bind(wx.EVT_BUTTON, self.cancelBtn)
        self.txtSearch.Bind(wx.EVT_TEXT, self.searching)
        self.btnkepentingan.Bind(wx.EVT_BUTTON, self.tampil)

        self.dataOlv = ObjectListView(self,
                                      -1,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                      pos=(10, 230),
                                      size=(850, 300))
        self.setDataMobil()

        self.Centre()

        self.Show(True)

    def tampil(self, e):
        hasil = kp.KepentinganFrame(self)
        hasil.Show(True)

    def searching(self, e):
        self.setSearch()
        self.setDataMobil()

    def setSearch(self):
        varSearch = self.txtSearch.GetValue()
        valSort = self.txtSort.GetValue()

        if valSort == "Nomor Plat":
            query = ("SELECT * FROM tb_member WHERE plate LIKE %s")
        elif valSort == "Tanggal":
            query = ("SELECT * FROM tb_member WHERE added_date LIKE %s")
        elif valSort == "Perusahaan":
            query = ("SELECT * FROM tb_member WHERE perusahaan LIKE %s")
        elif valSort == 'Jenis':
            query = ("SELECT * FROM tb_member WHERE jenis LIKE %s")
        else:
            query = ("SELECT * FROM tb_member WHERE nama_pel LIKE %s")
        stmt = ("%" + varSearch + "%")
        self.datasek = []
        hasil = connector.Execute(query, stmt, 3)
        if hasil != 'Koneksi Gagal':
            data = hasil['Data']
            for i in data:
                self.tanggalIni = str(i[2])
                dict = {
                    'plate': i[0],
                    'nama': i[1],
                    'tanggal': "{0}".format(self.tanggalIni[:10]),
                    'warna': i[4],
                    'merk': i[5],
                    'perusahaan': i[6],
                    'model': i[7],
                    'tahun': i[8],
                    'jenis': i[9],
                    "telp": i[10]
                }
                self.datasek.append(dict)

        else:
            wx.MessageBox(message="Cek Koneksi Anda",
                          caption="Error",
                          style=wx.OK | wx.ICON_INFORMATION)

    def setDataMobil(self, data=None):
        self.dataOlv.SetColumns([
            ColumnDefn("Plate", "left", 100, "plate"),
            ColumnDefn("Nama", "left", 100, "nama"),
            ColumnDefn("Telp", "left", 100, "telp"),
            ColumnDefn("Added", "left", 90, "tanggal"),
            ColumnDefn("Jenis", "left", 70, "jenis"),
            ColumnDefn("Merk", "left", 100, "merk"),
            ColumnDefn("Perusahaan", "left", 102, "perusahaan"),
            ColumnDefn("Model", "left", 100, "model"),
            ColumnDefn("Warna", "left", 100, "warna"),
            ColumnDefn("Tahun", "left", 100, "tahun")
        ])
        if self.txtSearch != '':
            self.setSearch()
            self.dataOlv.SetObjects(self.datasek)
        else:
            self.dataOlv.SetObjects(self.dataMobil)

    def tampilMysql(self):
        self.dataMobil = []
        #--Getting Data Mobil From Mysql
        query = "SELECT * FROM tb_member ORDER BY added_date DESC"
        stmt = ''
        hasil = connector.Execute(query, stmt, 2)
        if hasil != 'Koneksi Gagal':
            data = hasil['Data']
            for i in data:
                self.tanggalIni = str(i[2])
                dict = {
                    'plate': i[0],
                    'nama': i[1],
                    'tanggal': "{0}".format(self.tanggalIni[:10]),
                    'warna': i[4],
                    'merk': i[5],
                    'perusahaan': i[6],
                    'model': i[7],
                    'tahun': i[8],
                    'jenis': i[9],
                    "telp": i[10]
                }
                self.dataMobil.append(dict)

        else:
            wx.MessageBox(message="Cek Koneksi Anda",
                          caption="Error",
                          style=wx.OK | wx.ICON_INFORMATION)
        #--end
    def saveData(self, e):

        self.getValueTextBox()

        if self.txtPilihan.GetValue() == 'add':

            if self.nomor == '' or self.nama == '' or self.telp == '' or self.merk == '' or self.model == '' or self.perusahaan == '' or self.warna == '' or self.jenis == '' or self.tahun == '':
                dlg = wx.MessageDialog(self, "Pastikan Data Sudah Penuh",
                                       "Perhatian",
                                       wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                return
            else:
                query = (
                    "INSERT INTO tb_member (plate, nama_pel, added_date, warna, merk, perusahaan, model, tahun, jenis, no_telp) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
                )

                stmt = (self.nomor.upper(), self.nama, datetime.datetime.now(),
                        self.warna.upper(), self.merk.upper(),
                        self.perusahaan.upper(), self.model.upper(),
                        self.tahun, self.jenis.upper(), self.telp)
                hasil = connector.Execute(query, stmt, 1)
                self.tampilMysql()
                self.setDataMobil()
                self.delValueTextBox()
        elif self.txtPilihan.GetValue() == "edit":
            query = (
                "UPDATE tb_member SET nama_pel = %s, warna = %s, merk = %s, perusahaan = %s, model = %s, tahun = %s, jenis = %s, no_telp = %s WHERE plate = %s"
            )
            stmt = (self.nama, self.warna.upper(), self.merk.upper(),
                    self.perusahaan.upper(), self.model.upper(), self.tahun,
                    self.jenis.upper(), self.telp, self.nomor.upper())
            connector.Execute(query, stmt, 1)
            self.tampilMysql()
            self.setDataMobil()
            self.delValueTextBox()

        self.txtPilihan.SetValue('add')
        self.txtNomor.Enable()

    def editData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
            self.item2 = self.dataOlv.GetItem(ind, 1)
        query = ("SELECT * FROM tb_member WHERE plate = %s and nama_pel = %s")
        stmt = (self.item.GetText(), self.item2.GetText())
        hasil = connector.Execute(query, stmt, 4)
        data = hasil['Data']
        self.txtNomor.SetValue(data[0][0])
        self.txtNama.SetValue(data[0][1])
        self.txtTelp.SetValue(data[0][10])
        self.txtMerk.SetValue(data[0][5])
        self.txtModel.SetValue(data[0][7])
        self.txtPerusahaan.SetValue(data[0][6])
        self.txtWarna.SetValue(data[0][4])
        self.txtJenis.SetValue(data[0][9])
        self.txtTahun.SetValue(data[0][8])
        self.txtPilihan.SetValue("edit")
        self.txtNomor.Disable()

    def deleteData(self, e):
        ind = self.dataOlv.GetFirstSelected()
        if ind >= 0:
            self.item = self.dataOlv.GetItem(ind)
            self.item2 = self.dataOlv.GetItem(ind, 1)
        query = ("DELETE FROM tb_member WHERE plate = %s and nama_pel = %s")
        stmt = (self.item.GetText(), self.item2.GetText())
        connector.Execute(query, stmt, 1)
        self.tampilMysql()
        self.setDataMobil()

    def cancelBtn(self, e):
        self.delValueTextBox()
        self.txtNomor.Enable()
        self.txtPilihan.SetValue('add')

    def getValueTextBox(self):
        self.nomor = self.txtNomor.GetValue()
        self.nama = self.txtNama.GetValue()
        self.telp = self.txtTelp.GetValue()
        self.merk = self.txtMerk.GetValue()
        self.model = self.txtModel.GetValue()
        self.perusahaan = self.txtPerusahaan.GetValue()
        self.warna = self.txtWarna.GetValue()
        self.jenis = self.txtJenis.GetValue()
        self.tahun = self.txtTahun.GetValue()

    def delValueTextBox(self):
        self.txtNomor.SetValue('')
        self.txtNama.SetValue('')
        self.txtTelp.SetValue('')
        self.txtMerk.SetValue('')
        self.txtModel.SetValue('')
        self.txtPerusahaan.SetValue('')
        self.txtWarna.SetValue('')
        self.txtJenis.SetValue('')
        self.txtTahun.SetValue('')