Esempio n. 1
0
 def __init__(self):
     super(UsbResetter, self).__init__()
     self.P = UR_thread()
     self.thr_counter = 0
     self.Looping = None
     self.Hidden = None
     self.Fhidden = None
     self.s_error = "QStatusBar{color:red;font-weight:1000;}"
     self.s_loop = "QStatusBar{color:black;font-weight:1000;}"
     self.s_norm = "QStatusBar{color:blue;font-style:italic;"
     self.s_norm += "font-weight:500;}"
     favicon = r_path("images/favicon.png")
     logo = r_path("images/logo.png")
     if name == 'nt':
         favicon = r_path("images\\favicon.png")
         logo = r_path("images\\logo.png")
     self.favicon = QIcon(favicon)
     self.plogo = logo
     self.logo = QIcon(logo)
     self.setStyle()
     mlayout = QVBoxLayout()
     self.setAbout(mlayout)
     self.setUlist(mlayout)
     self.setCboxs(mlayout)
     self.setReset(mlayout)
     self.setLoop(mlayout)
     self.setSb(mlayout)
     # functionalities
     self.set_list()
     self.rootWarn()
     # initiation
     self.activateWindow()
     self.setLayout(mlayout)
     self.show()
Esempio n. 2
0
 def __init__(self, app=None):
     super(NewWindow, self).__init__()
     self.app = app
     glo = QVBoxLayout(self)
     if os.name == 'nt':
         icp = r_path('static\\images\\favicon.png')
     else:
         icp = r_path('static/images/favicon.png')
     # need to used objective message boxs instead of functions to set font
     self.Arial = QFont("", 15, QFont.Bold)
     self.Arials = QFont("", 10, QFont.Bold)
     # Language support varibels used by translate func
     self.Arabic = None
     self.Runningo = False
     icon = QIcon(icp)
     self.SelfIinit(icon)
     self.center()
     self.Llists(glo)
     self.set_Abutton(icp, glo)
     self.Lists(glo)
     self.Flabel(glo)
     self.set_button(glo)
     self.setLayout(glo)
     mip = self.slchange()
     self.P = rwser(mip[1].split(',')[1], mip[0], self.app)
     self.activateWindow()
     self.show()
Esempio n. 3
0
    def __init__(self):
        super(SafeLock, self).__init__()
        main_layout = QVBoxLayout(self)
        self.Version = '0.5 beta'
        self.s_error = "QStatusBar{color:red;font-weight:1000;}"
        self.s_loop = "QStatusBar{color:black;font-weight:1000;}"
        self.s_norm = "QStatusBar{color:blue;font-style:italic;"
        self.s_norm += "font-weight:500;}"
        self.Processing = None
        self.CP = None
        self.PPbar = None
        self.key = None
        self.DFiles = []

        self.picon = r_path("images/favicon.png")
        self.plogo = r_path("images/logo.png")
        if name == 'nt':
            self.picon = r_path("images\\favicon.png")
            self.plogo = r_path("images\\logo.png")
        self.icon = QIcon(self.picon)
        self.logo = QIcon(self.plogo)
        self.center()
        self.setStyle()
        self.setMW(main_layout)
        self.setSB(main_layout)
        self.show()
Esempio n. 4
0
def multi_del(f_id):
    if current_user.role_id != 1:
        flash(get_lang(0), "danger")
        return redirect(url_for('core.root'))
    dire = r_path('static/multimedia/')
    if data.Media.query.filter_by(used=False).count() <= 0:
        flash(get_lang(39), "danger")
        return redirect(url_for('cust_app.multimedia', aa=1))
    if f_id == 00:
        for a in data.Media.query:
            if not a.used:
                if os.path.exists(dire + a.name):
                    os.remove(dire + a.name)
                db.session.delete(a)
        db.session.commit()
        flash(get_lang(40), "info")
        return redirect(url_for('cust_app.multimedia', aa=1))
    mf = data.Media.query.filter_by(id=f_id).first()
    if mf is not None:
        if mf.used:
            flash(get_lang(39), "danger")
            return redirect(url_for('cust_app.multimedia', aa=1))
        if os.path.exists(dire + mf.name):
            os.remove(dire + mf.name)
        db.session.delete(mf)
        db.session.commit()
        flash(get_lang(40), "info")
        return redirect(url_for('cust_app.multimedia', aa=1))
    else:
        flash(get_lang(39), "danger")
        return redirect(url_for('core.root'))
