Example #1
0
    def __init__(self, **kwargs):
        with get_session() as s:
            self.number = kwargs["number"]
            self.species = get_species(s, kwargs["species"])
            self.background = get_background(s, kwargs["background"])
            self.start = kwargs["start"]
            self.end = kwargs["end"]


# todo: clean up the retry removal
        g1 = aliased(Game)
        g2 = aliased(Game)
        possiblegames = self._valid_games(g1).add_columns(
            g1.player_id, g1.start, g1.end).filter(
                g1.gid.in_(
                    self._valid_games(g2).filter(
                        g2.player_id == g1.player_id).order_by(
                            g2.start).limit(2))).join(
                                latestmilestones,
                                g1.gid == latestmilestones.c.gid).add_column(
                                    latestmilestones.c.xl).cte()
        pg2 = possiblegames.alias()
        self.gids = Query(possiblegames.c.gid).outerjoin(
            pg2,
            and_(
                pg2.c.player_id == possiblegames.c.player_id,
                possiblegames.c.start > pg2.c.start)).filter(pg2.c.gid == None)
Example #2
0
    def deleteLedger(self, sender):
        selection = self.treeview.get_selection()
        iter = selection.get_selected()[1]
        if iter != None:
            Subject1 = aliased(Subject, name="s1")
            Subject2 = aliased(Subject, name="s2")

            code = convertToLatin(self.treestore.get(iter, 0)[0])

            #Check to see if there is any subledger for this ledger.
            query = config.db.session.query(Subject1.id, count(Subject2.id))
            query = query.select_from(
                outerjoin(Subject1, Subject2,
                          Subject1.id == Subject2.parent_id))
            result = query.filter(Subject1.code == code).first()

            if result[1] != 0:
                msgbox = gtk.MessageDialog(
                    self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR,
                    gtk.BUTTONS_CLOSE,
                    _("Subject can not be deleted, because it has some child subjects."
                      ))
                msgbox.set_title(_("Error deleting subject"))
                msgbox.run()
                msgbox.destroy()
            else:
                # check to see if there is any document registered for this ledger.
                query = config.db.session.query(count(Notebook.id))
                query = query.filter(Notebook.subject_id == result[0])
                rowcount = query.first()[0]
                if rowcount != 0:
                    msgbox = gtk.MessageDialog(
                        self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR,
                        gtk.BUTTONS_CLOSE,
                        _("Subject can not be deleted, because there are some documents registered for it."
                          ))
                    msgbox.set_title(_("Error deleting subject"))
                    msgbox.run()
                    msgbox.destroy()
                else:
                    # Now it's OK to delete ledger
                    row = config.db.session.query(Subject).filter(
                        Subject.id == result[0]).first()
                    sub_left = row.lft
                    config.db.session.delete(row)

                    rlist = config.db.session.query(Subject).filter(
                        Subject.rgt > sub_left).all()
                    for r in rlist:
                        r.rgt -= 2
                        config.db.session.add(r)

                    llist = config.db.session.query(Subject).filter(
                        Subject.lft > sub_left).all()
                    for l in llist:
                        l.lft -= 2
                        config.db.session.add(l)

                    config.db.session.commit()
                    self.treestore.remove(iter)
    def get_by_organization(self,
                            corporation=None,
                            direction=None,
                            service=None,
                            site=None,
                            subsite=None,
                            enabled=True):
        def tr(label):
            return label.replace('*', '%')

        q = self._query()
        if corporation:
            corporation_alias = aliased(OrganizationData)
            q = q.join((corporation_alias, UserData.corporation)).filter(
                corporation_alias.label.like(tr(corporation)))
        if direction:
            direction_alias = aliased(OrganizationData)
            q = q.join((direction_alias, UserData.direction)).filter(
                direction_alias.label.like(tr(direction)))
        if service:
            service_alias = aliased(OrganizationData)
            q = q.join((service_alias, UserData.service)).filter(
                service_alias.label.like(tr(service)))
        if site:
            site_alias = aliased(OrganizationData)
            q = q.join((site_alias,
                        UserData.site)).filter(site_alias.label.like(tr(site)))

        if subsite:
            subsite_alias = aliased(OrganizationData)
            q = q.join(
                (subsite_alias,
                 UserData.subsite)).filter(subsite_alias.label.like(tr(site)))

        return self._filter_by_enabled(q, enabled)
Example #4
0
    def __init__(self, **kwargs):
        with get_session() as s:
            self.number = kwargs["number"]
            self.species = get_species(s, kwargs["species"])
            self.background = get_background(s, kwargs["background"])
            self.gods = [get_god(s, g) for g in kwargs["gods"]]
            self.start = kwargs["start"]
            self.end = kwargs["end"]
            self.tier1 = kwargs.get("bonus1", NoBonus)
            self.tier2 = kwargs.get("bonus2", NoBonus)

        g1 = aliased(Game)
        g2 = aliased(Game)
        possiblegames = self._valid_games(g1).add_columns(
            g1.player_id, g1.start, g1.end).filter(
                g1.gid.in_(
                    self._valid_games(g2).filter(
                        g2.player_id == g1.player_id).order_by(
                            g2.start).limit(2))).join(
                                latestmilestones,
                                g1.gid == latestmilestones.c.gid).add_column(
                                    latestmilestones.c.xl).cte()
        pg2 = possiblegames.alias()
        self.gids = Query(possiblegames.c.gid).outerjoin(
            pg2,
            and_(pg2.c.player_id == possiblegames.c.player_id,
                 possiblegames.c.start > pg2.c.start)).filter(
                     or_(pg2.c.gid == None,
                         and_(pg2.c.end != None, pg2.c.xl < 5)))
    def get_by_organization(self, corporation=None, direction=None,
                            service=None, site=None, subsite=None,
                            enabled=True):
        def tr(label):
            return label.replace('*', '%')

        q = self._query()
        if corporation:
            corporation_alias = aliased(OrganizationData)
            q = q.join((corporation_alias, UserData.corporation)).filter(
                corporation_alias.label.like(tr(corporation)))
        if direction:
            direction_alias = aliased(OrganizationData)
            q = q.join((direction_alias, UserData.direction)).filter(
                direction_alias.label.like(tr(direction)))
        if service:
            service_alias = aliased(OrganizationData)
            q = q.join((service_alias, UserData.service)).filter(
                service_alias.label.like(tr(service)))
        if site:
            site_alias = aliased(OrganizationData)
            q = q.join((site_alias, UserData.site)).filter(
                site_alias.label.like(tr(site)))

        if subsite:
            subsite_alias = aliased(OrganizationData)
            q = q.join((subsite_alias, UserData.subsite)).filter(
                subsite_alias.label.like(tr(site)))

        return self._filter_by_enabled(q, enabled)
