Esempio n. 1
0
 def dispDetail(self):
     pid = -1
     tv = self.ui.tableView
     index = tv.selectionModel().currentIndex()
     if index.isValid():
         pid = self.dataInfo.getOnlyData([index.row(), 0])
     d1 = JPDateConver(self.ui.dateBegin.date(), str)
     d2 = JPDateConver(self.ui.dateEditEnd.date(), str)
     self.sql_detail = f"""
         SELECT q.fOrderDate AS 日期OrderDate,
                 q.fOrderID AS 单据号码OrderID,
                 ksmc AS 客商Merchants,
                 rk AS 入库In ,
                 ck AS 出库Out
         FROM 
             (SELECT o.fOrderDate,
                 o.fOrderID,
                 s.fSupplierName AS ksmc,
                 d.fQuant AS rk,
                 null AS ck,
                 d.TS
             FROM t_product_warehousereceipt_order_detail AS d
             LEFT JOIN t_product_warehousereceipt_order AS o
                 ON d.fOrderID=o.fOrderID
             LEFT JOIN t_supplier AS s
                 ON o.fSupplierID=s.fSupplierID
             WHERE o.fOrderDate
                 BETWEEN '{d1}'
                     AND '{d2}'
                     AND fProductID={pid}
                     AND o.fSubmited=1
             UNION all
             SELECT o.fOrderDate,
                 o.fOrderID,
                 s.fCustomerName AS ksmc,
                 NULL AS rk,
                 d.fQuant AS ck,
                 d.TS
             FROM t_product_outbound_order_detail AS d
             LEFT JOIN t_product_outbound_order AS o
                 ON d.fOrderID=o.fOrderID
             LEFT JOIN t_customer AS s
                 ON o.fCustomerID=s.fCustomerID
             WHERE o.fOrderDate
                 BETWEEN '{d1}'
                     AND '{d2}' 
                     AND fProductID={pid}
                     AND o.fSubmited=1
             ) AS q
         ORDER BY  q.Ts DESC 
     """
     self.dataInfo_detail = JPQueryFieldInfo(self.sql_detail)
     self.mod3 = JPTableViewModelReadOnly(self.ui.tableView_rec,
                                          self.dataInfo_detail)
     self.ui.tableView_rec.setModel(self.mod3)
     self.ui.tableView_rec.resizeColumnsToContents()
     bz = (len(self.dataInfo_detail) > 0)
     self.ui.CmdExportToExcel_Detail.setEnabled(bz)
     self.ui.CmdPrint_Detail.setEnabled(bz)
Esempio n. 2
0
 def on_CmdPrint_clicked(self):
     d1 = JPDateConver(self.ui.dateEdit_begin.date(), str)
     d2 = JPDateConver(self.ui.dateEdit_end.date(), str)
     if self.list_sql:
         rpt = FormReport_ProductInfo_InOutDetail()
         rpt.sql = self.list_sql.format(d1=d1, d2=d2)
         rpt.beginDate = self.ui.dateEdit_begin.date()
         rpt.endDate = self.ui.dateEdit_end.date()
         rpt.initItem()
         rpt.BeginPrint()
Esempio n. 3
0
    def actionClick(self, where_sql=None):
        d1 = JPDateConver(self.ui.dateEdit_begin.date(), str)
        d2 = JPDateConver(self.ui.dateEdit_end.date(), str)
        tv = self.ui.tableView
        self.dataInfo = JPQueryFieldInfo(self.list_sql.format(d1=d1, d2=d2))
        self.mod = myJPTableViewModelReadOnly(tv, self.dataInfo)
        tv.setModel(self.mod)

        #tv.setItemDelegateForColumn(9, de)
        tv.resizeColumnsToContents()
Esempio n. 4
0
 def on_CmdDailyRreport_clicked(self):
     if len(self.tabinfoCurrentDayRec) == 0:
         return
     try:
         p = FormReport_Rec_print(
             JPDateConver(self.ui.SelectDate.date(), str),
             self.tabinfoCurrentDayRec, self.tabinfoFangShiTongJi,
             JPDateConver(self.ui.SelectDate.date(), str))
         p.BeginPrint()
     except Exception as e:
         print(e)
         pass
Esempio n. 5
0
 def _onValueChange(self, v):
     v = self.date()
     if self.minimumDate() == v and v == QDate(1752, 9, 14):
         return
     self.FieldInfo.Value = JPDateConver(self.date(), datetime.date)
     if self.__RaiseEvent:
         super()._onValueChange(self.FieldInfo.Value)
