def insert_row(self, qtable, selected_id):
        """ Reload @widget with contents of @tablename applying selected @expr_filter """
        model = qtable.model()
        record = model.record()
        campaign_id = wm.get_item_data(self.dlg_unit, self.dlg_unit.cmb_campaign, 0)
        work_id = wm.get_item_data(self.dlg_unit, self.dlg_unit.cmb_work, 0)
        times = wm.getWidgetText(self.dlg_unit, self.dlg_unit.txt_times, return_string_null=False)
        if times is None or times < 1 or times == "":
            times = "1"

        record.setValue("node_id", selected_id)
        record.setValue("campaign_id", campaign_id)
        record.setValue("work_id", work_id)
        record.setValue("frequency", str(times))
        model.insertRecord(-1, record)
    def update_table(self, dialog, qtable, table_name, combo1, combo2):

        campaign_id = wm.get_item_data(dialog, combo1, 0)
        work_id = wm.get_item_data(dialog, combo2, 0)

        expr_filter = "campaign_id =" + str(campaign_id)
        if work_id is None or work_id == "":
            self.dlg_unit.btn_insert.setEnabled(False)
            self.dlg_unit.btn_snapping.setEnabled(False)
        else:
            self.dlg_unit.btn_insert.setEnabled(True)
            self.dlg_unit.btn_snapping.setEnabled(True)
            expr_filter += " AND work_id =" + str(work_id)

        self.fill_table_unit(qtable, table_name, expr_filter=expr_filter)
        self.get_id_list()
    def event_insert(self):
        """Add and event basing on form associated to the selected parameter_id."""
        # check a parameter_id is selected (can be that no value is available)
        parameter_id = widget_manager.get_item_data(self.dlg_add_visit, self.dlg_add_visit.parameter_id, 0)
        if not parameter_id:
            message = "You need to select a valid parameter id"
            self.controller.show_info_box(message)
            return
        # get form associated
        sql = ("SELECT form_type FROM " + self.schema_name + ".om_visit_parameter"
               " WHERE id = '" + str(parameter_id) + "'")
        row = self.controller.get_row(sql, commit=False)
        form_type = str(row[0])

        if form_type == 'event_standard':

            self.dlg_event = EventStandard()
            self.load_settings(self.dlg_event)
        else:
            message = "Unrecognised form type"
            self.controller.show_info_box(message, parameter=form_type)
            return

        # because of multiple view disable add picture and view gallery
        self.dlg_event.btn_add_picture.setEnabled(False)
        self.dlg_event.btn_view_gallery.setEnabled(False)

        # set fixed values
        self.dlg_event.parameter_id.setText(parameter_id)


        self.dlg_event.setWindowFlags(Qt.WindowStaysOnTopHint)
        ret = self.dlg_event.exec_()

        # check return
        if not ret:
            # clicked cancel
            return

        # create an empty Event
        event = OmVisitEvent(self.controller)
        event.id = event.max_pk() + 1
        event.parameter_id = parameter_id
        event.visit_id = int(self.visit_id.text())

        for field_name in event.field_names():
            if not hasattr(self.dlg_event, field_name):
                continue
            value = getattr(self.dlg_event, field_name).text()
            if value:
                setattr(event, field_name, value)

        # save new event
        event.upsert()

        # update Table
        self.tbl_event.model().select()
        self.manage_events_changed()
示例#4
0
    def get_year(self, dialog):

        update = False
        self.selected_camp = None

        if dialog.txt_campaign.text() != '':

            sql = ("SELECT id FROM " + self.schema_name + ".cat_campaign "
                   " WHERE name = '" + str(dialog.txt_campaign.text()) + "'")
            row = self.controller.get_row(sql)
            if row is None:
                message = "No hi ha preus per aquest any"
                self.controller.show_warning(message)
                return None
            self.campaign_id = row[0]

            if widget_manager.isChecked(
                    dialog,
                    dialog.chk_campaign) and widget_manager.get_item_data(
                        dialog, dialog.cbx_campaigns, 0) != -1:
                self.selected_camp = widget_manager.get_item_data(
                    dialog, dialog.cbx_campaigns, 0)
                sql = ("SELECT DISTINCT(campaign_id) FROM " +
                       self.schema_name + ".planning"
                       " WHERE campaign_id ='" + str(self.selected_camp) + "'")
                row = self.controller.get_row(sql)
                if row:
                    update = True
            else:
                self.selected_camp = self.campaign_id

            self.campaign_name = dialog.txt_campaign.text()
            self.close_dialog(dialog)
            self.tree_selector(update)

        else:
            message = "Any recuperat es obligatori"
            self.controller.show_warning(message)

        self.controller.log_info("get_year_end")