Example #6
0
    def populateChildren(self, treeview, iter, path):
        chiter = self.treestore.iter_children(iter)
        if chiter != None:
            #Checks name field(second) because code field(first) may have changed during parent code edition.
            value = utility.convertToLatin(self.treestore.get(chiter, 1)[0])
            if value == "":
                value = utility.convertToLatin(self.treestore.get(iter, 0)[0])
                #remove empty subledger to add real children instead
                self.treestore.remove(chiter)

                Sub = aliased(Subject, name="s")
                Child = aliased(Subject, name="c")
                Parent = aliased(Subject, name="p")

                query = config.db.session.query(Sub.code, Sub.name, Sub.type,
                                                count(Child.id), Sub.lft,
                                                Sub.rgt)
                query = query.select_from(
                    outerjoin(
                        outerjoin(Parent, Sub, Sub.parent_id == Parent.id),
                        Child, Sub.id == Child.parent_id))
                result = query.filter(Parent.code == value).group_by(
                    Sub.id).all()
                for row in result:
                    code = row[0]
                    if config.digittype == 1:
                        code = utility.convertToPersian(code)
                    type = _(self.__class__.subjecttypes[row[2]])

                    #--------
                    subject_sum = config.db.session.query(sum(
                        Notebook.value)).select_from(
                            outerjoin(Subject, Notebook,
                                      Subject.id == Notebook.subject_id))
                    subject_sum = subject_sum.filter(
                        and_(Subject.lft >= row[4],
                             Subject.lft <= row.rgt)).first()
                    subject_sum = subject_sum[0]
                    if (subject_sum == None):
                        subject_sum = utility.showNumber("0")
                    else:
                        if (subject_sum < 0):
                            subject_sum = "(-" + utility.showNumber(
                                -subject_sum) + ")"
                        else:
                            subject_sum = utility.showNumber(subject_sum)

                    chiter = self.treestore.append(
                        iter, (code, row[1], type, subject_sum))
                    if row[3] != 0:
                        #add empty subledger for those children which have subledgers in turn. (to show expander)
                        self.treestore.append(chiter, ("", "", "", ""))
        return False
Example #7
0
    def deleteUser(self, sender):
        selection = self.userTreeview.get_selection()
        iter = selection.get_selected()[1]
        if iter != None:
            Subject1 = aliased(Subject, name="s1")
            Subject2 = aliased(Subject, name="s2")

            code = convertToLatin(self.userTreestore.get(iter, 0)[0])
            row = share.config.db.session.query(Users).filter(
                Users.id == code).first()
            share.config.db.session.delete(row)
            share.config.db.session.commit()
            self.userTreestore.remove(iter)
Example #8
0
 def deleteLedger(self, sender):
     selection = self.treeview.get_selection()
     iter = selection.get_selected()[1]
     if iter != None :
         Subject1 = aliased(Subject, name="s1")
         Subject2 = aliased(Subject, name="s2")
         
         code = utility.convertToLatin(self.treestore.get(iter, 0)[0])
         #Check to see if there is any subledger for this ledger.
         query = config.db.session.query(Subject1.id, count(Subject2.id))
         query = query.select_from(outerjoin(Subject1, Subject2, Subject1.id == Subject2.parent_id))
         result = query.filter(Subject1.code == code).first()
         
         if result[1] != 0 :
             msgbox =  gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
                                 _("Subject can not be deleted, because it has some child subjects."))
             msgbox.set_title(_("Error deleting subject"))
             msgbox.run()
             msgbox.destroy()
         else :
             # check to see if there is any document registered for this ledger.
             query = config.db.session.query(count(Notebook.id))
             query = query.filter(Notebook.subject_id == result[0])
             rowcount = query.first()[0]
             if rowcount != 0 :
                 msgbox =  gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
                                 _("Subject can not be deleted, because there are some documents registered for it."))
                 msgbox.set_title(_("Error deleting subject"))
                 msgbox.run()
                 msgbox.destroy()
             else :
                 # Now it's OK to delete ledger
                 row = config.db.session.query(Subject).filter(Subject.id == result[0]).first()
                 sub_left = row.lft
                 config.db.session.delete(row)
                 
                 rlist = config.db.session.query(Subject).filter(Subject.rgt > sub_left).all()
                 for r in rlist:
                     r.rgt -= 2
                     config.db.session.add(r)
                     
                 llist = config.db.session.query(Subject).filter(Subject.lft > sub_left).all()
                 for l in llist:
                     l.lft -= 2
                     config.db.session.add(l)
                 
                 config.db.session.commit()
                 self.treestore.remove(iter)
Example #9
0
    def test_query_column_name(self):
        # test for bug: http://groups.google.com/group/geoalchemy/browse_thread/thread/6b731dd1673784f9
        from sqlalchemy.orm.query import Query
        query = Query(Road.road_geom).filter(Road.road_geom == '..').__str__()
        ok_('AsBinary(roads.road_geom)' in query, 'table name is part of the column expression (select clause)')
        ok_('WHERE Equals(roads.road_geom' in query, 'table name is part of the column expression (where clause)')

        query_wkb = Select([Road.road_geom]).where(Road.road_geom == 'POINT(0 0)').__str__()
        ok_('SELECT AsBinary(roads.road_geom)' in query_wkb, 'AsBinary is added')
        ok_('WHERE Equals(roads.road_geom' in query_wkb, 'AsBinary is not added in where clause')

        # test for RAW attribute
        query_wkb = Select([Road.road_geom.RAW]).__str__()
        ok_('SELECT roads.road_geom' in query_wkb, 'AsBinary is not added')

        ok_(session.query(Road.road_geom.RAW).first())

        query_srid = Query(func.SRID(Road.road_geom.RAW))
        ok_('SRID(roads.road_geom)' in query_srid.__str__(), 'AsBinary is not added')
        ok_(session.scalar(query_srid))

        eq_(session.scalar(Select([func.SRID(Spot.spot_location)]).where(Spot.spot_id == 1)),
                None,
                'AsBinary is added and the SRID is not returned')
        eq_(str(session.scalar(Select([func.SRID(Spot.spot_location.RAW)]).where(Spot.spot_id == 1))),
                '4326',
                'AsBinary is not added and the SRID is returned')

        spot_alias = aliased(Spot)
        query_wkt = Select([func.wkt(spot_alias.spot_location.RAW)]).__str__()
        ok_('SELECT wkt(spots_1.spot_location' in query_wkt, 'Table alias is used in select clause')
        ok_('FROM spots AS spots_1' in query_wkt, 'Table alias is used in from clause')