Esempio n. 6
0
 def getSqlValue(self) -> str:
     v = self.date()
     if self.minimumDate() == v and v == QDate(1752, 9, 14):
         self.FieldInfo.Value = None
         return self.getNullValue()
     else:
         self.clearStyleSheet()
     return "'{}'".format(JPDateConver(self.date(), str))
Esempio n. 7
0
    def getSql(self, tablename):

        sql = "select * from {fn}".format(fn=tablename)
        con = JPDb().currentConn
        cur = con.cursor()
        cur.execute(sql)
        con.commit()
        tab = cur._result.rows
        if len(tab) == 0:
            return
        c_col = len(cur._result.fields)
        fns = ['`{}`'.format(r.name) for r in cur._result.fields]
        fg = ", "
        sql_ins = 'INSERT INTO `{tn}` ({f}) VALUES \n{v};'
        values = []
        vs = []
        for r in range(len(tab)):
            d = tab[r]
            vs = []
            for col in range(c_col):
                v = d[col]
                if v is None:
                    vs.append('Null')
                    continue
                elif isinstance(v, str):
                    vs.append("'{}'".format(v.replace("'", "\\'")))
                elif isinstance(v, (int, float, Decimal)):
                    vs.append('{}'.format(v))
                elif isinstance(v, bytes):
                    v = 0 if v == bytes([0]) else 1
                    vs.append('{}'.format(v))
                elif isinstance(v, (datetime.datetime, datetime.date)):
                    vs.append("'{}'".format(JPDateConver(v), str))
                else:
                    raise TypeError("没有该类型的转换器【{v}】={t}".format(v=fns[col],
                                                                t=type(v)))
            vs = [str(r) for r in vs]
            values.append('(' + fg.join(vs) + ')')
            self.exportOneRecord.emit()

        sql_ins = sql_ins.format(tn=tablename,
                                 f=fg.join(fns),
                                 v=(fg + '\n\t').join(values))
        return sql_ins
Esempio n. 8
0
    def dateChanged(self, s_data):
        str_date = JPDateConver(self.ui.SelectDate.date(), str)

        # 设置当前日收款记录(左上)
        sql = self.SQLCurrentDayRec.format(dateString=str_date)
        self.tabinfoCurrentDayRec = JPQueryFieldInfo(sql)
        self.modCurrentDayRec = JPTableViewModelReadOnly(
            self.ui.tabCurrentDayRec, self.tabinfoCurrentDayRec)
        self.ui.tabCurrentDayRec.setModel(self.modCurrentDayRec)
        self.ui.tabCurrentDayRec.resizeColumnsToContents()
        self.ui.tabCurrentDayRec.selectionModel().currentRowChanged[
            QModelIndex, QModelIndex].connect(self.currentCustomerChanged)

        # 设置当前日收款方式统计(右上)
        self.tabinfoFangShiTongJi = JPQueryFieldInfo(
            self.SQLSumPaymentMethod.format(dateString=str_date))
        self.modFangShiTongJi = JPTableViewModelReadOnly(
            self.ui.SumPaymentMethod, self.tabinfoFangShiTongJi)
        self.ui.SumPaymentMethod.setModel(self.modFangShiTongJi)
        self.ui.SumPaymentMethod.resizeColumnsToContents()
Esempio n. 9
0
 def setModelData(self, editor: QWidget, model: QAbstractItemModel,
                  index: QModelIndex):
     index.model().setData(index, JPDateConver(editor.date(),
                                               datetime.date), Qt.EditRole)
Esempio n. 10
0
 def setEditorData(self, editor: QWidget, index: QModelIndex):
     data = index.model().data(index, Qt.EditRole)
     if data is None:
         return
     editor.setDate(JPDateConver(data, QDate))
Esempio n. 11
0
 def Value(self):
     return JPDateConver(self.date(), datetime.date)
Esempio n. 12
0
 def refreshValueNotRaiseEvent(self, value):
     self.__RaiseEvent = False
     value = value if value else self.minimumDate()
     self.FieldInfo.Value = JPDateConver(value, datetime.date)
     self.setDate(JPDateConver(self.FieldInfo.Value, QDate))
     self.__RaiseEvent = True