Esempio n. 5
0
def create_app():
    app = Flask(__name__,
                static_folder=r_path('static'),
                template_folder=r_path('templates'))
    if getattr(sys, 'frozen', False):
        basedir = os.path.dirname(sys.executable)
    else:
        basedir = os.path.abspath(os.path.dirname(__file__))
    # bootstrap = Bootstrap(app)
    pagedown = PageDown(app)
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + r_path(
        'data.sqlite')
    # Autoreload if templates change
    app.config['TEMPLATES_AUTO_RELOAD'] = True
    # flask_upload settings
    # app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024 # Remove Upload limit. FIX ISSUE
    app.config['UPLOADED_FILES_DEST'] = r_path('static/multimedia')
    app.config['UPLOADED_FILES_ALLOW'] = mdal
    app.config['SECRET_KEY'] = os.urandom(24)
    # Intiating extensions before registering blueprints
    moment = Moment(app)
    qrc = QRcode(app)
    configure_uploads(app, files)
    login_manager.init_app(app)
    db.init_app(app)
    datepicker(
        app, local=['static/css/jquery-ui.min.css', 'static/jquery-ui.min.js'])
    colorpicker(app, local=['static/css/spectrum.css', 'static/spectrum.js'])
    fontpicker(app,
               local=[
                   'static/jquery-ui.min.js', 'static/css/jquery-ui.min.css',
                   'static/webfont.js', 'static/webfont.select.js',
                   'static/css/webfont.select.css'
               ])
    # Register blueprints
    app.register_blueprint(administrate)
    app.register_blueprint(core)
    app.register_blueprint(cust_app)
    app.register_blueprint(errorsh_app)
    app.register_blueprint(manage_app)
    return app
Esempio n. 6
0
 def s_server(self):
     mip = self.slchange()
     self.P = rwser(mip[1].split(',')[1], mip[0], self.app)
     self.P.setTerminationEnabled(True)
     if not self.P.isRunning():
         try:
             self.pport = mip[0]
             self.mbutton.setEnabled(False)
             self.mbutton2.setEnabled(True)
             self.sl.setEnabled(False)
             self.sl2.setEnabled(False)
             if os.name == 'nt':
                 self.ic1 = QIcon(r_path('static\\images\\play.png'))
             else:
                 self.ic1 = QIcon(r_path('static/images/play.png'))
             self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On)
             self.l.setPixmap(self.ic1)
             if self.Arabic is None:
                 pp = self.slchange()
                 addr = "Server is <u>Running</u> <br>"
                 addr += " On : <a href='http://"
                 addr += pp[1].split(',')[1] + ":" + pp[0]
                 addr += "'> http://" + pp[1].split(',')[1] + ":" + pp[0]
                 addr += "</a>"
                 self.t.setText(addr)
                 self.t.setFont(self.Arial)
             else:
                 pp = self.slchange()
                 addr = u"الخدمة <u>مشغــلة</u> و تبث على : <br>"
                 addr += u"<a href='http://"
                 addr += pp[1].split(',')[1] + u":" + pp[0]
                 addr += u"'> http://" + pp[1].split(',')[1] + u":" + pp[0]
                 addr += u"</a>"
                 self.t.setText(addr)
                 self.t.setFont(self.Arial)
             self.P.start()
             self.Runningo = True
         except:
             self.eout()
     else:
         self.eout()
