Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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)}')
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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])
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
    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()
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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])
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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