Esempio n. 13
0
    def __customerIDChanged(self):
        # 刷新客户有关信息
        sql = '''
            SELECT fNUIT, fCity, fEndereco, fCelular, fContato
                , fTelefone, Q0.fAmountPayable  , Q1.fAmountPaid,
                Q0.fAmountPayable-Q1.fAmountPaid as fArrears,-1 as fPaymentMethodID
            FROM t_customer c
                LEFT JOIN (
                    SELECT fCustomerID, SUM(fPayable) AS fAmountPayable
                    FROM v_all_sales
                    WHERE fCustomerID = {CustomerID}
                ) Q0
                ON c.fCustomerID = Q0.fCustomerID
                LEFT JOIN (
                    SELECT fCustomerID, SUM(fAmountCollected) AS fAmountPaid
                    FROM t_receivables
                    WHERE fCustomerID = {CustomerID}
                ) Q1
                ON c.fCustomerID = Q1.fCustomerID
            WHERE c.fCustomerID = {CustomerID}
        '''
        sql = sql.format(CustomerID=self.ui.fCustomerID.Value())
        tab = JPQueryFieldInfo(sql)
        obj_name = [
            'fNUIT', 'fCity', 'fEndereco', 'fCelular', 'fContato', 'fTelefone',
            'fAmountPayable', 'fAmountPaid', 'fArrears'
        ]
        tup = (JPWidgets.QLineEdit, JPWidgets.QDateEdit, JPWidgets.QComboBox,
               JPWidgets.QTextEdit, JPWidgets.QCheckBox)
        fld_dict = tab.getRowFieldsInfoDict(0)
        for i, nm in enumerate(obj_name):
            obj = self.findChild(tup, nm)
            if obj:
                obj.setRowsData(tab.DataRows[0])
                obj.setMainModel(self)
                obj.setFieldInfo(fld_dict[nm])
                obj.refreshValueNotRaiseEvent(tab.getOnlyData([0, i]), True)

        # 刷新该客户名下当日单据号码
        sql_orderID = """
        select 'DIBOTO' as fOrderID
        union all 
        select 'Prepaid' as fOrderID
        union all 
        select fOrderID from t_order 
        where fCustomerID={CustomerID} 
            and fOrderDate=STR_TO_DATE('{dateString}', '%Y-%m-%d')
            and fConfirmed=1
            and fSubmited=1
            and fCanceled=0
        union all 
        select fOrderID from t_product_outbound_order 
        where fCustomerID={CustomerID} 
            and fOrderDate=STR_TO_DATE('{dateString}', '%Y-%m-%d')
            and fSubmited=1
            and fCanceled=0        
        """
        sql_orderID = sql_orderID.format(
            CustomerID=self.ui.fCustomerID.Value(),
            dateString=JPDateConver(self._currentDate, str))
        tab = JPQueryFieldInfo(sql_orderID)
        fld = self.ui.fOrderID.FieldInfo
        fld.RowSource = [[r.Datas[0]] for r in tab.DataRows]
        fld.BindingColumn = 0
        fld.Value = None
        fld.NotNull = True
        self.ui.fOrderID.setFieldInfo(fld, False)
        self.ui.fOrderID.setEnabled(True)