Example #10
0
def getRelatedCity(cid):
    from sys2do.model.master import City
    if not cid : return []
    parent_city = aliased(City, name = "pc")
    return DBSession.query(City).filter(and_(
                                      parent_city.id == cid,
                                      parent_city.active == 0,
                                      City.active == 0,
                                      City.parent_code == parent_city.parent_code,
                                      ))
    def editProductGroup(self, sender):
        dialog = self.builder.get_object("addProductGroupDlg")
        dialog.set_title(_("Edit group"))
        selection = self.treeview.get_selection()
        iter = selection.get_selected()[1]
        
        if iter != None :
	    grpcode = unicode(self.treestore.get(iter, 0)[0])
            #if config.digittype == 1:
                #code = utility.convertToLatin(grpcode)
            #else:
                #code = grpcode
                
            BuySub = aliased(Subject, name="bs")
            SellSub = aliased(Subject, name="ss")
            
            query = config.db.session.query(ProductGroups, BuySub.code, SellSub.code)
            query = query.select_from( outerjoin( outerjoin(ProductGroups, BuySub, ProductGroups.buyId == BuySub.id),
                                                  SellSub, ProductGroups.sellId == SellSub.id ) )
            (group, buy_code, sell_code) = query.filter(ProductGroups.code == grpcode).first()
            name = group.name
            if config.digittype == 1:
		buy_code = utility.convertToPersian(buy_code)
		sell_code = utility.convertToPersian(sell_code)
            
            self.builder.get_object("groupCodeEntry").set_text(grpcode)
            self.builder.get_object("groupNameEntry").set_text(name)
            self.buyCodeEntry.set_text(buy_code)
            self.sellCodeEntry.set_text(sell_code)
            
            success = False
	    while not success :
		result = dialog.run()
		if result == 1:
		    grpcode = self.builder.get_object("groupCodeEntry").get_text()
		    grpname = self.builder.get_object("groupNameEntry").get_text()
		    grpbuycode = self.buyCodeEntry.get_text()
		    grpsellcode = self.sellCodeEntry.get_text()
		    success = self.saveProductGroup(unicode(grpcode), unicode(grpname), grpbuycode, grpsellcode, iter)
		else:
		    break
                
            dialog.hide()
Example #12
0
 def populateChildren(self, treeview, iter, path):
     chiter = self.treestore.iter_children(iter)
     if chiter != None :
         #Checks name field(second) because code field(first) may have changed during parent code edition.
         value = utility.convertToLatin(self.treestore.get(chiter, 1)[0])
         if value == "" :
             value =  utility.convertToLatin(self.treestore.get(iter, 0)[0])
             #remove empty subledger to add real children instead
             self.treestore.remove(chiter)
             
             Sub = aliased(Subject, name="s")
             Child = aliased(Subject, name="c")
             Parent = aliased(Subject, name="p")
             
             query = config.db.session.query(Sub.code, Sub.name, Sub.type, count(Child.id), Sub.lft, Sub.rgt)
             query = query.select_from(outerjoin(outerjoin(Parent, Sub, Sub.parent_id == Parent.id), Child, Sub.id == Child.parent_id))
             result = query.filter(Parent.code == value).group_by(Sub.id).all()
             for row in result :
                 code = row[0]
                 if config.digittype == 1:
                     code = utility.convertToPersian(code)
                 type = _(self.__class__.subjecttypes[row[2]])
                 
                 #--------
                 subject_sum = config.db.session.query(sum(Notebook.value)).select_from(outerjoin(Subject, Notebook, Subject.id == Notebook.subject_id))
                 subject_sum = subject_sum.filter(and_(Subject.lft >= row[4], Subject.lft <= row.rgt)).first()
                 subject_sum = subject_sum[0]
                 if(subject_sum == None):
                     subject_sum = utility.showNumber("0")
                 else :
                     if(subject_sum < 0):
                         subject_sum = "(-" + utility.showNumber(-subject_sum) + ")"
                     else :
                         subject_sum = utility.showNumber(subject_sum)
                         
                 chiter = self.treestore.append(iter, (code, row[1], type, subject_sum))
                 if row[3] != 0 :
                     #add empty subledger for those children which have subledgers in turn. (to show expander)
                     self.treestore.append(chiter, ("", "", "", ""))
     return False
Example #13
0
    def _get_current_users_credentials(self):
        creds = aliased(
            TrackerCredentials,
            TrackerCredentials.query.filter(
                TrackerCredentials.user_id == self.request.user.id).subquery())
        query = self.session.query(Tracker, creds).outerjoin(
            (creds, Tracker.credentials))
        if self.request.user.client:
            client = self.request.user.client
            query = query.filter(Project.tracker_id == Tracker.id).filter(
                Project.client_id == client.id)

        return [{
            "tracker": tracker,
            "has_creds": bool(credentials),
            "creds": credentials
        } for tracker, credentials in query]
Example #14
0
    def _get_current_users_credentials(self):
        creds = aliased(
            TrackerCredentials,
            TrackerCredentials.query.filter(TrackerCredentials.user_id==self.request.user.id).subquery()
        )
        query = self.session.query(
            Tracker,
            creds
        ).outerjoin((creds, Tracker.credentials))
        if self.request.user.client:
            client = self.request.user.client
            query = query.filter(Project.tracker_id==Tracker.id).filter(Project.client_id==client.id)

        return [
            {"tracker": tracker, "has_creds": bool(credentials), "creds": credentials}
            for tracker, credentials in query
        ]
Example #15
0
    def test_query_column_name(self):
        # test for bug: http://groups.google.com/group/geoalchemy/browse_thread/thread/6b731dd1673784f9
        from sqlalchemy.orm.query import Query
        query = Query(Road.road_geom).filter(Road.road_geom == '..').__str__()
        ok_('AsBinary(roads.road_geom)' in query,
            'table name is part of the column expression (select clause)')
        ok_('WHERE Equals(roads.road_geom' in query,
            'table name is part of the column expression (where clause)')

        query_wkb = Select([Road.road_geom
                            ]).where(Road.road_geom == 'POINT(0 0)').__str__()
        ok_('SELECT AsBinary(roads.road_geom)' in query_wkb,
            'AsBinary is added')
        ok_('WHERE Equals(roads.road_geom' in query_wkb,
            'AsBinary is not added in where clause')

        # test for RAW attribute
        query_wkb = Select([Road.road_geom.RAW]).__str__()
        ok_('SELECT roads.road_geom' in query_wkb, 'AsBinary is not added')

        ok_(session.query(Road.road_geom.RAW).first())

        query_srid = Query(func.SRID(Road.road_geom.RAW))
        ok_('SRID(roads.road_geom)' in query_srid.__str__(),
            'AsBinary is not added')
        ok_(session.scalar(query_srid))

        eq_(
            session.scalar(
                Select([func.SRID(Spot.spot_location)
                        ]).where(Spot.spot_id == 1)), None,
            'AsBinary is added and the SRID is not returned')
        eq_(
            str(
                session.scalar(
                    Select([func.SRID(Spot.spot_location.RAW)
                            ]).where(Spot.spot_id == 1))), '4326',
            'AsBinary is not added and the SRID is returned')

        spot_alias = aliased(Spot)
        query_wkt = Select([func.wkt(spot_alias.spot_location.RAW)]).__str__()
        ok_('SELECT wkt(spots_1.spot_location' in query_wkt,
            'Table alias is used in select clause')
        ok_('FROM spots AS spots_1' in query_wkt,
            'Table alias is used in from clause')
Example #16
0
    def to_table(self, node):
        if isinstance(node, ast.Identifier):
            schema, table_name = self.get_table_name(node)

            table = sa.table(table_name, schema=schema)

            if node.alias:
                table = aliased(table, name=self.get_alias(node.alias))

        elif isinstance(node, ast.Select):
            sub_stmt = self.prepare_select(node)
            alias = None
            if node.alias:
                alias = self.get_alias(node.alias)
            table = sub_stmt.subquery(alias)

        else:
            # TODO tests are failing
            raise NotImplementedError(f'Table {node.__name__}')

        return table