Esempio n. 7
0
 def set_button(self, glo):
     hlayout = QHBoxLayout()
     self.mbutton = QPushButton('Start', self)
     self.mbutton.clicked.connect(self.s_server)
     self.mbutton.setFont(self.Arials)
     if os.name == 'nt':
         self.mbutton.setIcon(QPixmap(r_path('static\\images\\play.png')))
     else:
         self.mbutton.setIcon(QPixmap(r_path('static/images/play.png')))
     self.mbutton2 = QPushButton('Stop', self)
     self.mbutton2.clicked.connect(self.st_server)
     if os.name == 'nt':
         self.mbutton2.setIcon(QPixmap(r_path('static\\images\\pause.png')))
     else:
         self.mbutton2.setIcon(QPixmap(r_path('static/images/pause.png')))
     self.mbutton.setToolTip('Start the server')
     self.mbutton2.setToolTip('Stop the server')
     self.mbutton2.setEnabled(False)
     self.mbutton2.setFont(self.Arials)
     hlayout.addWidget(self.mbutton)
     hlayout.addWidget(self.mbutton2)
     glo.addLayout(hlayout)
Esempio n. 8
0
 def Flabel(self, glo):
     fontt = self.Arial
     if os.name == 'nt':
         self.ic1 = QIcon(r_path('static\\images\\pause.png'))
     else:
         self.ic1 = QIcon(r_path('static/images/pause.png'))
     self.l = QLabel('Icond', self)
     self.ic1 = self.ic1.pixmap(70, 70, QIcon.Active, QIcon.On)
     self.l.setPixmap(self.ic1)
     self.l.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)
     self.l.setFont(fontt)
     self.t = QLabel('Texted', self)
     self.t.setText("Server is <u> Not running </u> <br>")
     self.t.setOpenExternalLinks(True)
     self.t.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)
     self.t.setFont(fontt)
     self.t.setToolTip('Status of the server')
     self.l.setToolTip('Status of the server')
     glo.addStretch()
     glo.addWidget(self.l)
     glo.addWidget(self.t)
     glo.addStretch()
Esempio n. 9
0
 def Llists(self, glo):
     hlayout = QHBoxLayout()
     self.lebutton = QPushButton('English', self)
     self.lebutton.setToolTip('Change language to English')
     self.lebutton.setEnabled(False)
     self.lebutton.setFont(self.Arials)
     self.labutton = QPushButton('Arabic', self)
     self.labutton.setFont(self.Arials)
     if os.name == 'nt':
         self.lebutton.setIcon(
             QPixmap(r_path('static\\images\\english.png')))
         self.labutton.setIcon(QPixmap(
             r_path('static\\images\\arabic.png')))
     else:
         self.lebutton.setIcon(QPixmap(r_path('static/images/english.png')))
         self.labutton.setIcon(QPixmap(r_path('static/images/arabic.png')))
     self.labutton.setToolTip('Change language to Arabic')
     self.labutton.setEnabled(True)
     self.lebutton.clicked.connect(partial(self.translate, ar=False))
     self.labutton.clicked.connect(self.translate)
     hlayout.addWidget(self.lebutton)
     hlayout.addWidget(self.labutton)
     glo.addLayout(hlayout)
Esempio n. 10
0
def csvd(t_name):
    if current_user.role_id != 1:
        flash(get_lang(0), 'danger')
        return redirect(url_for('core.root'))
    form = forms.CSV()
    if session.get('lang') == "AR":
        form = forms.CSV_ar()
    t_ids = ['User', 'Office', 'Task', 'Serial', 'Waiting', 'Roles']
    if t_name in t_ids:
        t_name = eval('data.' + t_name)
        fn = 'csvd.csv'
        ffn = r_path(fn)
        of = open(ffn, 'w+')
        outcsv = csv.writer(of)
        outcsv.writerow([
            column.name for column in t_name.__mapper__.columns
            if column.name != 'password_hash'
        ])
        [
            outcsv.writerow([
                getattr(curr, column.name)
                for column in t_name.__mapper__.columns
                if column.name != 'password_hash'
            ]) for curr in t_name.query.all()
        ]
        of.close()
        return send_file(ffn, mimetype='csv', as_attachment=True)
    elif t_name != '0':
        flash(get_lang(4), 'danger')
        return redirect(url_for('core.root'))
    if form.validate_on_submit():
        return redirect(url_for('administrate.csvd', t_name=form.table.data))
    return render_template('csvs.html',
                           navbar='#snb3',
                           ptitle='Export CSV',
                           form=form)