Esempio n. 14
0
class JPMySQLFieldInfo(JPFieldInfo):
    NOT_NULL_FLAG = 1
    PRI_KEY_FLAG = 2
    UNIQUE_KEY_FLAG = 4  #唯一约束
    MULTIPLE_KEY_FLAG = 8  #复合主键
    BLOB_FLAG = 16
    UNSIGNED_FLAG = 32  # 无符号
    ZEROFILL_FLAG = 64  # 前导零
    BINARY_FLAG = 128
    ENUM_FLAG = 256
    AUTO_INCREMENT_FLAG = 512  #自动编号
    TIMESTAMP_FLAG = 1024
    NO_DEFAULT_VALUE_FLAG = 4096
    PART_KEY_FLAG = 16384
    tp = {
        FIELD_TYPE.TINY: JPFieldInfo.Int,
        FIELD_TYPE.SHORT: JPFieldInfo.Int,
        FIELD_TYPE.LONG: JPFieldInfo.Int,
        FIELD_TYPE.LONGLONG: JPFieldInfo.Int,
        FIELD_TYPE.INT24: JPFieldInfo.Int,
        FIELD_TYPE.YEAR: JPFieldInfo.Int,
        FIELD_TYPE.DECIMAL: JPFieldInfo.Float,
        FIELD_TYPE.FLOAT: JPFieldInfo.Float,
        FIELD_TYPE.DOUBLE: JPFieldInfo.Float,
        FIELD_TYPE.NEWDECIMAL: JPFieldInfo.Float,
        FIELD_TYPE.VARCHAR: JPFieldInfo.String,
        FIELD_TYPE.JSON: JPFieldInfo.String,
        FIELD_TYPE.VAR_STRING: JPFieldInfo.String,
        FIELD_TYPE.STRING: JPFieldInfo.String,
        FIELD_TYPE.DATE: JPFieldInfo.Date,
        FIELD_TYPE.DATETIME: JPFieldInfo.Date,
        FIELD_TYPE.NEWDATE: JPFieldInfo.Date,
        FIELD_TYPE.TIMESTAMP: JPFieldInfo.Date,
        FIELD_TYPE.BIT: JPFieldInfo.Boolean
    }

    SqlValueCreater = {
        JPFieldInfo.Int:
        lambda x: "'{}'".format(x),
        JPFieldInfo.Float:
        lambda x: "'{}'".format(x),
        JPFieldInfo.String:
        lambda x: "'{}'".format(x),
        JPFieldInfo.Date:
        lambda x: "'{}'".format(JPDateConver(x, str)),
        JPFieldInfo.Boolean:
        lambda x: "'{}'".format(ord(x) if isinstance(x, bytes) else x),
        JPFieldInfo.Other:
        lambda x: "'{}'".format(x)
    }

    @staticmethod
    def getConvertersDict() -> dict:
        def v_float(x):
            if isinstance(x, Decimal):
                return float(x.to_eng_string())
            if isinstance(x, (float, int, str)):
                return float(x)

        def v_date(x):
            if isinstance(x, QDate):
                return x
            if isinstance(x, datetime_date):
                return QDate(x.year, x.month, x.day)

        def v_bool(x):
            if isinstance(x, bool):
                return 1 if x else 0
            if isinstance(x, bytes):
                return ord(x)

        def v_int(x):
            if isinstance(x, str):
                if len(x) > 0:
                    return int(x)
            return x

        return {
            JPFieldInfo.Int: v_int,
            JPFieldInfo.Float: v_float,
            JPFieldInfo.String: lambda x: x,
            JPFieldInfo.Date: v_date,
            JPFieldInfo.Boolean: v_bool,
            JPFieldInfo.Other: lambda x: x
        }

    def __init__(self, cursors_field):
        """此类在处理时,应该已经把从表中取得的数据全部转换成了Python内部数据类型"""
        super().__init__()
        f = cursors_field
        fl = JPMySQLFieldInfo
        self.FieldName = f.org_name if f.org_name else f.name
        self.Title = f.name
        self.TypeCode = self.tp.get(f.type_code, 0)
        self.Scale = f.scale
        self.Length = f.length
        self.NotNull = f.flags & fl.NOT_NULL_FLAG != 0
        self.IsPrimarykey = f.flags & fl.PRI_KEY_FLAG != 0
        self.NoDefaultValue = f.flags & fl.NO_DEFAULT_VALUE_FLAG != 0
        self.Auto_Increment = f.flags & fl.AUTO_INCREMENT_FLAG != 0

    def sqlValue(self, value, check_null: bool = False):
        v = value
        if check_null:
            if self.NotNull and v is None:
                t = self.Title if self.Title else self.FieldName
                raise ValueError(
                    "字段[{title}]的值不能为空!\nField[{title}] not be Empty!".format(
                        title=t))
        tp = self.TypeCode
        if v is None:
            return 'Null'
        return self.SqlValueCreater[tp](v)
