def create_order_sheet(self): if self.selected_cart_id.get(): cart_rec = get_record(Cart, did=self.selected_cart_id.get()) status = get_record(Status, did=cart_rec.status_id) if cart_rec.system_id == 1: systemLbl = 'Brooklyn Public Library' else: systemLbl = 'New York Public Library' if status.name == 'finalized': cart_data = [] try: cart_data = get_cart_data_for_order_sheet( self.selected_cart_id.get()) except BabelError as e: messagebox.showerror( 'Retrieval Error', 'Unable to retrieve records from database.\n' f'Error: {e}') if cart_data: try: self.create_to_sheet_widget(cart_rec, systemLbl, cart_data) except BabelError as e: messagebox.showerror('Saving error', e) else: msg = f'Cart "{cart_rec.name}" is not finalized.\n' \ 'Please change cart status to proceed.' messagebox.showwarning('Output to spreadsheet', msg)
def populate_detail_frame(self, *args): mlogger.debug('Populating details frame for {}/{}.'.format( self.gen_list_select.get(), self.det_list_select.get())) model = self.get_corresponding_model()[0] if self.gen_list_select.get() in ( 'Audiences', 'Branches', 'Languages'): if self.det_list_select.get(): self.record = get_record( model, name=self.det_list_select.get()) self.simpleDetailFrame( self.record.name, self.record.code) else: mlogger.debug('Creating empty details frame.') self.simpleDetailFrame() elif self.gen_list_select.get() == 'Users': if self.det_list_select.get(): self.record = get_record( model, name=self.det_list_select.get()) self.userDetailFrame( self.record.name, self.record.bpl_code, self.record.nyp_code) else: mlogger.debug('Creating empty details frame.') self.userDetailFrame() elif self.gen_list_select.get() == 'Vendors': if self.det_list_select.get(): self.record = get_record( model, name=self.det_list_select.get()) self.vendorDetailFrame( self.record.name, self.record.note, self.record.bpl_code, self.record.nyp_code) else: mlogger.debug('Creating empty details frame.') self.vendorDetailFrame() elif self.gen_list_select.get() == 'Material Types': if self.det_list_select.get(): self.record = get_record( model, name=self.det_list_select.get()) self.mattypeDetailFrame( self.record.name, self.record.bpl_bib_code, self.record.bpl_ord_code, self.record.nyp_bib_code, self.record.nyp_ord_code) else: mlogger.debug('Creating empty details frame.') self.mattypeDetailFrame() elif self.gen_list_select.get() == 'Shelf Codes': if self.det_list_select.get(): self.record = get_record( model, name=self.det_list_select.get(), system_id=self.system.get()) self.shelfcodeDetailFrame( self.record.name, self.record.code, self.record.includes_audn) else: mlogger.debug('Creating empty details frame.') self.shelfcodeDetailFrame()
def create_marc_file(self): cart_rec = get_record(Cart, did=self.selected_cart_id.get()) if cart_rec: status = get_record(Status, did=cart_rec.status_id) if status.name == 'finalized': self.create_to_marc_widget(cart_rec) else: msg = f'Cart "{cart_rec.name}" is not finalized.\n' \ 'Please change cart status to proceed.' messagebox.showwarning('Output to MARC file', msg)
def create_report_title(self, report_type, users_lbl, start_date, end_date): """Returns report title as string""" if self.system_id: system = get_record(System, did=self.system_id).name else: system = None if report_type == 1: date_today = date.today() if date_today.month > 6: years = f'{date_today.year}/{date_today.year + 1}' else: years = f'{date_today.year - 1}/{date_today.year}' self.top.report_title.set( f'{system} fiscal year-to-date summary ({years})\n' f'users: {", ".join(users_lbl)}') elif report_type == 2: self.top.report_title.set(f'{system} detailed breakdown\n' f'from {start_date} to {end_date}\n' f'users: {", ".join(users_lbl)}') elif report_type == 3: self.top.report_title.set(f'{system} breakdown by branch\n' f'(from {start_date} to {end_date})\n' f'users: {", ".join(users_lbl)}')
def show_grid(self, *args): self.locations = OrderedDict() self.delete_locations = [] self.last_row = 0 self.grid_name.set(self.gridLst.get(ACTIVE)) self.grid_record = get_record( DistGrid, name=self.grid_name.get(), distset_id=self.distr_record.did) self.locFrm.destroy() self.display_frame() locs = [] total_loc = 0 total_qty = 0 for loc in self.grid_record.gridlocations: locs.append(( loc.did, self.branch_idx[loc.branch_id], self.shelf_idx[loc.shelfcode_id], loc.qty, )) total_loc += 1 total_qty += loc.qty self.update_tally(total_qty, total_loc) self.create_loc_widgets(locs)
def insert_or_update_distribution(self): if self.distr_name.get(): if self.distr_record: # update did = self.distr_record.did kwargs = { 'name': self.distr_name.get(), 'system_id': self.system.get(), } try: save_data(DistSet, did, **kwargs) except BabelError as e: messagebox.showerror( 'Database error', f'Something went wrong:\n{e}') else: user_id = get_id_from_index( self.profile.get(), self.profile_idx) kwargs = { 'name': self.distr_name.get(), 'system_id': self.system.get(), 'user_id': user_id } try: save_data(DistSet, **kwargs) # update gui self.distr_record = get_record(DistSet, **kwargs) except BabelError as e: messagebox.showerror( 'Database error', f'Something went wrong:\n{e}') # refresh distributions list self.update_distributionLst() disable_widgets([self.distnameEnt])
def get_fund_data(fund_rec): """ Retrieves fund record and related data for display args: fund_rec: Fund obj returns: fund_data: dict, key(value): did(int), code(str), discrib(str), system_id(int), libraries(list) audns(list), branches(list), mattypes(list) """ if fund_rec: if fund_rec.describ is None: fund_desc = '' else: fund_desc = fund_rec.describ branches = [] for rec in fund_rec.branches: b = get_record(Branch, did=rec.branch_id) branches.append(b.code) audns = [] for rec in fund_rec.audns: a = get_record(Audn, did=rec.audn_id) audns.append(a.name) matTypes = [] for rec in fund_rec.matTypes: m = get_record(MatType, did=rec.matType_id) matTypes.append(m.name) libraries = [] for rec in fund_rec.libraries: lib = get_record(Library, did=rec.library_id) libraries.append(lib.name) return dict(did=fund_rec.did, code=fund_rec.code, system_id=fund_rec.system_id, describ=fund_desc, branches=branches, audns=audns, matTypes=matTypes, libraries=libraries) else: return
def show_fund(self, *args): mlogger.debug('Displaying fund details.') self.cur_manager.busy() enable_widgets(self.detFrm.winfo_children()) self.record = get_record(Fund, code=self.fundLst.get(ACTIVE)) self.display_branches() self.display_library() self.display_audiences() self.display_mattypes() fund_data = get_fund_data(self.record) mlogger.debug('Fund data: {}'.format(fund_data)) # display code & description self.fund_code.set(fund_data['code']) self.fund_desc.set(fund_data['describ']) # convert values to listbox indices and add conditions # branchLst branch_idx = self.get_listbox_indices('branches', self.branchOutLst, fund_data['branches']) mlogger.debug('branchOutLst index matches: {}'.format(branch_idx)) self.add_condition('branchLst', self.branchOutLst, self.branchInLst, branch_idx) # audnLst audn_idx = self.get_listbox_indices('audns', self.audnOutLst, fund_data['audns']) mlogger.debug('audnOutLst index matches: {}'.format(audn_idx)) self.add_condition('audnLst', self.audnOutLst, self.audnInLst, audn_idx) # libLst library_idx = self.get_listbox_indices('libraries', self.libOutLst, fund_data['libraries']) mlogger.debug('libOutLst index matches: {}'.format(library_idx)) self.add_condition('libLst', self.libOutLst, self.libInLst, library_idx) if self.system.get() == 1: disable_widgets(self.libraryFrm.winfo_children()) # mattypeOutLst mattype_idx = self.get_listbox_indices('mattypes', self.mattypeOutLst, fund_data['matTypes']) mlogger.debug('mattypeOutLst index matches: {}'.format(mattype_idx)) self.add_condition('mattypeLst', self.mattypeOutLst, self.mattypeInLst, mattype_idx) # lock the interface disable_widgets(self.detFrm.winfo_children()) self.cur_manager.notbusy()
def generate_cart_summary(self, cart_id): cart_rec = get_record(Cart, did=cart_id) if cart_rec: owner = self.profile_idx[cart_rec.user_id] try: library = get_record(Library, did=cart_rec.library_id).name except AttributeError: library = None stat_rec = get_record(Status, did=cart_rec.status_id) wlo_range, oid_range = get_cart_id_ranges(cart_id) lines = [] lines.append(f'cart: {cart_rec.name}') lines.append(f'status: {stat_rec.name}') lines.append(f'owner: {owner}') lines.append( f'created: {cart_rec.created} | updated: {cart_rec.updated}') lines.append(f'library: {library}') lines.append(f'blanketPO: {cart_rec.blanketPO}') lines.append(f'wlo range: {wlo_range[0]} - {wlo_range[1]}') lines.append(f'order # range: {oid_range[0]} - {oid_range[1]}') # cart_details data details = summarize_cart(cart_id) lines.append(f'languages: {details["langs"]}') lines.append(f'vendors: {details["vendors"]}') lines.append(f'material types: {details["mattypes"]}') lines.append(f'audiences: {details["audns"]}') lines.append(f'funds:') for fund, values in details["funds"].items(): lines.append( f'\t{fund}: ${values["total_cost"]:.2f}, ' f'copies: {values["copies"]}, titles: {values["titles"]}') return '\n'.join(lines)
def show_distribution(self, *args): name = self.distLst.get(ACTIVE) self.distr_name.set(name) self.distr_record = get_record( DistSet, name=name, system_id=self.system.get(), user_id=get_id_from_index( self.profile.get(), self.profile_idx)) # mlogger.debug(f'Selected Distr{self.distr_record}') self.update_gridLst() self.recreate_location_widgets() disable_widgets([self.distnameEnt])
def get_data(self): self.rec = get_record(Resource, did=self.rec_id) rec = convert4display(self.rec) self.title.set(rec.title) self.add_title.set(rec.add_title) self.author.set(rec.author) self.series.set(rec.series) self.publisher.set(rec.publisher) self.pub_date.set(rec.pub_date) self.pub_place.set(rec.pub_place) self.isbn.set(rec.isbn) self.upc.set(rec.upc) self.other_no.set(rec.other_no) self.price_list.set(rec.price_list) self.price_disc.set(rec.price_disc) self.misc.set(rec.misc) self.summaryTxt.insert('1.0', rec.summary)
def analyze_data(self): report_data = None system_id = self.system.get() users = self.get_selected_users() user_ids = self.map_selected_users_to_datastore_id(users) if self.library.get() == 'any': library_id = None else: library_id = get_record(Library, name=self.library.get()).did try: if self.report.get() == 1: report_data = get_fy_summary(system_id, library_id, user_ids) elif self.report.get() == 2: report_data = get_categories_breakdown(system_id, library_id, user_ids, self.date_from.get(), self.date_to.get()) elif self.report.get() == 3: report_data = get_branch_breakdown(system_id, library_id, user_ids, self.date_from.get(), self.date_to.get()) report_data['report_type'] = self.report.get() if users: report_data['users_lbl'] = users else: report_data['users_lbl'] = ['All users'] except BabelError as e: messagebox.showerror('Report error', e) finally: return report_data