Esempio n. 11
0
def pull(o_id):
    if os.name == 'nt':
        path = ex_functions.r_path('static\\tts\\')
    else:
        path = ex_functions.r_path('static/tts/')
    # FIX: pulling tickets by task_id instead of office_id
    # to allow for pulling form specific office
    if data.Task.query.filter_by(id=o_id).first() is None:
        flash(get_lang(4), "danger")
        return redirect(url_for("manage_app.task", o_id=o_id))
    if current_user.role_id == 3 and data.Operators.query.filter_by(
            id=current_user.id).first() is None:
        flash(get_lang(17), "danger")
        return redirect(url_for('core.root'))
    if current_user.role_id == 3 and data.Task.query.filter_by(
            id=o_id).first().office_id != data.Operators.query.filter_by(
                id=current_user.id).first().office_id:
        flash(get_lang(17), "danger")
        return redirect(url_for('core.root'))
    # Loading up the 10 waiting list
    if data.Serial.query.filter_by(p=False).count() >= 0:
        for a in range(data.Waiting.query.count(), 11):
            for b in data.Serial.query.filter_by(p=False).order_by(
                    data.Serial.timestamp):
                if data.Waiting.query.filter_by(
                        office_id=b.office_id, number=b.number,
                        task_id=b.task_id).first() is None:
                    db.session.add(
                        data.Waiting(b.number, b.office_id, b.task_id, b.name,
                                     b.n))
        db.session.commit()
    else:
        flash(get_lang(25), "danger")
        return redirect(url_for("manage_app.task", o_id=o_id))
    cs = data.Waiting.query.filter_by(task_id=o_id).first()
    if cs is None:
        flash(get_lang(25), "danger")
        return redirect(url_for("manage_app.task", o_id=o_id))
    # Fix: pulling tickets by task_id instead of office_id
    # have to switch positions
    theTask = data.Task.query.filter_by(id=o_id).first()
    ocs = data.Office.query.filter_by(id=theTask.office_id).first()
    toc = theTask.name
    # adding to current waiting
    cl = data.Waiting_c.query.first()
    cl.ticket = ocs.prefix + str(cs.number)
    cl.oname = ocs.prefix + str(ocs.name)
    cl.tname = toc
    cl.n = cs.n
    cl.name = cs.name
    data.db.session.add(cl)
    db.session.commit()
    # Adding text to speech
    lang = data.Display_store.query.first()
    tnumber = data.Printer.query.first().value
    office = cl.oname
    if lang.announce != "false":
        if os.path.isdir(path):
            rmtree(path)
        os.mkdir(path)
        langs = lang.announce.split(',')
        ticket = cl.name if cl.n else cl.ticket
        fileCode = str(randint(1, 999999)) + ".mp3"
        for l in langs:
            ms = TTS[l][0] if tnumber == 1 and not data.Printer.query.first(
            ).active else TTS[l][1]
            ms += (ticket).encode('utf-8')
            ms += TTS[l][2]
            ms += (office).encode('utf-8')
            say_it(ms, l, path + l + fileCode)
        lang.afile = fileCode
        db.session.add(lang)
        db.session.commit()
    # attempt to fix overleaping issue " Waiting instance is already deleted"
    # --- Reassigning cs seems to fix it
    # Fix: pulling tickets by task_id instead of office_id
    # modifying removing from  waiting with task_id
    cs = data.Waiting.query.filter_by(task_id=o_id).first()
    if cs is None:
        flash(get_lang(25), "danger")
        return redirect(url_for("manage_app.task", o_id=o_id))
    sr = data.Serial.query.filter_by(office_id=cs.office_id,
                                     task_id=cs.task_id,
                                     number=cs.number).first()
    if sr is None:
        flash(get_lang(25), "danger")
        return redirect(url_for("manage_app.task", o_id=o_id))
    sr.p = True
    sr.pdt = datetime.utcnow()
    # Fix: adding pulled by feature to tickets
    sr.pulledBy = current_user.id
    db.session.add(sr)
    db.session.delete(cs)
    db.session.commit()
    flash(get_lang(26), "info")
    return redirect(url_for("manage_app.task", o_id=o_id))
