diff options
Diffstat (limited to 'tbc/models.py')
-rw-r--r-- | tbc/models.py | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/tbc/models.py b/tbc/models.py new file mode 100644 index 0000000..4032125 --- /dev/null +++ b/tbc/models.py @@ -0,0 +1,183 @@ +from django.db import models +from django.contrib.auth.models import User +from PythonTBC import settings +from django.contrib.admin.models import LogEntry +from local import sitemap_path + + +CATEGORY = (("fluid mechanics", "Fluid Mechanics"), + ("control systems", "Control Theory & Control Systems"), + ("chemical engineering", "Chemical Engineering"), + ("thermodynamics", "Thermodynamics"), + ("mechanical engineering", "Mechanical Engineering"), + ("signal processing", "Signal Processing"), + ("digital communications", "Digital Communications"), + ("electrical technology", "Electrical Technology"), + ("maths & science", "Mathematics & Pure Science"), + ("analog electronics", "Analog Electronics"), + ("digital electronics", "Digital Electronics"), + ("computer programming", "Computer Programming"), + ("others", "Others")) + +GENDER = (("male", "Male"), + ("female", "Female")) + +COURSES = (("mtech", "M.Tech"), + ("me", "ME"), + ("msc", "MSc"), + ("mscit", "MScIT"), + ("mca", "MCA"), + ("btech", "B.Tech"), + ("be", "BE"), + ("bca", "BCA"), + ("bscit", "BScIt"), + ("others", "Others")) + +ABOUT_PROJ = (("pythontbc website", "Python TBC Website"), + ("friend", "Through Friend"), + ("prof/teacher", "Through Prof/Teacher"), + ("mailing list", "Through Mailing List"), + ("posters in college", "Through Posters in College"), + ("others", "Others")) + +PROPOSAL_STATUS = (("pending","Pending"), + ("samples","Samples"), + ("sample submitted", "Sample Submitted"), + ("sample disapproved", "Sample Disapproved"), + ("sample resubmitted", "Sample Resubmitted"), + ("book alloted","Book Alloted"), + ("codes submitted", "Codes Submitted"), + ("codes disapproved", "Codes Disapproved"), + ("book completed","Book Completed"), + ("rejected","Rejected")) + +BOOK_PREFERENCE = (("book1","1st Book"), + ("book2","2nd Book"), + ("book3","3rd Book")) + + +def get_notebook_dir(instance, filename): + book_dir = instance.book.title.replace(' ', '_')+'_by_'+instance.book.author.replace(' ','_') + return '%s/%s' % (book_dir, filename.replace(' ', '_')) + + +def get_image_dir(instance, filename): + book_dir = instance.book.title.replace(' ', '_')+'_by_'+instance.book.author.replace(' ','_') + return '%s/screenshots/%s' % (book_dir, filename.replace(' ', '_')) + + +def get_sample_dir(instance, filename): + user_name = instance.proposal.user.user.first_name+instance.proposal.user.user.last_name + return 'sample_notebooks/%s/%s' % (user_name, filename.replace(' ', '_')) + +class Profile(models.Model): + user = models.ForeignKey(User) + about = models.CharField(max_length=256) + insti_org = models.CharField(max_length=128) + course = models.CharField(max_length=10, choices=COURSES) + dept_desg = models.CharField(max_length=32) + dob = models.DateField() + gender = models.CharField(max_length=10, choices=GENDER) + phone_no = models.CharField(max_length=15) + about_proj = models.CharField(max_length=50, choices=ABOUT_PROJ) + def __unicode__(self): + name = self.user.first_name or 'Profile' + return '%s'%(name) + + +class Reviewer(models.Model): + name = models.CharField(max_length=32) + email = models.EmailField() + def __unicode__(self): + name = self.name or 'Reviewer' + return '%s'%(name) + +class Book(models.Model): + title = models.CharField(max_length=500) + author = models.CharField(max_length=300) + category = models.CharField(max_length=32, choices=CATEGORY) + publisher_place = models.CharField(max_length=150) + isbn = models.CharField(max_length=50) + edition = models.CharField(max_length=15) + year_of_pub = models.CharField(max_length=4) + no_chapters = models.IntegerField(max_length=2, default=0, blank=True) + contributor = models.ForeignKey(Profile) + reviewer = models.ForeignKey(Reviewer) + approved = models.BooleanField(default=False) + def __unicode__(self): + name = self.title or 'Book' + return '%s'%(name) + + +class Chapters(models.Model): + name = models.CharField(max_length=200) + notebook = models.FileField(upload_to=get_notebook_dir) + book = models.ForeignKey(Book) + screen_shots = models.ManyToManyField('ScreenShots') + def __unicode__(self): + name = self.name or 'Chapter' + return '%s'%(name) + def get_absolute_url(self): + return sitemap_path+str(self.notebook) + + +class ScreenShots(models.Model): + caption = models.CharField(max_length=128) + image = models.FileField(upload_to=get_image_dir) + book = models.ForeignKey(Book) + def __unicode__(self): + name = self.caption or 'ScreenShots' + return '%s'%(name) + + +class TempBook(models.Model): + title = models.CharField(max_length=500) + author = models.CharField(max_length=300) + category = models.CharField(max_length=32, choices=CATEGORY) + publisher_place = models.CharField(max_length=150) + isbn = models.CharField(max_length=50) + edition = models.CharField(max_length=15) + year_of_pub = models.CharField(max_length=4) + no_chapters = models.IntegerField(max_length=2) + def __unicode__(self): + name = self.title or 'Book' + return '%s'%(name) + + +class Proposal(models.Model): + user = models.ForeignKey(Profile) + textbooks = models.ManyToManyField(TempBook, related_name="proposed_textbooks") + accepted = models.ForeignKey(Book, related_name="approved_textbook", blank=True,null=True) + status = models.CharField(max_length=20, default="Pending", choices=PROPOSAL_STATUS) + remarks = models.CharField(max_length=1000) + def __unicode__(self): + user = self.user.user.username or 'User' + return '%s'%(user) + + +class SampleNotebook(models.Model): + proposal = models.ForeignKey(Proposal) + name = models.CharField(max_length=40) + sample_notebook = models.FileField(upload_to=get_sample_dir) + def __unicode__(self): + notebook = self.proposal.accepted.title or 'notebook' + return '%s'%(notebook) + + +class ActivityLog(LogEntry): + proposal_id = models.IntegerField(null=True) + conversation = models.TextField(null=True) + + +class AicteBook(models.Model): + title = models.TextField() + author = models.CharField(max_length=300L) + category = models.CharField(max_length=32L) + publisher_place = models.CharField(max_length=200L) + isbn = models.CharField(max_length=50L) + edition = models.CharField(max_length=15L) + year_of_pub = models.CharField(max_length=4L) + proposed = models.BooleanField(default=False) + def __unicode__(self): + notebook = self.title or 'Book' + return '%s'%(notebook) |