Пример #1
0
    def pdf(self, operationName, classic=None, template_file=None):
        """ Restituisce una stringa contenente il report in formato PDF
        """
        azienda = Azienda().getRecord(id=Environment.azienda)
        scribusVersion(self._slaTemplate)
        if not Environment.new_print_enjine:
            if self._slaTemplateObj is None:
                self._slaTemplateObj = SlaTpl2Sla(
                                        slaFileName=self._slaTemplate,
                                        pdfFolder=self._anagrafica._folder,
                                        report=self._anagrafica._reportType,
                                        classic=classic,
                                        template_file=template_file)

        param = []
        for d in self.objects:
            d.resolveProperties()
            param.append(d.dictionary(complete=True))
        multilinedirtywork(param)
        if azienda and param:
            azidict = azienda.dictionary(complete=True)
            for a, b in azidict.items():
                k = "azi_" + a
                azidict[k] = b
                del azidict[a]
            param[0].update(azidict)
        if not Environment.new_print_enjine:
            return self._slaTemplateObj.serialize(param, self.objects)
        else:
            return Sla2Pdf(slaFileName=self._slaTemplate,
                        pdfFolder=self._anagrafica._folder,
                        report=self._anagrafica._reportType).createPDF(
                                        objects=param, daos=self.objects)
    def pdf(self, operationName, classic=None, template_file=None):
        """ Restituisce una stringa contenente il report in formato PDF
        """
        azienda = Azienda().getRecord(id=Environment.azienda)
        param = []
        for d in self.objects:
            d.resolveProperties()
            param.append(d.dictionary(complete=True))
#        multilinedirtywork(param)
        if azienda:
            azidict = azienda.dictionary(complete=True)
            for a, b in azidict.items():
                k = "azi_" + a
                azidict[k] = b
                del azidict[a]
            if param:
                param[0].update(azidict)
        if template_file:
            scribusVersion(Environment.labelTemplatesDir + template_file)
        else:
            scribusVersion(self._slaTemplate)
        if not Environment.new_print_enjine:
            print "OLD PRINT ENGINE"
            self._slaTemplateObj = SlaTpl2Sla(slaFileName=self._slaTemplate,
                                        pdfFolder=self._anagrafica._folder,
                                        report=self._anagrafica._reportType,
                                        label=True).serialize(
                                                param,
                                                self.objects,
                                                classic=classic,
                                                template_file=template_file)
            return self._slaTemplateObj
        else:
            print "NEW PRINT ENGINE"
            if template_file:
                slafile = Environment.labelTemplatesDir + template_file
            else:
                slafile = self._slaTemplate
            SlaTpl2Sla_ng(slafile=None, label=True,
                                    report=self._anagrafica._reportType,
                                    objects=param, daos=self.objects,
                                    slaFileName=slafile,
                                    pdfFolder=self._anagrafica._folder,
                                    classic=classic,
                                    template_file=template_file)
            return Sla2Pdf_ng(slafile=self._anagrafica._folder \
                                    + "_temppp.sla").translate()