Esempio n. 12
0
def multimedia(aa):
    # Number of files limit
    nofl = 300
    # size folder limit in MB
    sfl = 2000  # Fix limited upload folder size
    if current_user.role_id != 1:
        flash(get_lang(0), "danger")
        return redirect(url_for('core.root'))
    ex_functions.mse()
    dire = r_path('static/multimedia/')
    pf = data.Media.query.order_by(data.Media.id.desc()).first()
    if pf is not None:
        pf = pf.name
    if aa == 0:
        # Fix limited upload folder size
        # if int(ex_functions.getFolderSize(dire)) >= sfl:
        #     flash(get_lang(36) + str(sfl) + "MB",
        #           "danger")
        #     return redirect(url_for('cust_app.multimedia', aa=1))
        if data.Media.query.count() >= nofl:
            flash(get_lang(37) + str(nofl), "danger")
            return redirect(url_for('cust_app.multimedia', aa=1))
        else:
            flash(get_lang(38), "success")
    elif aa != 1:
        flash(get_lang(4), "danger")
        return redirect(url_for("core.root"))
    mmm = data.Media.query
    page = request.args.get('page', 1, type=int)
    if page > int(data.Media.query.count() / 10) + 1:
        flash(get_lang(4), 'danger')
        return redirect(url_for('cust_app.multimedia', aa=1))
    pagination = data.Media.query.paginate(page, per_page=10, error_out=False)
    form = forms.Multimedia()
    if session.get('lang') == "AR":
        form = forms.Multimedia_ar()
    if mmm.count() >= 1:
        from sqlalchemy.sql import or_
        for me in mmm:
            if os.path.isfile(dire + me.name):
                dl = [
                    data.Display_store.query.filter(
                        or_(data.Display_store.ikey == me.id,
                            data.Display_store.akey == me.id)).first(),
                    data.Touch_store.query.filter(
                        or_(data.Touch_store.ikey == me.id,
                            data.Touch_store.akey == me.id)).first(),
                    data.Slides.query.filter_by(ikey=me.id).first(),
                    data.Vid.query.filter_by(vkey=me.id).first()
                ]
                me.used = False
                for d in dl:
                    if d is not None:
                        me.used = True
                        break
                db.session.add(me)
                db.session.commit()
            else:
                if me.img or me.audio or me.vid:
                    for t in [
                            data.Touch_store, data.Display_store, data.Slides
                    ]:
                        t = t.query.filter_by(
                            or_(data.Display_store.ikey == me.id,
                                data.Display_store.vkey == me.id)).first()
                        if me.img or me.vid and t is not None:
                            if me.img:
                                t.ikey = None
                            if me.vid:
                                t.vid = None
                            if t != data.Slides:
                                t.bgcolor = "bg-danger"
                            else:
                                t.bgname = "bg-danger"
                            db.session.add(t)
                        ttt = t.query.filter_by(akey=me.id).first()
                        if me.audio and ttt is not None:
                            if t != data.Slides:
                                t.akey = None
                                t.audio = "false"
                                db.session.add(t)
                db.session.delete(me)
        db.session.commit()
    if form.validate_on_submit():
        ff = form.mf.data
        ffn = secure_filename(ff.filename)
        dc = data.Media.query.count()
        # FIX ISUUE Remove folder size limitation
        # if int(ex_functions.getFolderSize(dire)) >= sfl or dc >= nofl:
        #     return redirect(url_for('cust_app.multimedia', aa=1))
        e = ffn[-3:len(ffn)]
        if e in mdal[0]:
            files.save(request.files['mf'], name=ffn)
            if imghdr.what(dire + ffn) is None:
                os.remove(dire + ffn)
                return redirect(url_for("cust_app.multimedia", aa=1))
            db.session.add(data.Media(False, False, True, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        elif e in mdal[1]:
            files.save(request.files['mf'], name=ffn)
            if sndhdr.what(dire + ffn) is None:
                os.remove(dire + ffn)
                return redirect(url_for("cust_app.multimedia", aa=1))
            db.session.add(data.Media(False, True, False, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        elif e in mdal[2]:
            files.save(request.files['mf'], name=ffn)
            db.session.add(data.Media(True, False, False, False, ffn))
            db.session.commit()
            return redirect(url_for("cust_app.multimedia", aa=1))
        else:
            flash(get_lang(4), "danger")
            return redirect(url_for("cust_app.multimedia", aa=1))
    return render_template("multimedia.html",
                           ptitle="Multimedia",
                           navbar="#snb2",
                           form=form,
                           hash="#da1",
                           mmm=mmm,
                           len=len,
                           ml=mdal,
                           mmmp=pagination.items,
                           pagination=pagination,
                           tc=data.Touch_store.query,
                           sl=data.Slides.query,
                           dc=data.Display_store.query,
                           fs=int(ex_functions.getFolderSize(dire)),
                           nofl=nofl,
                           sfl=sfl,
                           vtrue=data.Vid.query.first().enable,
                           strue=data.Slides_c.query.first().status)
Esempio n. 13
0
def printwin_ar(pname, ti, ofc, tnu, tas, cticket, ip):
    def fsizeit(text, t, f):
        ltxt = "A" * len(t)
        return f.getsize(t)

    def center(text, t, f):
        fs1, fs2 = fsizeit(text, t, f)
        return ((text.size[0] - fs1) / 2, (text.size[1] - fs2) / 2)

    if name == 'nt':
        fpath = r_path('static\\gfonts\\arial.ttf')
    else:
        fpath = r_path('static/gfonts/arial.ttf')
    fonts = [
        ImageFont.truetype(fpath, 50),
        ImageFont.truetype(fpath, 30),
        ImageFont.truetype(fpath, 25)
    ]

    logo = 'FQM ' + version[:4]
    title = u'نظام إدارة الحشود الحر'
    title = arabic_reshaper.reshape(title)
    title = get_display(title)
    link = 'http://fqms.github.io'
    border = "#" * 20
    ticket = str(ti)
    officet = u'المكتب : ' + ofc
    office = arabic_reshaper.reshape(officet)
    office = get_display(office)
    try:
        taskt = u'المهمة : ' + tas
    except:
        taskt = tas
    task = arabic_reshaper.reshape(taskt)
    task = get_display(task)
    datet = u'الوقت : '
    datet += str(datetime.now())[:-7]
    date = arabic_reshaper.reshape(datet)
    date = get_display(date)
    aheadt = u'تذاكر قبلك : '
    aheadt += str(tnu)
    ahead = arabic_reshaper.reshape(aheadt)
    ahead = get_display(ahead)
    cutit = u'التذكرة الحالية : '
    cutit += str(cticket)
    cuti = arabic_reshaper.reshape(cutit)
    cuti = get_display(cuti)

    w = 400
    bt_1 = Image.new('RGB', (w, 60), "white")
    bt_2 = Image.new('RGB', (w, 60), "white")
    bt_3 = Image.new('RGB', (w, 60), "white")
    st_1 = Image.new('RGB', (w, 50), "white")
    st_2 = Image.new('RGB', (w, 50), "white")
    st_3 = Image.new('RGB', (w, 50), "white")
    st_4 = Image.new('RGB', (w, 50), "white")
    st_5 = Image.new('RGB', (w, 50), "white")
    st_6 = Image.new('RGB', (w, 50), "white")
    st_7 = Image.new('RGB', (w, 50), "white")
    st_8 = Image.new('RGB', (w, 50), "white")
    tt = 50 * 8
    tt += 60 * 3
    mt = Image.new('RGB', (w, tt), "white")

    bd_1 = ImageDraw.Draw(bt_1)
    bd_2 = ImageDraw.Draw(bt_2)
    bd_3 = ImageDraw.Draw(bt_3)
    sd_1 = ImageDraw.Draw(st_1)
    sd_2 = ImageDraw.Draw(st_2)
    sd_3 = ImageDraw.Draw(st_3)
    sd_4 = ImageDraw.Draw(st_4)
    sd_5 = ImageDraw.Draw(st_5)
    sd_6 = ImageDraw.Draw(st_6)
    sd_7 = ImageDraw.Draw(st_7)
    sd_8 = ImageDraw.Draw(st_8)
    md = ImageDraw.Draw(mt)

    b = "black"
    bd_1.text(center(bt_1, logo, fonts[0]), logo, font=fonts[0], fill=b)
    bd_2.text(center(bt_2, title, fonts[1]), title, font=fonts[1], fill=b)
    bd_3.text(center(bt_3, ticket, fonts[0]), ticket, font=fonts[0], fill=b)
    sd_1.text(center(st_1, link, fonts[2]), link, font=fonts[2], fill=b)
    sd_2.text(center(st_2, border, fonts[2]), border, font=fonts[2], fill=b)
    sd_3.text(center(st_3, border, fonts[2]), border, font=fonts[2], fill=b)
    sd_4.text(center(st_4, office, fonts[2]), office, font=fonts[2], fill=b)
    sd_5.text(center(st_5, task, fonts[2]), task, font=fonts[2], fill=b)
    sd_6.text(center(st_6, date, fonts[2]), date, font=fonts[2], fill=b)
    sd_7.text(center(st_7, ahead, fonts[2]), ahead, font=fonts[2], fill=b)
    sd_8.text(center(st_8, cuti, fonts[2]), cuti, font=fonts[2], fill=b)

    tts = 0
    mt.paste(bt_1, (0, 0))
    tts += bt_1.size[1]
    mt.paste(bt_2, (0, tts))
    tts += bt_2.size[1]
    mt.paste(st_1, (0, tts))
    tts += st_1.size[1]
    mt.paste(st_2, (0, tts))
    tts += st_2.size[1]
    mt.paste(bt_3, (0, tts))
    tts += bt_3.size[1]
    mt.paste(st_3, (0, tts))
    tts += st_3.size[1]
    mt.paste(st_4, (0, tts))
    tts += st_4.size[1]
    mt.paste(st_8, (0, tts))
    tts += st_8.size[1]
    mt.paste(st_7, (0, tts))
    tts += st_7.size[1]
    mt.paste(st_5, (0, tts))
    tts += st_5.size[1]
    mt.paste(st_6, (0, tts))

    sffs = []
    sfs = ['dummy.jpg', 'dummy.txt']
    for f in sfs:
        sffs.append(path.join(getcwd(), f))
    mt.save(sfs[0], format="JPEG")
    p = Dummy()
    p.image(sfs[0], fragment_height=tt, high_density_vertical=True)
    p.cut()
    f = open(sfs[1], 'w')
    f.write(p.output)
    p.close()
    f.close()
    lh = ip
    text = 'print /D:\\\%s\\"%s" "%s"' % (lh, pname, sfs[1])
    system(text)
    for f in sffs:
        if path.isfile(f):
            remove(f)