Example #17
0
def initialize_weeks():
    with get_session() as s:
        m2 = aliased(Milestone)
        runebranchlowskill = CsdcBonus("RuneBranchLowSkill",
            "Enter a rune branch with all base skills < 11.",
            [ or_(
                and_(Milestone.sklev < 11,
                    Milestone.id.in_(Query(m2.id).filter(
                        Milestone.gid == m2.gid,
                        m2.verb_id == get_verb(s, "br.enter").id,
                        m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in constants.RUNE_BRANCHES]))
                    )),
                and_(Milestone.sklev < 11,
                    Milestone.id.in_(Query(m2.id).filter(
                        Milestone.gid == m2.gid,
                        m2.verb_id == get_verb(s, "abyss.enter").id)))) ],
            1)
        runelowskill = CsdcBonus("RuneLowSkill",
            "Collect a rune with all base skills < 11.",
            [ Milestone.sklev < 11,
                Milestone.id.in_(Query(m2.id).filter(
                    Milestone.gid == m2.gid,
                    m2.verb_id == get_verb(s, "rune").id
                ))],
            "1")

        slimefirst = CsdcBonus("EnterSlime2nd",
            "Enter Slime as your second multi-level branch (don't get banished).",
            [ Milestone.verb_id == get_verb(s, "br.enter").id,
              Milestone.place_id == get_place_from_string(s, "Slime:1").id,
              Query(func.count(m2.id)).filter(
                  Milestone.gid == m2.gid,
                  m2.turn < Milestone.turn, 
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in constants.MULTI_LEVEL_BRANCHES])
              ).as_scalar() < 2],
            "1")

        slimerunefirst = CsdcBonus("GetTheSlimyRuneFirst",
            "Get the slimy rune without entering any multi-level branch other than Lair, Slime, and D (don't get banished).",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              Milestone.place_id  == get_place_from_string(s, "Slime:5").id,
              Query(func.count(m2.id)).filter(
                  Milestone.gid == m2.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in constants.MULTI_LEVEL_BRANCHES])
              ).as_scalar() <= 2],
            "1")

        temple4k = CsdcBonus("TempleIn4kTurn",
            "Enter the Temple in less than 4,000 turns.",
            [ Milestone.verb_id == get_verb(s, "br.enter").id,
              Milestone.place_id == get_place_from_string(s, "Temple").id,
              Milestone.turn < 4000 ],
            "1")

        rune15k = CsdcBonus("RuneIn15kTurn",
            "Collect a rune in less than 15,000 turns.",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              Milestone.turn < 15000 ],
            "1")

        lairendxl12 = CsdcBonus("LairEndXL12",
            "Reach the end of Lair at XL &leq; 12.",
            [ Milestone.verb_id == get_verb(s, "br.end").id,
              Milestone.place_id == get_place_from_string(s, "Lair:6").id,
              Milestone.xl <= 12 ],
            "1")

        vaultendxl18 = CsdcBonus("VaultEndXL18",
            "Reach the end of the Vaults at XL &leq; 18.",
            [ Milestone.verb_id == get_verb(s, "br.end").id,
              Milestone.place_id == get_place_from_string(s, "Vaults:5").id,
              Milestone.xl <= 18 ],
            "1")

        elfbeforerune = CsdcBonus("Elf3BeforeRunes",
            "Reach the end of Elf before entering a rune branch.",
            [ Milestone.verb_id == get_verb(s, "br.end").id,
              Milestone.place_id == get_place_from_string(s, "Elf:3").id,
              ~Query(m2).filter( 
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
			      m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in constants.RUNE_BRANCHES ]),
			  ).exists() ],
			"1")

        depthsbeforerune = CsdcBonus("Depths5BeforeRunes",
            "Reach the end of the Depths before entering a rune branch.",
            [ Milestone.verb_id == get_verb(s, "br.end").id,
              Milestone.place_id == get_place_from_string(s, "Depths:5").id,
              ~Query(m2).filter( 
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
			      m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in constants.RUNE_BRANCHES ]),
			  ).exists() ],
			"1")

        geryonbeforerune = CsdcBonus("GeryonBeforeRune",
            "Kill or slimify Geryon before entering a rune branch (excluding the Abyss).",
            [ or_( Milestone.verb_id == get_verb(s, "uniq").id,
                   Milestone.verb_id == get_verb(s, "uniq.slime").id),
              Milestone.msg.like("%Geryon%"),
              ~Query(m2).filter( 
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in set(constants.RUNE_BRANCHES) - set(("Abyss",))]),
              ).exists() ],
            "1")

        hellpanrunefirst = CsdcBonus("HellPanRuneFirst",
            "Get a rune from Hell or Pan before entering any other rune branch (excluding the Abyss).",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              ~Milestone.msg.like("%byssal%"),
              ~Query(m2).filter( 
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id 
                      for b in set(constants.RUNE_BRANCHES) - set(("Abyss", "Coc", "Geh", "Dis", "Tar", "Pan"))]),
              ).exists() ],
            "1")

        hellrunefirst = CsdcBonus("HellRuneFirst",
            "Get a rune from Hell before entering any other rune branch (excluding the Abyss).",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              ~Milestone.msg.like("%byssal%"),
              ~Query(m2).filter( 
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id 
                      for b in set(constants.RUNE_BRANCHES) - set(("Abyss", "Coc", "Geh", "Dis", "Tar"))]),
              ).exists() ],
            "1")

        goldenrune = CsdcBonus("GoldenRune",
            "Collect the golden rune.",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              Milestone.place_id == get_place_from_string(s, "Tomb:3").id ],
            "1")

        vowofcourage = CsdcBonus("VowOfCourage",
            "Collect at least 5 runes before entering the Depths.",
            [ Milestone.verb_id == get_verb(s, "rune").id,
              Milestone.runes >= 5,
              ~Query(m2).filter(
                  m2.gid == Milestone.gid,
                  m2.turn < Milestone.turn,
                  m2.verb_id == get_verb(s, "br.enter").id,
                  m2.place_id == get_place_from_string(s, "Depths:1").id).exists() ],
            "1")

        runenosbranch = CsdcBonus("RuneNoSBranch",
            "Collect a rune before entering Shoals, Snake, Spider, or Swamp.",
            [Milestone.verb_id == get_verb(s, "rune").id,
             ~Query(m2).filter(
             m2.gid == Milestone.gid,
             m2.turn < Milestone.turn,
             m2.verb_id == get_verb(
             s, "br.enter").id,
             m2.place_id.in_([ get_place(s, get_branch(s, b), 1).id for b in ("Shoals", "Snake", "Spider", "Swamp")] )
             ).exists() ],
            "1")

        runenolair = CsdcBonus("RuneNoLair",
            "Collect a rune before entering Lair.",
            [Milestone.verb_id == get_verb(s, "rune").id,
             ~Query(m2).filter(
             m2.gid == Milestone.gid,
             m2.turn < Milestone.turn,
             m2.verb_id == get_verb(
                 s, "br.enter").id,
             m2.place_id == get_place_from_string(
                 s, "Lair:1").id,
             ).exists() ],
            "1")

        runedontdie = CsdcBonus("RuneDontDie",
            "Collect a rune without dying.",
            [Milestone.verb_id == get_verb(s, "rune").id,
             ~Query(m2).filter(
             m2.gid == Milestone.gid,
             m2.turn < Milestone.turn,
             m2.verb_id == get_verb(s, "death").id).exists()],
            "1")

        tworunedontdie = CsdcBonus("2RuneDont2Die",
            "Collect two runes without dying twice.",
            [Milestone.verb_id == get_verb(s, "rune").id,
             Query(func.count(m2.id)).filter(
             m2.gid == Milestone.gid,
             m2.turn < Milestone.turn,
             m2.verb_id == get_verb(s, "death").id).as_scalar() < 2],
            "1")

        batformuniq = CsdcBonus("BatformUniq",
                "Kill a unique in bat form.",
                [ Milestone.verb_id == get_verb(s, "uniq").id,
                    Milestone.status.like("%bat-form%")],
                "1")

        batformuniq = CsdcBonus("BatformHellPanLord",
                "Kill a unique in bat form.",
                [ Milestone.verb_id == get_verb(s, "uniq").id,
                  Milestone.status.like("%bat-form%"),
                  or_(Milestone.msg.like("%Cerebov%"),
                      Milestone.msg.like("%Mnoleg%"),
                      Milestone.msg.like("%Lom Lobon%"),
                      Milestone.msg.like("%Gloorx Vloq%"),
                      Milestone.msg.like("%Asmodeus%"),
                      Milestone.msg.like("%Antaeus%"),
                      Milestone.msg.like("%Dispater%"),
                      Milestone.msg.like("%Ereshkigal%")) ],
                "1")

        weeks.append(CsdcWeek(
                number = "1",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,10,4, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,10,11, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "2",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,10,11, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,10,18, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "3",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,10,18, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,10,25, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "4",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,10,25, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,11,1, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "5",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,11,8, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,11,15, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "6",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,11,15, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,11,22, tzinfo=datetime.timezone.utc)))
        weeks.append(CsdcWeek(
                number = "7",
                species = "DD",
                background = "Fi",
                gods = ("Makhleb", "Trog", "Okawaru"),
                start = datetime.datetime(2018,11,22, tzinfo=datetime.timezone.utc),
                end = datetime.datetime(2018,11,29, tzinfo=datetime.timezone.utc)))