示例#5
0
    def get_planned_camp(self, dialog):

        if str(widget_manager.getWidgetText(dialog,
                                            dialog.txt_plan_code)) == 'null':
            message = "El camp text a no pot estar vuit"
            self.controller.show_warning(message)
            return

        self.plan_code = widget_manager.getWidgetText(dialog,
                                                      dialog.txt_plan_code)
        self.planned_camp_id = widget_manager.get_item_data(
            dialog, dialog.cbx_years, 0)
        self.planned_camp_name = widget_manager.get_item_data(
            dialog, dialog.cbx_years, 1)

        if self.planned_camp_id == -1:
            message = "No hi ha cap any planificat"
            self.controller.show_warning(message)
            return
        self.controller.log_info(str(self.planned_camp_id))
        self.close_dialog(dialog)
        self.month_selector()
    def manage_leave_visit_tab(self):
        """ manage all the action when leaving the VisitTab
        A) Manage sync between GUI values and Visit record in DB."""

        # A) fill Visit basing on GUI values
        self.current_visit.id = int(self.visit_id.text())
        self.current_visit.startdate = self.dlg_add_visit.startdate.date().toString(Qt.ISODate)
        self.current_visit.enddate = self.dlg_add_visit.enddate.date().toString(Qt.ISODate)
        self.current_visit.user_name = self.user_name.text()
        self.current_visit.ext_code = self.ext_code.text()
        self.current_visit.visitcat_id = widget_manager.get_item_data(self.dlg_add_visit, self.dlg_add_visit.visitcat_id, 0)
        self.current_visit.descript = self.dlg_add_visit.descript.text()
        if self.expl_id:
            self.current_visit.expl_id = self.expl_id
        # update or insert but without closing the transaction: autocommit=False
        self.current_visit.upsert(commit=self.autocommit)
 def save_default_values(self):
     cur_user = self.controller.get_current_user()
     campaign = wm.get_item_data(self.dlg_unit, self.dlg_unit.cmb_campaign, 0)
     work = wm.get_item_data(self.dlg_unit, self.dlg_unit.cmb_work, 0)
     self.controller.plugin_settings_set_value("PlanningUnit_cmb_campaign_" + cur_user, campaign)
     self.controller.plugin_settings_set_value("PlanningUnit_cmb_work_" + cur_user, work)
示例#8
0
    def manage_new_price_catalog(self):

        table_name = "cat_price"
        new_camp = self.dlg_new_campaign.txt_campaign.text()

        if new_camp is None or new_camp == '':
            msg = "Has de possar l'any corresponent"
            self.controller.show_warning(msg)
            return
        sql = ("SELECT id FROM " + self.schema_name + ".cat_campaign "
               " WHERE name = '" + str(new_camp) + "'")
        row = self.controller.get_row(sql)

        # If campaign not exist, create new one
        if row is None:
            start_date = widget_manager.getCalendarDate(
                self.dlg_new_campaign, self.dlg_new_campaign.start_date)
            end_date = widget_manager.getCalendarDate(
                self.dlg_new_campaign, self.dlg_new_campaign.end_date)
            sql = ("INSERT INTO " + self.schema_name +
                   ".cat_campaign(name, start_date, end_date) "
                   " VALUES('" + str(new_camp) + "', '" + str(start_date) +
                   "', '" + str(end_date) + "');")
            self.controller.execute_sql(sql)
            sql = ("SELECT currval('" + self.schema_name +
                   ".cat_campaign_id_seq');")
            row = self.controller.get_row(sql)

            # Update contents of variable 'self.cmb_poda_type'
            self.update_cmb_poda_type()

        # Get id_campaign
        id_new_camp = str(row[0])

        # Check if want copy any campaign or do new price list
        copy_years = self.dlg_new_campaign.chk_campaign.isChecked()
        if copy_years:
            id_old_camp = widget_manager.get_item_data(
                self.dlg_new_campaign, self.dlg_new_campaign.cbx_years)
            # If checkbox is checked but don't have any campaign selected do return.
            if id_old_camp == -1:
                msg = "No tens cap any seleccionat, desmarca l'opcio de copiar preus"
                self.controller.show_warning(msg)
                return
        else:
            id_old_camp = 0

        sql = ("SELECT DISTINCT(campaign_id) FROM " + self.schema_name + "." +
               str(table_name) + " "
               " WHERE campaign_id = '" + str(id_new_camp) + "'")
        row = self.controller.get_row(sql)

        if not row or row is None:
            sql = ("SELECT " + self.schema_name + ".create_price('" +
                   str(id_new_camp) + "','" + str(id_old_camp) + "')")
            self.controller.execute_sql(sql)
        else:
            message = (
                "Estas a punt de sobreescriure els preus de la campanya " +
                new_camp + " ")
            answer = self.controller.ask_question(message, "Warning")
            if not answer:
                return
            else:
                sql = ("SELECT " + self.schema_name + ".create_price('" +
                       str(id_new_camp) + "','" + str(id_old_camp) + "')")
                self.controller.execute_sql(sql)

        # Close perevious dialog
        self.close_dialog(self.dlg_new_campaign)

        # Set dialog and signals
        dlg_prices_management = PriceManagement()
        self.load_settings(dlg_prices_management)
        dlg_prices_management.btn_close.clicked.connect(
            partial(self.close_dialog, dlg_prices_management))
        dlg_prices_management.rejected.connect(
            partial(self.close_dialog, dlg_prices_management))

        # Populate QTableView
        table_view = 'v_edit_price'
        self.fill_table_prices(dlg_prices_management.tbl_price_list,
                               table_view,
                               id_new_camp,
                               set_edit_triggers=QTableView.DoubleClicked)
        self.set_table_columns(dlg_prices_management,
                               dlg_prices_management.tbl_price_list,
                               table_view, 'basic_cat_price')
        dlg_prices_management.exec_()
