Source of file BookLoanArchive.php
Size: 7,112 Bytes - Last Modified: 2021-12-24T05:16:03+00:00
/var/www/docs.ssmods.com/process/src/code/model/BookLoanArchive.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | <?php /* * MIT License * * Copyright (c) 2016 Hudhaifa Shatnawi * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * * @author Hudhaifa Shatnawi <hudhaifa.shatnawi@gmail.com> * @version 1.0, Sep 7, 2016 - 3:18:54 PM */ class BookLoanArchive extends DataObject { /** * Default loan period, can be changed from the YML config file * @var type */ private static $loan_period = 10; private static $db = array( 'LoanDate' => 'Date', 'DueDate' => 'Date', // Read Only 'BookID' => 'Int', 'PatronID' => 'Int', 'RemoteIP' => 'Varchar(128)', 'Agent' => 'Varchar(255)', ); private static $has_one = array( 'ReturnedBy' => 'Member', ); private static $has_many = array( ); private static $defaults = array( ); private static $searchable_fields = array( 'BookID', 'PatronID', 'LoanDate', 'DueDate', ); private static $summary_fields = array( 'BookID', 'PatronID', 'LoanDate', 'DueDate', 'Created', 'ReturnedBy.Title', ); private static $default_sort = 'Created DESC'; public function fieldLabels($includerelations = true) { $labels = parent::fieldLabels($includerelations); $labels['LoanDate'] = _t('Librarian.LOAN_DATE', "Loan Date"); $labels['DueDate'] = _t('Librarian.DUE_DATE', "Due Date"); $labels['Created'] = _t('Librarian.RETURN_DATE', "Return Date"); $labels['ReturnedBy'] = _t('Librarian.LIBRARIAN', "Librarian"); $labels['ReturnedBy.Title'] = _t('Librarian.LIBRARIAN', "Librarian"); $labels['Patron.Title'] = _t('Librarian.PATRON_TITLE', "Patron Title"); $labels['Patron'] = _t('Librarian.PATRON', "Patron Title"); $labels['Book'] = _t('Librarian.BOOK', "SerialNumber"); $labels['Book.SerialNumber'] = _t('Librarian.BARCODE', "SerialNumber"); $labels['Book.Title'] = _t('Librarian.BOOK_TITLE', 'Title'); $labels['Book.TheIndex'] = _t('Librarian.VOLUME_INDEX', "Volume Index"); return $labels; } public function getCMSFields() { Requirements::css(LIBRARIAN_DIR . '/css/librarian.css'); $fields = FieldList::create( ToggleCompositeField::create('Book', 'Book', array( ReadonlyField::create('BookTitle', 'Book Title'), ReadonlyField::create('VolumeIndex', 'Index'), ReadonlyField::create('BookPublisher', 'Publisher'), ))->setStartClosed(false)->addExtraClass('history-field'), // ToggleCompositeField::create('Patron', 'Patron', array( ReadonlyField::create('PatronName', 'Name'), ))->setStartClosed(false)->addExtraClass('history-field'), // ToggleCompositeField::create('Details', 'Details', array( ReadonlyField::create('LoanDate', 'Loan Date'), ReadonlyField::create('DueDate', 'Due Date'), ReadonlyField::create('Created', 'Return Date'), ReadonlyField::create('Librarian', 'Librarian'), ReadonlyField::create('RemoteIP', 'Remote IP'), ReadonlyField::create('Agent', 'Agent'), ))->setStartClosed(false)->addExtraClass('history-field') ); $fields = $fields->makeReadonly(); return $fields; } // public function canDelete($member = null) { // return false; //Permission::check('CMS_ACCESS_CMSMain', 'any', $member); // } public function Title() { return $this->getPatronName() . ' #' . $this->getBookTitle(); } /** * Track returned loans * * @param BookLoan $returnedLoan The returned loan * @return BookLoanArchive * */ public function track(BookLoan $returnedLoan) { $this->BookID = $returnedLoan->BookID; $this->PatronID = $returnedLoan->PatronID; $this->LoanDate = $returnedLoan->LoanDate; $this->DueDate = $returnedLoan->DueDate; $this->ReturnedByID = Member::currentUserID(); $this->RemoteIP = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : (Director::is_cli() ? 'CLI' : 'Unknown remote addr'); $this->Agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $this->write(); return $this; } /** * Return a description/summary of the user * @return string * */ public function getLibrarian() { if ($user = $this->ReturnedBy()) { $name = $user->getTitle(); if ($user->Email) { $name .= " <$user->Email>"; } return $name; } } public function getPatron() { return DataObject::get_by_id('Patron', $this->PatronID); } public function getPatronName() { if ($patron = $this->getPatron()) { $name = $patron->getTitle(); if ($patron->Email) { $name .= " <$patron->Email>"; } return $name; } } public function getBook() { return DataObject::get_by_id('BookVolume', $this->BookID); } public function getBookTitle() { if ($book = $this->getBook()) { $name = $book->getTitle(); return $name; } } public function getBookName() { if ($book = $this->getBook()) { $name = $book->getBookName(); return $name; } } public function getVolumeIndex() { if ($book = $this->getBook()) { $name = $book->TheIndex; return $name; } } public function getBookPublisher() { if ($book = $this->getBook()) { $name = $book->BookCopy()->Publisher()->Name; return $name; } } } |