Example #18
0
    def __init__ (self, ledgers_only=False):
        gobject.GObject.__init__(self)

        self.builder = get_builder("notebook")
        
        self.window = self.builder.get_object("subjectswindow")
        self.window.set_modal(True)
        
        self.treeview = self.builder.get_object("treeview")
        self.treeview.set_direction(gtk.TEXT_DIR_LTR)
        if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL :
            halign = 1
        else:
            halign = 0
            
        self.treestore = gtk.TreeStore(str, str, str, str)
        column = gtk.TreeViewColumn(_("Subject Code"), gtk.CellRendererText(), text=0)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Subject Name"), gtk.CellRendererText(), text=1)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Debtor or Creditor"), gtk.CellRendererText(), text=2)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Sum"), gtk.CellRendererText(), text=3)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        self.treeview.get_selection().set_mode(gtk.SELECTION_SINGLE)
        
        self.code = numberentry.NumberEntry()
        box = self.builder.get_object("codebox")
        box.add(self.code)
        self.code.show()
        
        config.db.session = config.db.session
        
        Subject1 = aliased(Subject, name="s1")
        Subject2 = aliased(Subject, name="s2")
        
        #Find top level ledgers (with parent_id equal to 0)
        query = config.db.session.query(Subject1.code, Subject1.name, Subject1.type, Subject1.lft, Subject1.rgt, count(Subject2.id))
        query = query.select_from(outerjoin(Subject1, Subject2, Subject1.id == Subject2.parent_id))
        result = query.filter(Subject1.parent_id == 0).group_by(Subject1.id).all()
        for a in result :
            type = _(self.__class__.subjecttypes[a[2]])
            code = a[0]
            if config.digittype == 1:
                code = utility.convertToPersian(code)
            #--------
            subject_sum = config.db.session.query(sum(Notebook.value)).select_from(outerjoin(Subject, Notebook, Subject.id == Notebook.subject_id))
            subject_sum = subject_sum.filter(and_(Subject.lft >= a.lft, Subject.lft <= a.rgt)).first()
            subject_sum = subject_sum[0]
            
            if(subject_sum == None):
                subject_sum = utility.showNumber("0")
            else :
                if(subject_sum < 0):
                    subject_sum = "( -" + utility.showNumber(-subject_sum) + " )"
                else :
                    subject_sum = utility.showNumber(subject_sum)
                
            iter = self.treestore.append(None, (code, a[1], type, subject_sum))
            if (a[5] != 0 and ledgers_only == False) :
                #Add empty subledger to show expander for ledgers which have chidren
                self.treestore.append(iter, ("", "", "", ""))
        
        if ledgers_only == True:
            btn = self.builder.get_object("addsubtoolbutton")
            btn.hide()
        
        self.treeview.set_model(self.treestore)
        self.treestore.set_sort_column_id(0, gtk.SORT_ASCENDING)
        self.window.show_all()
        self.builder.connect_signals(self)