示例#9
0
    def rows_selector(self, dialog, id_table_left, tableright, id_table_right,
                      tableleft, table_view):
        """ Copy the selected lines in the qtable_all_rows and in the table """

        left_selected_list = dialog.all_rows.selectionModel().selectedRows()
        if len(left_selected_list) == 0:
            message = "Cap registre seleccionat"
            self.controller.show_warning(message)
            return

        # Get all selected ids
        field_list = []
        for i in range(0, len(left_selected_list)):
            row = left_selected_list[i].row()
            id_ = dialog.all_rows.model().record(row).value(id_table_left)
            field_list.append(id_)

        # Select all rows and get all id
        self.select_all_rows(dialog.selected_rows, id_table_right)
        if widget_manager.isChecked(dialog, dialog.chk_current):
            current_poda_type = widget_manager.get_item_data(
                dialog, dialog.cmb_poda_type, 0)
            current_poda_name = widget_manager.get_item_data(
                dialog, dialog.cmb_poda_type, 1)
            if current_poda_type is None:
                message = "No heu seleccionat cap poda"
                self.controller.show_warning(message)
                return

        if widget_manager.isChecked(dialog, dialog.chk_permanent):
            for i in range(0, len(left_selected_list)):
                row = left_selected_list[i].row()
                sql = (
                    "UPDATE " + self.schema_name + ".cat_mu "
                    " SET work_id = '" + str(current_poda_type) + "'"
                    " WHERE id = '" +
                    str(dialog.all_rows.model().record(row).value('mu_id')) +
                    "'")
                self.controller.execute_sql(sql)

        for i in range(0, len(left_selected_list)):
            row = left_selected_list[i].row()
            values = ""
            function_values = ""
            if dialog.all_rows.model().record(row).value('mu_id') is not None:
                values += "'" + str(
                    dialog.all_rows.model().record(row).value('mu_id')) + "', "
                function_values += "'" + str(
                    dialog.all_rows.model().record(row).value('mu_id')) + "', "
            else:
                values += 'null, '

            if dialog.all_rows.model().record(row).value(
                    'work_id') is not None:
                if widget_manager.isChecked(dialog, dialog.chk_current):
                    values += "'" + str(current_poda_type) + "', "
                    function_values += "'" + str(current_poda_type) + "', "
                else:
                    values += "'" + str(dialog.all_rows.model().record(
                        row).value('work_id')) + "', "
                    function_values += "'" + str(dialog.all_rows.model(
                    ).record(row).value('work_id')) + "', "
            else:
                values += 'null, '

            values += "'" + str(self.campaign_id) + "', "
            values = values[:len(values) - 2]
            function_values += "'" + str(self.campaign_id) + "', "
            function_values = function_values[:len(function_values) - 2]

            # Check if mul_id and year_ already exists in planning
            sql = ("SELECT " + id_table_right + ""
                   " FROM " + self.schema_name + "." + tableright + ""
                   " WHERE " + id_table_right + " = '" + str(field_list[i]) +
                   "'"
                   " AND campaign_id = '" + str(self.campaign_id) + "';")
            row = self.controller.get_row(sql, log_sql=True)
            if row is not None:
                # if exist - show warning
                message = "Aquest registre ja esta seleccionat"
                self.controller.show_info_box(message,
                                              "Info",
                                              parameter=str(field_list[i]))
            else:
                # Put a new row in QTableView
                # dialog.selected_rows.model().insertRow(dialog.selected_rows.verticalHeader().count())

                sql = ("INSERT INTO " + self.schema_name + "." + tableright +
                       ""
                       " (mu_id,  work_id, campaign_id) "
                       " VALUES (" + values + ")")
                self.controller.execute_sql(sql)
                sql = ("SELECT " + self.schema_name + ".set_plan_price(" +
                       function_values + ")")
                self.controller.execute_sql(sql)

        # Refresh tables
        self.fill_table(dialog,
                        table_view,
                        set_edit_triggers=QTableView.NoEditTriggers)
        self.fill_main_table(dialog, tableleft)