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)
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)
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)
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
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)
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)
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')
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()
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
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]
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 ]
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')
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
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 ≤ 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 ≤ 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)))
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)
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
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
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)))
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)