Example #19
0
def export(idea_ids, permission=None, filename_prefix='export'):
    # gets the information to export
    columns = [(_(u'Id'), 1500),
               (_(u'Title'), 20000),
               (_(u'Challenge'), 10000),
               (_(u'Description'), 15000),
               (_(u'Origin'), 10000),
               (_(u'Impact'), 10000),
               (_(u'Submission date'), 5000),
               (_(u'Author name'), 7000),
               (_(u'Position'), 3000),
               (_(u'Corporation'), 7000),
               (_(u'Direction'), 7000),
               (_(u'Service'), 7000),
               (_(u'Site'), 7000),
               (_(u'Votes count'), 5000),
               (_(u'Comments count'), 5000),
               (_(u'Domain'), 8000),
               (_(u'State'), 5000),
               (_(u'Url'), 8000),
               (_(u'Facilitator'), 5000),
               (_(u'Developer'), 5000),
               (_(u'Benefit_department'), 5000),
               ]

    # launches the query
    # FIXME: don't create a query: use the appropriate IdeaRepository's method instead
    AuthorUser = aliased(UserData)
    FIUser = aliased(UserData)
    DIUser = aliased(UserData)
    Corporation = aliased(OrganizationData)
    Direction = aliased(OrganizationData)
    Service = aliased(OrganizationData)
    Site = aliased(OrganizationData)
    SubSite = aliased(OrganizationData)
    q = session.query(
        IdeaData.id,
        IdeaData.submission_date,
        IdeaData.challenge_id,
        ChallengeData.title.label('challenge'),
        IdeaData.title,
        IdeaData.description,
        IdeaData.origin,
        IdeaData.impact,
        IdeaData.benefit_department,
        AuthorUser.uid,
        AuthorUser.firstname,
        AuthorUser.lastname,
        AuthorUser.position,
        Corporation.label.label('corporation'),
        Direction.label.label('direction'),
        Service.label.label('service'),
        Site.label.label('site'),
        DomainData.label.label('domain'),
        FIUser.uid.label('fi_uid'),
        FIUser.firstname.label('fi_firstname'),
        FIUser.lastname.label('fi_lastname'),
        DIUser.uid.label('di_uid'),
        DIUser.firstname.label('di_firstname'),
        DIUser.lastname.label('di_lastname'),
        StateData.label.label('state'),
        IdeaData.total_votes,
        IdeaData.total_comments,
        IdeaEvalContextData.target_date.label('target_date'),
        IdeaEvalContextData.goal.label('goal'),
        IdeaEvalContextData.revenues_first_year.label('revenues_first_year'),
        IdeaEvalContextData.revenues_first_year_value.label(
            'revenues_first_year_value'),
        IdeaEvalContextData.revenues_second_year.label('revenues_second_year'),
        IdeaEvalContextData.revenues_second_year_value.label(
            'revenues_second_year_value'),
        IdeaEvalContextData.expenses_first_year.label('expenses_first_year'),
        IdeaEvalContextData.expenses_first_year_value.label(
            'expenses_first_year_value'),
        IdeaEvalContextData.expenses_second_year.label('expenses_second_year'),
        IdeaEvalContextData.expenses_second_year_value.label(
            'expenses_second_year_value'),
        IdeaEvalContextData.evaluation_impact.label('evaluation_impact'),
    ).outerjoin(AuthorData)

    q = q.join((AuthorUser, AuthorData.user))
    q = q.outerjoin((Corporation, AuthorUser.corporation))
    q = q.outerjoin((Direction, AuthorUser.direction))
    q = q.outerjoin((Service, AuthorUser.service))
    q = q.outerjoin((Site, AuthorUser.site))
    q = q.outerjoin((SubSite, AuthorUser.subsite))
    q = q.outerjoin(IdeaData.wf_context)
    q = q.outerjoin(IdeaData.eval_context)
    q = q.outerjoin(IdeaData.domain)
    q = q.outerjoin(IdeaWFContextData.state)
    q = q.outerjoin((DIUser, IdeaWFContextData.assignated_di))
    q = q.outerjoin((FIUser, IdeaWFContextData.assignated_fi))
    q = q.outerjoin(IdeaData.challenge)
    q = q.filter(IdeaData.id.in_(idea_ids))

    years_revenues = []
    years_expenses = []
    if permission in ('dsig', 'developer'):
        columns = columns + [(_(u'target_date'), 5000),
                             (_(u'goal'), 5000)]
        for row in q:
            years_revenues = years_revenues + [row.revenues_first_year, row.revenues_second_year]
            years_revenues = list(set(years_revenues))
            years_revenues = [y for y in years_revenues if y]
            years_revenues.sort()
            years_expenses = years_expenses + [row.expenses_first_year, row.expenses_second_year]
            years_expenses = list(set(years_expenses))
            years_expenses = [y for y in years_expenses if y]
            years_expenses.sort()

        columns = columns + [(_(u'Revenue %s') % y, 5000) for y in years_revenues]
        columns = columns + [(_(u'Expenses %s') % y, 5000) for y in years_expenses]
        columns = columns + [(_(u'CF/MSCV'), 3000)]

    authors = {}
    for id, ideas in itertools.groupby(q, key=lambda row: row.id):
        for idea in ideas:
            authors.setdefault(id, []).append(
                '%s %s' % (idea.firstname, idea.lastname))

    # creates the workbook
    wb = xlwt.Workbook(encoding='utf-8')
    ws = wb.add_sheet(u'Export')

    f = xlwt.Formatting.Font()
    f.underline = xlwt.Formatting.Font.UNDERLINE_SINGLE
    f.colour_index = 4  # built-in blue

    link_style = xlwt.Style.XFStyle()
    link_style.font = f

    date_style = xlwt.easyxf(num_format_str='DD-MM-YYYY HH:MM')

    # write header row & define columns width
    for col_index, (name, width) in enumerate(columns):
        ws.write(0, col_index, unicode(name))
        ws.col(col_index).width = width

    # write ideas
    duplicates = set()
    row_index = 1
    for row in q:

        # Remove duplicates
        # EV 592 : all author names in the same cell
        if row.id in duplicates:
            continue
        else:
            duplicates.add(row.id)

        idea_url = get_url_service().expand_url(['idea', row.id], relative=False)

        row_data = [
            unicode(row.id),
            row.title,
            u'%s (%s)' % (row.challenge, row.challenge_id) if row.challenge_id else u'',
            row.description,
            row.origin,
            row.impact,
            (row.submission_date, date_style),
            '; '.join(authors.get(row.id, [])),
            row.position,
            row.corporation,
            row.direction,
            row.service,
            row.site,
            unicode(row.total_votes),
            unicode(row.total_comments),
            _(row.domain),
            _(row.state),
            (xlwt.Formula(u'HYPERLINK("%s";"%s")' % (idea_url, idea_url)),
             link_style),
            u'%s %s' % (row.fi_firstname, row.fi_lastname) if row.fi_uid else u'',
            u'%s %s' % (row.di_firstname, row.di_lastname) if row.di_uid else u'',
            row.benefit_department,
        ]

        if permission in ('dsig', 'developer'):
            row_data = row_data + [
                row.target_date.strftime(
                    '%d/%m/%Y') if row.target_date else '',
                row.goal,
            ]

            row_year_revenues = ['' for y in years_revenues]
            row_year_expenses = ['' for y in years_expenses]

            if row.revenues_first_year:
                index = years_revenues.index(row.revenues_first_year)
                row_year_revenues[index] = row.revenues_first_year_value

            if row.revenues_second_year:
                index = years_revenues.index(row.revenues_second_year)
                row_year_revenues[index] = row.revenues_second_year_value

            if row.expenses_first_year:
                index = years_expenses.index(row.expenses_first_year)
                row_year_expenses[index] = row.expenses_first_year_value

            if row.expenses_second_year:
                index = years_expenses.index(row.expenses_second_year)
                row_year_expenses[index] = row.expenses_second_year_value

            row_data = row_data + row_year_revenues + row_year_expenses
            row_data = row_data + [row.evaluation_impact]

        for col_index, data in enumerate(row_data):
            if hasattr(data, '__iter__'):
                ws.write(row_index, col_index, *data)
            else:
                ws.write(row_index, col_index, data)
        row_index += 1

    # saves it in a memory buffer
    stream = StringIO()
    wb.save(stream)
    content = stream.getvalue()
    stream.close()

    timestamp = datetime.now().strftime('%Y-%m-%d')
    filename = filename_prefix + '_' + timestamp + '.xls'

    return content, filename