Пример #3
0
    def __init__(self, mainWindow):
        self._mainWindow = mainWindow
        self.dao = Azienda()
        GladeWidget.__init__(self,
            root='anagrafica_azienda',
            path='anagrafica_azienda.glade')
        self.getTopLevel()
        self.placeWindow(self.getTopLevel())
        self.getTopLevel().set_modal(modal=True)

        self.draw()
    def pdf(self, operationName, classic=None, template_file=None):
        """ Qui si stampa selezione """
        from sqlalchemy.orm import undefer_group
        self._slaTemplate = None
        self._slaTemplateObj = None
        # aggiungo i dati azienda al dao in modo che si gestiscano a monte
        azienda = Azienda().getRecord(id=Environment.azienda)
        operationNameUnderscored = operationName.replace(' ', '_').lower()
        a = Environment.templatesDir.decode("utf-8") + operationNameUnderscored + '.sla'
        Environment.pg2log.info(a)
        if os.path.exists(Environment.templatesDir + operationNameUnderscored \
                                                                + '.sla'):
            self._slaTemplate = Environment.templatesDir \
                                    + operationNameUnderscored \
                                    + '.sla'
        elif "DDT" in operationName and \
                        os.path.exists(Environment.templatesDir + 'ddt.sla'):
            self._slaTemplate = Environment.templatesDir + 'ddt.sla'
        else:
            self._slaTemplate = Environment.templatesDir \
                                        + self.defaultFileName \
                                        + '.sla'
        """ Restituisce una stringa contenente il report in formato PDF """
        if self.dao.__class__.__name__ in Environment.fromHtmlLits:
            operation = Gtk.PrintOperation()
            setting = Gtk.PageSetup()
            ps = Gtk.PaperSize.new_custom("cc", "cc", 210, 297, gtk.Unit.MM)
            st = Gtk.PrintSettings()
            s = Gtk.PageSetup()
            s.set_paper_size(ps)
            margine_fondo = float(setconf("Stampa", "singolo_margine_basso")or 4.3)
            s.set_bottom_margin(margine_fondo, gtk.Unit.MM)
            margine_sinistro = float(setconf("Stampa", "singolo_margine_sinistro")or 4.3)
            s.set_left_margin(margine_sinistro, gtk.Unit.MM)
            margine_destro = float(setconf("Stampa", "singolo_margine_destro")or 4.3)
            s.set_right_margin(margine_destro, gtk.Unit.MM)
            margine_alto = float(setconf("Stampa", "singolo_margine_alto")or 4.3)
            s.set_top_margin(margine_alto, gtk.Unit.MM)
            orientamento = str(setconf("Stampa", "singolo_ori"))
            if orientamento == "orizzontale":
                s.set_orientation(Gtk.PageOrientation.LANDSCAPE)
            operation.set_default_page_setup(s)
            operation.set_export_filename(Environment.tempDir + ".temp.pdf")
            p = self._gtkHtml.get_main_frame().print_full(operation,gtk.PrintOperationAction.EXPORT)
            g = file(Environment.tempDir + ".temp.pdf", "rb")
            f = g.read()
            g.close()
            return f
        param = [self.dao.dictionary(complete=True)]
        multilinedirtywork(param)
        if azienda:
            azidict = azienda.dictionary(complete=True)
            for a, b in azidict.items():
                k = "azi_" + a
                azidict[k] = b
                del azidict[a]
            param[0].update(azidict)
        if 'operazione' in param[0] and 'causale_trasporto' in param[0]:
            if (param[0]["operazione"] in ["DDT vendita", "DDT acquisto"]) \
                 and param[0]["causale_trasporto"] != "":
                param[0]["operazione"] = "DDT"

        # controllo la versione dello sla che devo elaborare
        versione = scribusVersion(self._slaTemplate)
        Environment.pg2log.info("VERSIONE SLA: " + str(versione))

        if Environment.new_print_enjine:
            stpl2sla = SlaTpl2Sla_ng(
                            slafile=None, label=None, report=None,
                            objects=param,
                            daos=self.dao,
                            slaFileName=self._slaTemplate,
                            pdfFolder=self._anagrafica._folder,
                            classic=True,
                            template_file=None).fileElaborated()
            return Sla2Pdf_ng(slafile=stpl2sla).translate()
        else:
            if self._slaTemplateObj is None:
                self._slaTemplateObj = SlaTpl2Sla(
                                        slaFileName=self._slaTemplate,
                                        pdfFolder=self._anagrafica._folder,
                                        report=self._anagrafica._reportType,
                                        classic=True,
                                        template_file=template_file)
            print("DAO IN STAMPA CLASSICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
            Environment.pg2log.info("DAO IN STAMPA CLASSIC: " + str(self.dao))
            return self._slaTemplateObj.serialize(param, classic=True,
                                                  dao=self.dao)
Пример #5
0
 def setDao(self):
     # Creazione dao azienda corrente
     self.dao = Azienda().getRecord(id=Environment.params["schema"])
     if not self.dao:
         self.dao = Azienda().getRecord(id=Environment.azienda)
     self._refresh()
Пример #6
0
class AnagraficaAziende(GladeWidget):
    """ Anagrafica aziende """
    filename = None

    def __init__(self, mainWindow):
        self._mainWindow = mainWindow
        self.dao = Azienda()
        GladeWidget.__init__(self,
            root='anagrafica_azienda',
            path='anagrafica_azienda.glade')
        self.getTopLevel()
        self.placeWindow(self.getTopLevel())
        self.getTopLevel().set_modal(modal=True)

        self.draw()

    def draw(self):
        # Popolamento campi in maschera dal dao
        self.setDao()

    def show_all(self):
        """ Visualizza/aggiorna tutta la struttura dell'anagrafica """
        self.show()

    def setDao(self):
        # Creazione dao azienda corrente
        self.dao = Azienda().getRecord(id=Environment.params["schema"])
        if not self.dao:
            self.dao = Azienda().getRecord(id=Environment.azienda)
        self._refresh()

    def _refresh(self):
        self.denominazione_entry.set_text(
            self.dao.denominazione or '')
        self.ragione_sociale_entry.set_text(
            self.dao.ragione_sociale or '')
        self.localita_sede_operativa_entry.set_text(
            self.dao.sede_operativa_localita or '')
        self.indirizzo_sede_operativa_entry.set_text(
            self.dao.sede_operativa_indirizzo or '')
        self.numero_sede_operativa_entry.set_text(
            self.dao.sede_operativa_numero or '')
        self.cap_sede_operativa_entry.set_text(
            self.dao.sede_operativa_cap or '')
        self.provincia_sede_operativa_entry.set_text(
            self.dao.sede_operativa_provincia or '')
        self.localita_sede_legale_entry.set_text(
            self.dao.sede_legale_localita or '')
        self.indirizzo_sede_legale_entry.set_text(
            self.dao.sede_legale_indirizzo or '')
        self.numero_sede_legale_entry.set_text(
            self.dao.sede_legale_numero or '')
        self.cap_sede_legale_entry.set_text(
            self.dao.sede_legale_cap or '')
        self.provincia_sede_legale_entry.set_text(
            self.dao.sede_legale_provincia or '')
        self.codice_fiscale_entry.set_text(
            self.dao.codice_fiscale or '')
        self.partita_iva_entry.set_text(
            self.dao.partita_iva or '')
        self.data_iscrizione_cciaa_entry.set_text(
            dateToString(self.dao.iscrizione_cciaa_data or ''))
        self.numero_iscrizione_cciaa_entry.set_text(
            self.dao.iscrizione_cciaa_numero or '')
        self.data_iscrizione_tribunale_entry.set_text(
            dateToString(self.dao.iscrizione_tribunale_data or ''))
        self.numero_iscrizione_tribunale_entry.set_text(
            self.dao.iscrizione_tribunale_numero or '')
        self.codice_rea_entry.set_text(
            self.dao.codice_rea or '')
        self.matricola_inps_entry.set_text(
            self.dao.matricola_inps or '')
        #self.path_label.set_text(self.dao.percorso_immagine or '')
        self.logo_azienda.set_from_file(
            self.dao.percorso_immagine or "")
        self.telefono_entry.set_text(self.dao.telefono or '')
        self.progressivo_entry.set_text(self.dao.progressivo_fatturapa or 'A0001')
        #self.percorso_immagine_entry.set_text(self.dao.percorso_immagine or '')

    def saveDao(self):
        self.dao.denominazione = self.denominazione_entry.get_text()
        self.dao.ragione_sociale = self.ragione_sociale_entry.get_text()
        self.dao.sede_operativa_localita = \
                                self.localita_sede_operativa_entry.get_text()
        self.dao.sede_operativa_indirizzo = \
                                self.indirizzo_sede_operativa_entry.get_text()
        self.dao.sede_operativa_numero = \
                                self.numero_sede_operativa_entry.get_text()
        self.dao.sede_operativa_cap = self.cap_sede_operativa_entry.get_text()
        self.dao.sede_operativa_provincia = \
                                self.provincia_sede_operativa_entry.get_text()
        self.dao.sede_legale_localita =\
                                 self.localita_sede_legale_entry.get_text()
        self.dao.sede_legale_indirizzo = \
                                self.indirizzo_sede_legale_entry.get_text()
        self.dao.sede_legale_numero = self.numero_sede_legale_entry.get_text()
        self.dao.sede_legale_cap = self.cap_sede_legale_entry.get_text()
        self.dao.sede_legale_provincia = \
                                self.provincia_sede_legale_entry.get_text()
        self.dao.codice_fiscale = self.codice_fiscale_entry.get_text()
        self.dao.partita_iva = self.partita_iva_entry.get_text()
        self.dao.iscrizione_cciaa_data = \
                    stringToDate(self.data_iscrizione_cciaa_entry.get_text())
        self.dao.iscrizione_cciaa_numero = \
                    self.numero_iscrizione_cciaa_entry.get_text()
        self.dao.iscrizione_tribunale_data = \
                stringToDate(self.data_iscrizione_tribunale_entry.get_text())
        self.dao.iscrizione_tribunale_numero = \
                            self.numero_iscrizione_tribunale_entry.get_text()
        self.dao.codice_rea = self.codice_rea_entry.get_text()
        self.dao.matricola_inps = self.matricola_inps_entry.get_text()

        self.dao.telefono = self.telefono_entry.get_text()
        self.dao.progressivo_fatturapa = self.progressivo_entry.get_text()

        self.dao.percorso_immagine = self.filename or ''
        #self.path_label.get_text() #+"/"+self.filena
        if self.dao.codice_fiscale != '':
            codfis = checkCodFisc(self.dao.codice_fiscale)
            if not codfis:
                return False
        if self.dao.partita_iva != '':
            partiva = checkPartIva(self.dao.partita_iva)
            if not partiva:
                return False
        return True

    def on_seleziona_logo_button_clicked(self, widget):
        self.logo_filechooserdialog.run()
        if self.dao.percorso_immagine:
            self.logo_filechooserdialog.set_filename(self.dao.percorso_immagine)

#    def on_logo_filechooserdialog_file_activated(self, widget):
#        filename = self.logo_filechooserdialog.get_filename()
#        self.path_label.set_text(filename)
#        f = self.resizeImgThumbnailGeneric(filename = filename)
##        self.logo_azienda.set_from_file(f)
#        self.logo_image2.set_from_file(f)

    def on_chiudi_button_clicked(self, button):
        self.logo_filechooserdialog.hide()

    def on_apri_button_clicked(self, button):
        self.filename = self.logo_filechooserdialog.get_filename()
        #self.path_label.set_text(filename)
#        f = self.resizeImgThumbnailGeneric(filename = filename)
        self.logo_azienda.set_from_file(self.filename)
        self.logo_filechooserdialog.hide()

    def on_rimuovi_logo_clicked(self, button):
        self.logo_azienda.set_from_file("")
        self.dao.percorso_immagine = None
        self.filename = None
        #self.path_label.set_text("")

    def resizeImgThumbnailGeneric(self, req=None, filename=None):
        """
        funzione di ridimensionamento immagine per la lista, di fatto
        crea un thumnail dell'immagine stessa
        """
        if filename:
            try:
                self.filena = filename.split("/")[-1]
                im1 = Image.open(filename)
                width = int(setconf("Documenti", "larghezza_logo"))
                height = int(setconf("Documenti", "altezza_logo"))
                im5 = im1.resize((width, height), Image.ANTIALIAS)
                newname = 'resize_' + self.filena
                p = os.path.dirname(filename)
                im5.save(p + "/" + newname)
                return p + "/" + newname
            except:
                print "ERRORE NEL LOGO", filename
        return ""

    def on_apply_button_clicked(self, button):
        save = self.saveDao()
        if save:
            self.dao.persist()
            self.getTopLevel().destroy()

    def on_contatti_togglebutton_toggled(self, toggleButton):
        if not(toggleButton.get_active()):
            toggleButton.set_active(False)
            return
        if posso("CN"):
            from promogest.ui.Contatti.AnagraficaContatti import\
                                                         AnagraficaContatti
            anag = AnagraficaContatti(self.dao.schemaa, 'azienda')
            anagWindow = anag.getTopLevel()

            showAnagraficaRichiamata(self._mainWindow.getTopLevel(),
                                                    anagWindow, toggleButton)
        else:
            fenceDialog()
            toggleButton.set_active(False)

    def on_banche_azienda_button_clicked(self, button):
        from promogest.ui.AnagraficaBancheAzienda import AnagraficaBancheAzienda
        anag = AnagraficaBancheAzienda(self.dao.schemaa)
        anagWindow = anag.getTopLevel()
        returnWindow = button.get_toplevel()
        anagWindow.set_transient_for(returnWindow)
        anagWindow.show_all()

    def on_account_mail_button_clicked(self, button):
        from promogest.ui.AnagraficaAccountMail import AnagraficaAccountMail
        anag = AnagraficaAccountMail(self.dao.schemaa)
        anagWindow = anag.getTopLevel()
        returnWindow = button.get_toplevel()
        anagWindow.set_transient_for(returnWindow)
        anagWindow.show_all()

    def on_chiudi_butto_clicked(self,button):
        self.getTopLevel().destroy()
Пример #7
0
def _to_pdf(dao, classic=None, template_file=None):
    operationName = dao.operazione

    operationNameUnderscored = operationName.replace(' ', '_').lower()

    _slaTemplate = None

    # aggiungo i dati azienda al dao in modo che si gestiscano a monte
    azienda = Azienda().getRecord(id=Environment.azienda)

    if os.path.exists(Environment.templatesDir + operationNameUnderscored + '.sla'):
        _slaTemplate = Environment.templatesDir + operationNameUnderscored + '.sla'
    elif "DDT" in operationName and \
            os.path.exists(Environment.templatesDir + 'ddt.sla'):
        _slaTemplate = Environment.templatesDir + 'ddt.sla'
    else:
        _slaTemplate = Environment.templatesDir + 'documento.sla'
    """ Restituisce una stringa contenente il report in formato PDF """

    if dao.__class__.__name__ in Environment.fromHtmlLits:
        from  xhtml2pdf import pisa
        #f = self.hh
        g = file(Environment.tempDir + ".temp.pdf", "wb")
        pisa.CreatePDF(str(f), g)
        g.close()
        g = file(Environment.tempDir + ".temp.pdf", "r")
        f = g.read()
        g.close()
        return f

    param = [dao.dictionary(complete=True)]

    utils.multilinedirtywork(param)

    try:
        if hasattr(Environment.conf.Documenti, "jnet"):
            from promogest.modules.NumerazioneComplessa.jnet import \
                numerazioneJnet

            param[0]["numero"] = numerazioneJnet(dao)
    except:
        pass

    if azienda:
        azidict = azienda.dictionary(complete=True)
        for a, b in azidict.items():
            k = "azi_" + a
            azidict[k] = b
            del azidict[a]
        param[0].update(azidict)

    if 'operazione' in param[0] and 'causale_trasporto' in param[0]:
        if (param[0]["operazione"] in ["DDT vendita", "DDT acquisto"]) \
                and param[0]["causale_trasporto"] != "":
            param[0]["operazione"] = "DDT"

    _anagrafica_folder = tempfile.gettempdir() + os.sep

    stpl2sla = SlaTpl2Sla_ng(slafile=None, label=None, report=None,
                             objects=param,
                             daos=dao,
                             slaFileName=_slaTemplate,
                             pdfFolder=_anagrafica_folder,
                             classic=True,
                             template_file=None).fileElaborated()
    return Sla2Pdf_ng(slafile=stpl2sla).translate()
Пример #8
0
    def on_export_fatturapa_toolbutton_clicked(self, widget):
        daos = get_selected_daos(self.anagrafica_filter_treeview)
        if len(daos) > 0:
            #try:
            #    do_send_mail(daos, self, formato='xml')
            #except (NoAccountEmailFound, NetworkError) as ex:
            #    messageError(str(ex))
            azienda = Azienda().getRecord(id=Environment.azienda)
            progressivo = azienda.progressivo_fatturapa or 'A0001'
            for dao in daos:
                saveDialog = gtk.FileChooserDialog("export in a file...",
                                                   None,
                                                   GTK_FILE_CHOOSER_ACTION_SAVE,
                                                   (gtk.STOCK_CANCEL,
                                                    GTK_RESPONSE_CANCEL,
                                                    gtk.STOCK_SAVE,
                                                    GTK_RESPONSE_OK))
                saveDialog.set_default_response(GTK_RESPONSE_OK)

                self.__homeFolder = setconf("General", "cartella_predefinita") or ""
                if self.__homeFolder == '':
                    if os.name == 'posix':
                        self.__homeFolder = os.environ['HOME']
                    elif os.name == 'nt':
                        self.__homeFolder = os.environ['USERPROFILE']
                saveDialog.set_current_folder(self.__homeFolder)
                # folder = self.__homeFolder

                filter = gtk.FileFilter()
                filter.set_name("All files")
                filter.add_pattern("*")
                saveDialog.add_filter(filter)

                filter1 = gtk.FileFilter()
                filter1.set_name("XML files")
                filter1.add_pattern("*.xml")
                filter1.add_pattern("*.XML")
                saveDialog.add_filter(filter1)
                current_name = ""
                if azienda.partita_iva:
                    current_name = "".join(['IT', azienda.partita_iva, '_', progressivo, '.xml'])
                if azienda.codice_fiscale:
                    current_name = "".join(['IT', azienda.codice_fiscale, '_', progressivo, '.xml'])
                if not current_name:
                    messageWarning(msg="ATTENZIONE! Partita iva  o codice fiscale azienda mancanti")
                    return

                xml = to_fatturapa(dao, progressivo=progressivo)
                if not xml:
                    return

                saveDialog.set_filter(filter1)
                saveDialog.set_current_name(current_name)

                saveDialog.show_all()
                response = saveDialog.run()
                if response == GTK_RESPONSE_OK:
                    filename = saveDialog.get_filename()
                    with open(filename, 'w') as fp:
                        fp.write(xml.encode("utf-8"))
                        # incrementa il progressivo
                        azienda.progressivo_fatturapa = ''.join(
                            [progressivo[0], str(int(progressivo[1:]) + 1).zfill(4)])
                        Environment.session.commit()
                    saveDialog.destroy()
                elif response == GTK_RESPONSE_CANCEL:
                    saveDialog.destroy()