Esempio n. 15
0
    def initItem(self):
        rpt = self
        rpt.PageHeader.AddItemRect(2, (0, 0, 274, 50), self.logo)
        rpt.PageHeader.AddItemRect(1, (274, 0, 746, 60),
                                   self.title,
                                   Bolder=False,
                                   AlignmentFlag=(Qt.AlignCenter),
                                   Font=self.font_YaHei_10)

        rpt.PageHeader.AddItemRect(1, (0, 50, 1020, 20),
                                   'Date:{}'.format(
                                       JPDateConver(QDate.currentDate(), str)),
                                   Bolder=False,
                                   AlignmentFlag=(Qt.AlignRight),
                                   Font=self.font_YaHei_8)

        cols = len(self.title_detail)
        al_c = Qt.AlignCenter
        al_r = (Qt.AlignVCenter | Qt.AlignRight)
        al_l = (Qt.AlignVCenter | Qt.AlignLeft)
        rpt.SetMargins(30, 30, 30, 30)
        title_height = 20
        rpt.ReportHeader.AddPrintLables(
            0,
            72,
            40,
            Texts=self.title_detail,
            Widths=[40, 470, 60, 60, 60, 60, 90, 90, 90],
            Aligns=[al_c] * cols)
        rpt.Detail.addPrintRowCountItem(0,
                                        0,
                                        40,
                                        20,
                                        AlignmentFlag=al_c,
                                        Font=self.font_YaHei_8)
        rpt.Detail.AddItem(
            3,
            40,
            0,
            470,
            20,
            self.fns[1],
            FormatString='{}',
            AlignmentFlag=al_l,
            # 超出长度省略
            AutoShrinkFont=self.configData['AutoShrinkFonts'],
            AutoEllipsis=self.configData['AutoEllipsis'],
            Font=self.font_YaHei_8)
        rpt.Detail.AddPrintFields(510,
                                  0,
                                  20,
                                  self.fns[2:], [60, 60, 60, 60, 90, 90, 90],
                                  [al_c] * 7,
                                  FormatString=' {}',
                                  Font=self.font_YaHei_8)

        # 页脚
        self.PageFooter.AddItemRect(4, (10, 0, 100, 20),
                                    '',
                                    FormatString='Page: {Page}/{Pages}',
                                    Bolder=False,
                                    AlignmentFlag=Qt.AlignLeft,
                                    Font=self.font_YaHei_8)
        self.PageFooter.AddItemRect(
            5, (100, 0, 920, 20),
            '',
            FormatString="PrintTime: %Y-%m-%d %H:%M:%S",
            Bolder=False,
            AlignmentFlag=Qt.AlignRight,
            Font=self.font_YaHei_8)
        self.DataSource = JPDb().getDict(self.sql)
Esempio n. 16
0
    def initItem(self):
        rpt = self
        rpt.PageHeader.AddItemRect(2, (0, 0, 274, 50), self.logo)
        rpt.PageHeader.AddItemRect(1, (274, 0, 376, 60),
                                   self.title,
                                   Bolder=False,
                                   AlignmentFlag=(Qt.AlignCenter),
                                   Font=self.font_YaHei_12)

        rpt.PageHeader.AddItemRect(1, (0, 50, 650, 20),
                                   'Date:{}'.format(
                                       JPDateConver(self.beginDate, str) +
                                       "--" + JPDateConver(self.endDate, str)),
                                   Bolder=False,
                                   AlignmentFlag=(Qt.AlignRight),
                                   Font=self.font_YaHei_8)

        cols = len(self.title_detail)
        al_c = Qt.AlignCenter
        al_r = (Qt.AlignVCenter | Qt.AlignRight)
        al_l = (Qt.AlignVCenter | Qt.AlignLeft)
        rpt.SetMargins(30, 30, 30, 30)
        title_height = 20
        rpt.ReportHeader.AddPrintLables(0,
                                        72,
                                        40,
                                        Texts=self.title_detail,
                                        Widths=[30, 70, 120, 310, 60, 60],
                                        Aligns=[al_c] * cols)
        rpt.Detail.addPrintRowCountItem(0,
                                        0,
                                        30,
                                        20,
                                        AlignmentFlag=al_c,
                                        Font=self.font_YaHei_8)
        rpt.Detail.AddPrintFields(30,
                                  0,
                                  20,
                                  self.fns[1:4], [70, 120, 310], [al_c] * 3,
                                  FormatString=' {}',
                                  Font=self.font_YaHei_8)

        rpt.Detail.AddPrintFields(530,
                                  0,
                                  20,
                                  self.fns[4:], [60]*2, [al_r] * 2,
                                  FormatString='{} ',
                                  Font=self.font_YaHei_8)

        # 页脚
        self.PageFooter.AddItemRect(4, (10, 0, 100, 20),
                                    '',
                                    FormatString='Page: {Page}/{Pages}',
                                    Bolder=False,
                                    AlignmentFlag=Qt.AlignLeft,
                                    Font=self.font_YaHei_8)
        self.PageFooter.AddItemRect(
            5, (0, 0, 650, 20),
            '',
            FormatString="PrintTime: %Y-%m-%d %H:%M:%S",
            Bolder=False,
            AlignmentFlag=Qt.AlignRight,
            Font=self.font_YaHei_8)
        self.DataSource = JPDb().getDict(self.sql)