Example #20
0
def export(idea_ids, permission=None, filename_prefix='export'):
    # gets the information to export
    columns = [
        (_(u'Id'), 1500),
        (_(u'Title'), 20000),
        (_(u'Challenge'), 10000),
        (_(u'Description'), 15000),
        (_(u'Origin'), 10000),
        (_(u'Impact'), 10000),
        (_(u'Submission date'), 5000),
        (_(u'Author name'), 7000),
        (_(u'Position'), 3000),
        (_(u'Corporation'), 7000),
        (_(u'Direction'), 7000),
        (_(u'Service'), 7000),
        (_(u'Site'), 7000),
        (_(u'Votes count'), 5000),
        (_(u'Comments count'), 5000),
        (_(u'Domain'), 8000),
        (_(u'State'), 5000),
        (_(u'Url'), 8000),
        (_(u'Facilitator'), 5000),
        (_(u'Developer'), 5000),
        (_(u'Benefit_department'), 5000),
    ]

    # launches the query
    # FIXME: don't create a query: use the appropriate IdeaRepository's method instead
    AuthorUser = aliased(UserData)
    FIUser = aliased(UserData)
    DIUser = aliased(UserData)
    Corporation = aliased(OrganizationData)
    Direction = aliased(OrganizationData)
    Service = aliased(OrganizationData)
    Site = aliased(OrganizationData)
    SubSite = aliased(OrganizationData)
    q = session.query(
        IdeaData.id,
        IdeaData.submission_date,
        IdeaData.challenge_id,
        ChallengeData.title.label('challenge'),
        IdeaData.title,
        IdeaData.description,
        IdeaData.origin,
        IdeaData.impact,
        IdeaData.benefit_department,
        AuthorUser.uid,
        AuthorUser.firstname,
        AuthorUser.lastname,
        AuthorUser.position,
        Corporation.label.label('corporation'),
        Direction.label.label('direction'),
        Service.label.label('service'),
        Site.label.label('site'),
        DomainData.label.label('domain'),
        FIUser.uid.label('fi_uid'),
        FIUser.firstname.label('fi_firstname'),
        FIUser.lastname.label('fi_lastname'),
        DIUser.uid.label('di_uid'),
        DIUser.firstname.label('di_firstname'),
        DIUser.lastname.label('di_lastname'),
        StateData.label.label('state'),
        IdeaData.total_votes,
        IdeaData.total_comments,
        IdeaEvalContextData.target_date.label('target_date'),
        IdeaEvalContextData.goal.label('goal'),
        IdeaEvalContextData.revenues_first_year.label('revenues_first_year'),
        IdeaEvalContextData.revenues_first_year_value.label(
            'revenues_first_year_value'),
        IdeaEvalContextData.revenues_second_year.label('revenues_second_year'),
        IdeaEvalContextData.revenues_second_year_value.label(
            'revenues_second_year_value'),
        IdeaEvalContextData.expenses_first_year.label('expenses_first_year'),
        IdeaEvalContextData.expenses_first_year_value.label(
            'expenses_first_year_value'),
        IdeaEvalContextData.expenses_second_year.label('expenses_second_year'),
        IdeaEvalContextData.expenses_second_year_value.label(
            'expenses_second_year_value'),
        IdeaEvalContextData.evaluation_impact.label('evaluation_impact'),
    ).outerjoin(AuthorData)

    q = q.join((AuthorUser, AuthorData.user))
    q = q.outerjoin((Corporation, AuthorUser.corporation))
    q = q.outerjoin((Direction, AuthorUser.direction))
    q = q.outerjoin((Service, AuthorUser.service))
    q = q.outerjoin((Site, AuthorUser.site))
    q = q.outerjoin((SubSite, AuthorUser.subsite))
    q = q.outerjoin(IdeaData.wf_context)
    q = q.outerjoin(IdeaData.eval_context)
    q = q.outerjoin(IdeaData.domain)
    q = q.outerjoin(IdeaWFContextData.state)
    q = q.outerjoin((DIUser, IdeaWFContextData.assignated_di))
    q = q.outerjoin((FIUser, IdeaWFContextData.assignated_fi))
    q = q.outerjoin(IdeaData.challenge)
    q = q.filter(IdeaData.id.in_(idea_ids))

    years_revenues = []
    years_expenses = []
    if permission in ('dsig', 'developer'):
        columns = columns + [(_(u'target_date'), 5000), (_(u'goal'), 5000)]
        for row in q:
            years_revenues = years_revenues + [
                row.revenues_first_year, row.revenues_second_year
            ]
            years_revenues = list(set(years_revenues))
            years_revenues = [y for y in years_revenues if y]
            years_revenues.sort()
            years_expenses = years_expenses + [
                row.expenses_first_year, row.expenses_second_year
            ]
            years_expenses = list(set(years_expenses))
            years_expenses = [y for y in years_expenses if y]
            years_expenses.sort()

        columns = columns + [(_(u'Revenue %s') % y, 5000)
                             for y in years_revenues]
        columns = columns + [(_(u'Expenses %s') % y, 5000)
                             for y in years_expenses]
        columns = columns + [(_(u'CF/MSCV'), 3000)]

    authors = {}
    for id, ideas in itertools.groupby(q, key=lambda row: row.id):
        for idea in ideas:
            authors.setdefault(id, []).append('%s %s' %
                                              (idea.firstname, idea.lastname))

    # creates the workbook
    wb = xlwt.Workbook(encoding='utf-8')
    ws = wb.add_sheet(u'Export')

    f = xlwt.Formatting.Font()
    f.underline = xlwt.Formatting.Font.UNDERLINE_SINGLE
    f.colour_index = 4  # built-in blue

    link_style = xlwt.Style.XFStyle()
    link_style.font = f

    date_style = xlwt.easyxf(num_format_str='DD-MM-YYYY HH:MM')

    # write header row & define columns width
    for col_index, (name, width) in enumerate(columns):
        ws.write(0, col_index, unicode(name))
        ws.col(col_index).width = width

    # write ideas
    duplicates = set()
    row_index = 1
    for row in q:

        # Remove duplicates
        # EV 592 : all author names in the same cell
        if row.id in duplicates:
            continue
        else:
            duplicates.add(row.id)

        idea_url = get_url_service().expand_url(['idea', row.id],
                                                relative=False)

        row_data = [
            unicode(row.id),
            row.title,
            u'%s (%s)' %
            (row.challenge, row.challenge_id) if row.challenge_id else u'',
            row.description,
            row.origin,
            row.impact,
            (row.submission_date, date_style),
            '; '.join(authors.get(row.id, [])),
            row.position,
            row.corporation,
            row.direction,
            row.service,
            row.site,
            unicode(row.total_votes),
            unicode(row.total_comments),
            _(row.domain),
            _(row.state),
            (xlwt.Formula(u'HYPERLINK("%s";"%s")' % (idea_url, idea_url)),
             link_style),
            u'%s %s' %
            (row.fi_firstname, row.fi_lastname) if row.fi_uid else u'',
            u'%s %s' %
            (row.di_firstname, row.di_lastname) if row.di_uid else u'',
            row.benefit_department,
        ]

        if permission in ('dsig', 'developer'):
            row_data = row_data + [
                row.target_date.strftime('%d/%m/%Y')
                if row.target_date else '',
                row.goal,
            ]

            row_year_revenues = ['' for y in years_revenues]
            row_year_expenses = ['' for y in years_expenses]

            if row.revenues_first_year:
                index = years_revenues.index(row.revenues_first_year)
                row_year_revenues[index] = row.revenues_first_year_value

            if row.revenues_second_year:
                index = years_revenues.index(row.revenues_second_year)
                row_year_revenues[index] = row.revenues_second_year_value

            if row.expenses_first_year:
                index = years_expenses.index(row.expenses_first_year)
                row_year_expenses[index] = row.expenses_first_year_value

            if row.expenses_second_year:
                index = years_expenses.index(row.expenses_second_year)
                row_year_expenses[index] = row.expenses_second_year_value

            row_data = row_data + row_year_revenues + row_year_expenses
            row_data = row_data + [row.evaluation_impact]

        for col_index, data in enumerate(row_data):
            if hasattr(data, '__iter__'):
                ws.write(row_index, col_index, *data)
            else:
                ws.write(row_index, col_index, data)
        row_index += 1

    # saves it in a memory buffer
    stream = StringIO()
    wb.save(stream)
    content = stream.getvalue()
    stream.close()

    timestamp = datetime.now().strftime('%Y-%m-%d')
    filename = filename_prefix + '_' + timestamp + '.xls'

    return content, filename
Example #21
0
def initialize_weeks():
    with get_session() as s:
        m2 = aliased(Milestone)
        lairbonus = CsdcBonus(
            "RuneInBranch",
            "Get a rune without leaving any branch (other than D).", [
                Milestone.runes > 0,
                Milestone.id.in_(
                    Query(m2.id).filter(
                        Milestone.gid == m2.gid, m2.verb_id
                        == get_verb(s, "br.exit").id, ~m2.place_id.in_(
                            Query(Place.id).join(Branch).filter(
                                Branch.id != get_branch(s, "D").id))).order_by(
                                    m2.time).limit(1))
            ], 1)
        lair1 = get_place_from_string(s, "Lair:1")
        alllairbonus = CsdcBonus(
            "LairRunesInLair",
            "Enter Lair with no runes and leave with at least three.", [
                Milestone.runes >= 3, Milestone.verb_id == get_verb(
                    s, "br.exit").id, Milestone.oplace_id == lair1.id,
                Query(m2).filter(m2.gid == Milestone.gid, m2.verb_id
                                 == get_verb(s, "br.enter").id, m2.place_id
                                 == lair1.id, m2.runes == 0).exists()
            ], "2")

        weeks.append(
            CsdcWeek(number="1",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 10, 4),
                     end=datetime.datetime(2018, 10, 11)))
        weeks.append(
            CsdcWeek(number="2",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 10, 11),
                     end=datetime.datetime(2018, 10, 18)))
        weeks.append(
            CsdcWeek(number="3",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 10, 18),
                     end=datetime.datetime(2018, 10, 25)))
        weeks.append(
            CsdcWeek(number="4",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 10, 25),
                     end=datetime.datetime(2018, 11, 1)))
        weeks.append(
            CsdcWeek(number="5",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 11, 8),
                     end=datetime.datetime(2018, 11, 15)))
        weeks.append(
            CsdcWeek(number="6",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 11, 15),
                     end=datetime.datetime(2018, 11, 22)))
        weeks.append(
            CsdcWeek(number="7",
                     species="DD",
                     background="Fi",
                     gods=("Makhleb", "Trog", "Okawaru"),
                     start=datetime.datetime(2018, 11, 22),
                     end=datetime.datetime(2018, 11, 29)))
Example #22
0
    def __init__(self, ledgers_only=False):
        gobject.GObject.__init__(self)

        self.builder = get_builder("notebook")

        self.window = self.builder.get_object("subjectswindow")
        self.window.set_modal(True)

        self.treeview = self.builder.get_object("treeview")
        self.treeview.set_direction(gtk.TEXT_DIR_LTR)
        if gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL:
            halign = 1
        else:
            halign = 0

        self.treestore = gtk.TreeStore(str, str, str, str)
        column = gtk.TreeViewColumn(_("Subject Code"),
                                    gtk.CellRendererText(),
                                    text=0)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Subject Name"),
                                    gtk.CellRendererText(),
                                    text=1)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Debtor or Creditor"),
                                    gtk.CellRendererText(),
                                    text=2)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        column = gtk.TreeViewColumn(_("Sum"), gtk.CellRendererText(), text=3)
        column.set_alignment(halign)
        column.set_spacing(5)
        column.set_resizable(True)
        self.treeview.append_column(column)
        self.treeview.get_selection().set_mode(gtk.SELECTION_SINGLE)

        self.code = numberentry.NumberEntry()
        box = self.builder.get_object("codebox")
        box.add(self.code)
        self.code.show()

        config.db.session = config.db.session

        Subject1 = aliased(Subject, name="s1")
        Subject2 = aliased(Subject, name="s2")

        #Find top level ledgers (with parent_id equal to 0)
        query = config.db.session.query(Subject1.code, Subject1.name,
                                        Subject1.type, Subject1.lft,
                                        Subject1.rgt, count(Subject2.id))
        query = query.select_from(
            outerjoin(Subject1, Subject2, Subject1.id == Subject2.parent_id))
        result = query.filter(Subject1.parent_id == 0).group_by(
            Subject1.id).all()
        for a in result:
            type = _(self.__class__.subjecttypes[a[2]])
            code = a[0]
            if config.digittype == 1:
                code = utility.convertToPersian(code)
            #--------
            subject_sum = config.db.session.query(sum(
                Notebook.value)).select_from(
                    outerjoin(Subject, Notebook,
                              Subject.id == Notebook.subject_id))
            subject_sum = subject_sum.filter(
                and_(Subject.lft >= a.lft, Subject.lft <= a.rgt)).first()
            subject_sum = subject_sum[0]

            if (subject_sum == None):
                subject_sum = utility.showNumber("0")
            else:
                if (subject_sum < 0):
                    subject_sum = "( -" + utility.showNumber(
                        -subject_sum) + " )"
                else:
                    subject_sum = utility.showNumber(subject_sum)

            iter = self.treestore.append(None, (code, a[1], type, subject_sum))
            if (a[5] != 0 and ledgers_only == False):
                #Add empty subledger to show expander for ledgers which have chidren
                self.treestore.append(iter, ("", "", "", ""))

        if ledgers_only == True:
            btn = self.builder.get_object("addsubtoolbutton")
            btn.hide()

        self.treeview.set_model(self.treestore)
        self.treestore.set_sort_column_id(0, gtk.SORT_ASCENDING)
        self.window.show_all()
        self.builder.connect_signals(self)