Commit 29a17ac0 authored by Martina Therese R. Reyes's avatar Martina Therese R. Reyes

Merge branch 'xtine' of ssh://gitlab.discs.ateneo.edu:15316/matereyes00/boodle into mate_devbranch

parents ea530206 35191150
...@@ -5,11 +5,6 @@ body { ...@@ -5,11 +5,6 @@ body {
height: 100%; height: 100%;
font-size: 11pt; font-size: 11pt;
color: #3d3838; color: #3d3838;
<<<<<<< HEAD
background-color: black;
=======
/* background-color: black; */
>>>>>>> 8f1f8c3028c012cf2653c3f58224f0a116945f2c
} }
.carousel-item img { .carousel-item img {
...@@ -25,52 +20,52 @@ nav { ...@@ -25,52 +20,52 @@ nav {
transition: all 0.5s; transition: all 0.5s;
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
.fixed-nav nav { .fixed-nav nav {
position: fixed; position: fixed;
box-shadow 0 5px black; box-shadow 0 5px black;
} }
nav ul { nav ul {
margin: 0; margin: 0;
padding:0; padding: 0;
list-style: none; list-style: none;
display: flex; display: flex;
} }
nav li { nav li {
flex: 1; flex: 1;
text-align: center; text-align: center;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
li.logo { li.logo {
max-width: 0; max-width: 0;
overflow: hidden; overflow: hidden;
background: white; background: white;
transition: all .5s; transition: all .5s;
font-weight: 600; font-weight: 600;
font-size: 30px; font-size: 30px;
} }
li.logo a { li.logo a {
color: black; color: black;
} }
nav a { nav a {
text-decoration: none; text-decoration: none;
padding: 20px; padding: 20px;
display: inline-block; display: inline-block;
color: white; color: white;
transition: all 0.2s; transition: all 0.2s;
} }
/* nav bar end */ /* nav bar end */
.footer-basic{ .footer-basic {
background-color: black; background-color: black;
color: #f8edeb; color: #f8edeb;
display: flex; display: flex;
...@@ -101,6 +96,7 @@ nav { ...@@ -101,6 +96,7 @@ nav {
text-align: right; text-align: right;
font-size: 20px; font-size: 20px;
} }
/* homepage happening now */ /* homepage happening now */
.title-container { .title-container {
...@@ -108,16 +104,19 @@ nav { ...@@ -108,16 +104,19 @@ nav {
padding: 8px 32px; padding: 8px 32px;
justify-content: center; justify-content: center;
} }
@media(max-width:480px){
.event-container{ @media(max-width:480px) {
.event-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.event{ flex: 1 1 auto; } .event {
flex: 1 1 auto;
}
} }
.event-container{ .event-container {
margin: 50px; margin: 50px;
display: flex; display: flex;
justify-content: center; justify-content: center;
...@@ -135,11 +134,21 @@ nav { ...@@ -135,11 +134,21 @@ nav {
.event img { .event img {
max-width: 100%; max-width: 100%;
object-fit:cover; object-fit: cover;
} }
.event-text{ padding: 16px; text-align: center; } .event-text {
padding: 16px;
text-align: center;
}
.slick-prev:before {
color: black !important;
}
.slick-next:before {
color: black !important;
}
/* cards */ /* cards */
...@@ -148,54 +157,171 @@ nav { ...@@ -148,54 +157,171 @@ nav {
padding: 0; padding: 0;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.cards img { .cards img {
float: left; float: left;
display: block; display: block;
margin: 10px 15px 10px 0; margin: 10px 15px 10px 0;
object-fit: cover; object-fit: cover;
width:80px; width: 80px;
height:80px; height: 80px;
border-radius: 100%; border-radius: 100%;
border: 2px dotted black; border: 2px dotted black;
shape-outside: circle(50%); shape-outside: circle(50%);
} }
.cards li { .cards li {
background-color: #f0f0f0; background-color: #f0f0f0;
border: 1px dotted #c3a9ff; border: 1px dotted #c3a9ff;
margin: 0 10px 20px 10px; margin: 0 10px 20px 10px;
padding: 8px 16px; padding: 8px 16px;
border-radius: 5px; border-radius: 5px;
flex: 1 1 480px; flex: 1 1 480px;
display:flex; display: flex;
align-items: center; align-items: center;
} }
.cards p { .cards p {}
/* cards end */
} /* auction view */
/* cards end */ .product-info {
padding: 8px 16px;
}
/* auction view */ /* auction view end */
.product-info{
padding: 8px 16px;
}
/* auction view end */
.slick-prev:before {
color: black !important; /* inventory/store */
.store-container {
display: flex;
flex-direction: column;
}
.store-banner {
height: 180px;
position: relative;
text-align: center;
display: inline-block;
background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
/* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0.65)), color-stop(100%, rgba(0, 0, 0, 0)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
/* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
/* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
/* IE10+ */
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.65) 100%);
/* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#a6000000', endColorstr='#00000000', GradientType=0);
/* IE6-9 */
}
.store-banner img {
width: 100%;
object-fit: cover;
max-height: 100%;
position: relative;
z-index: -1;
display: block;
}
.store-info {
position: absolute;
color: white;
border: 2px solid black;
bottom: 8px;
left: 4rem;
text-align: left !important;
min-width: 50%;
max-width: 100%;
z-index: +1;
}
.store-info img {
float: left;
display: block;
margin: 10px 15px 10px 0px;
object-fit: cover;
width: 100px;
height: 100px;
border-radius: 100%;
border: 2px dotted black;
}
.sort-by {
display: flex;
justify-content: flex-end;
padding: 2rem 4rem 0 4rem;
;
border: 1px solid black;
}
.store-item-container {
display: grid;
justify-content: center;
grid-gap: 1rem;
grid-template-columns: repeat(5, 1fr);
padding: 4rem;
}
@media(max-width:600px) {
.store-item-container {
grid-template-columns: repeat(2, 1fr);
} }
}
.slick-next:before { @media(max-width:480px) {
color: black !important; .store-item-container {
grid-template-columns: 1fr;
} }
}
.store-item {
background-color: skyblue;
border: 2px dotted black;
}
.store-item img {
max-width: 100%;
object-fit: cover;
}
.item-info {
padding: 1rem 1rem 0 1rem;
}
.item-btns {
display: flex;
justify-content: flex-end;
margin: 0 4px 4px 0;
}
.store-btns-container {
display: flex;
justify-content: center;
align-items: center;
}
/* item detail view / add, edit item */
.item-image-container,
.item-form-container {
border: 2px solid black;
padding: 1rem;
}
\ No newline at end of file
{% extends 'boodlesite\templates\base.html' %}
{% load static %}
{% block title %}My Store{% endblock %}
{% block styles %}
{% endblock %}
{% block content %}
<div class="container">
<h1>Add/Edit Item</h1>
<div class="row">
<div class="col-lg-7 col-md-6">ITEM IMAGE CONTAINER
<div class="item-image-container"></div>
</div>
<div class=" col-lg-5 col-md-6">ITEM FORM CONTAINER
<div class="item-form-container">
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
</div>
<button type="submit" name="Add Item"> Add Item </button>
</form>
</div>
</div>
</div>
<!-- Form with fields:
[Item name]
[Item Description]
[Floor Price] -->
<!-- Image, if no image add image -->
{% endblock %}
\ No newline at end of file
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<li><a href="#">About</a></li> <li><a href="#">About</a></li>
<li><a href="#">Help</a></li> <li><a href="#">Help</a></li>
<li><a href="#">My Profile</a></li> <li><a href="#">My Profile</a></li>
<li><a href="#">My Store</a></li> <li><a href="/store">My Store</a></li>
</ul> </ul>
</nav> </nav>
......
{% extends 'boodlesite\templates\base.html' %}
{% load static %}
{% block title %}Schedule Auction{% endblock %}
{% block styles %}
{% endblock %}
{% block content %}
<div class="container"><button type="button">Save Auction</button>
</div>
<!-- Form fields:
[Auction Title]
Drop down: [Select time for Auction]
Set Auction timer:
Start:
Drop down: [Month] [Day] [Year] Time: [Hour] : [Minute]
End:
Drop down: [Month] [Day] [Year] Time: [Hour] : [Minute]
-->
{% endblock %}
\ No newline at end of file
{% extends 'boodlesite\templates\base.html' %}
{% load static %}
{% block title %}My Store{% endblock %}
{% block styles %}
{% endblock %}
{% block content %}
<div class="store-container">
<div class="store-banner"><img src="https://www.w3schools.com/howto/img_snow_wide.jpg">
<div class="store-info">
<img src="https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png">
<h1>{{ current_store.storename }}</h1>
<p>@username</p>
<button class="edit-shop-btn" type="button">Edit Shop Info</button>
</div>
</div>
<div class="sort-by">
<label for="items">Sort items by: </label>
<select id="items" name="items">
<option value="">A-Z</option>
<option value="">Oldest</option>
<option value="">Newest</option>
<option value="">Price (Low-High)</option>
<option value="">Price (High-Low) </option>
</select>
</div>
<div class="store-item-container">
{% if store_items %}
{% for item in store_items %}
<div class="store-item">
<img src="https://www.kurin.com/wp-content/uploads/placeholder-square.jpg">
<div class="item-info">
<h4>{{ item.itemname }}</h4>
<p>{{item.itemspecs}} <span class="item-price">PHP {{item.floorprice}}</span></p>
</div>
<div class="item-btns"> <button>Auction</button> <button>Edit</button> <button>Delete</button>
</div>
</div>
{% endfor %}
{% else %}
<h4 text-align="center"> Your Inventory is empty. </h4>
{% endif %}
<!-- <div class="store-item">
<img src="https://www.kurin.com/wp-content/uploads/placeholder-square.jpg">
<div class="item-info">
<h4>Itemname</h4>
<p>Itemdescription <span class="item-price">PHP 500</span></p>
</div>
<div class="item-btns"> <button>Auction</button> <button>Edit</button> <button>Delete</button>
</div>
</div> -->
</div>
</div>
<div class="store-btns-container">
<button type="button"><a href="/startauction">Start Auction</a></button>
<button type="button"><a href="{% url 'additemid' current_store.storeid %}">Add Item</a></button>
</div>
]
</div>
{% endblock %}
\ No newline at end of file
{% extends 'boodlesite\templates\base.html' %}
{% load static %}
{% block title %}My Store{% endblock %}
{% block styles %}
{% endblock %}
{% block content %}
<h2>This is a temp page to access storeid 1 (and not thru the navbar)</h2>
<p>Remove this page once nav bar is personalized that it accesses the logged in user's store</p>
<h1 text-align="center">Link to My Store: <a href="{% url 'storeid' current_store.storeid %}">{{ current_store.storename }}</a></h1>
{% endblock %}
\ No newline at end of file
from django import forms from django import forms
from django.forms import (ModelForm, from django.forms import (ModelForm,
TextInput, Textarea, widgets) TextInput, Textarea, widgets)
from django.utils.translation import gettext_lazy as _
from .models import * from .models import *
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
...@@ -28,3 +29,15 @@ class PlaceBidForm(forms.ModelForm): ...@@ -28,3 +29,15 @@ class PlaceBidForm(forms.ModelForm):
highest_bid = auction_bids.latest('bidtime').amount highest_bid = auction_bids.latest('bidtime').amount
if form_amount <= highest_bid: if form_amount <= highest_bid:
raise ValidationError('Please enter an amount higher than the current highest bid.') raise ValidationError('Please enter an amount higher than the current highest bid.')
class AddItemForm(forms.ModelForm):
class Meta:
model = Item
fields = ['itemname','itemspecs','floorprice','storeid']
widgets = {'storeid': forms.HiddenInput()}
labels = {
'itemname': _('Item Name'),
'itemspecs': _('Item Description'),
'floorprice': _('Floor Price')
}
\ No newline at end of file
...@@ -151,7 +151,18 @@ class Item(models.Model): ...@@ -151,7 +151,18 @@ class Item(models.Model):
itemspecs = models.CharField(max_length=700) itemspecs = models.CharField(max_length=700)
floorprice = models.DecimalField(max_digits=15, decimal_places=4) floorprice = models.DecimalField(max_digits=15, decimal_places=4)
sellprice = models.DecimalField(max_digits=15, decimal_places=4, blank=True, null=True) sellprice = models.DecimalField(max_digits=15, decimal_places=4, blank=True, null=True)
storeid = models.ForeignKey('Store', models.DO_NOTHING, db_column='storeid')
class Meta: class Meta:
managed = False managed = False
db_table = 'item' db_table = 'item'
class Store(models.Model):
storeid = models.AutoField(primary_key=True)
storename = models.CharField(max_length=255)
storedesc = models.CharField(max_length=700)
class Meta:
managed = False
db_table = 'store'
...@@ -5,6 +5,12 @@ from .views import * ...@@ -5,6 +5,12 @@ from .views import *
urlpatterns = [ urlpatterns = [
path('', homepage, name='index'), path('', homepage, name='index'),
path('auction', auction, name='auction'), path('auction', auction, name='auction'),
path('auction/<int:pk>/',auction,name='auctionid'), path('auction/<int:pk>/',auction, name='auctionid'),
path('error404', error404, name='error404'), path('error404', error404, name='error404'),
path('store', tempstore, name='store'),
path('store/<int:pk>', mystore, name='storeid'),
path('additem', addItem, name='additem'),
path('additem/<int:pk>', addItem, name='additemid'),
path('startauction', startAuction, name='startauction'),
] ]
\ No newline at end of file
...@@ -4,7 +4,6 @@ from django.http import HttpResponse ...@@ -4,7 +4,6 @@ from django.http import HttpResponse
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from .models import * from .models import *
from .forms import * from .forms import *
...@@ -16,7 +15,7 @@ def homepage(request): ...@@ -16,7 +15,7 @@ def homepage(request):
# Filter by auctions happening right now # Filter by auctions happening right now
auctions_now = Auction.objects.filter(auctionstart__lt=datetime.now(),auctionend__gt=datetime.now()) auctions_now = Auction.objects.filter(auctionstart__lt=datetime.now(),auctionend__gt=datetime.now())
for auction in auctions_now: # for auction in auctions_now:
print(auction) print(auction)
# Filter by auctions scheduled at most a week from now # Filter by auctions scheduled at most a week from now
...@@ -27,12 +26,13 @@ def homepage(request): ...@@ -27,12 +26,13 @@ def homepage(request):
context = { context = {
'auctions_now': auctions_now, 'auctions_now': auctions_now,
'auctions_soon': auctions_soon 'auctions_soon': auctions_soon,
} }
return render(request, "boodlesite/templates/index.html",context) return render(request, "boodlesite/templates/index.html",context)
def auction(request, pk): def auction(request, pk):
# Current auction ID # Current auction ID
auction = Auction.objects.get(pk=pk) auction = Auction.objects.get(pk=pk)
# Item for auction # Item for auction
...@@ -65,7 +65,7 @@ def auction(request, pk): ...@@ -65,7 +65,7 @@ def auction(request, pk):
'item_floor_price': auction_item.floorprice, 'item_floor_price': auction_item.floorprice,
'highest_bid': highest_bid, 'highest_bid': highest_bid,
'auction_end': auction.auctionend, 'auction_end': auction.auctionend,
'form' : form 'form' : form,
} }
if auction.auctionend < datetime.now(): if auction.auctionend < datetime.now():
...@@ -78,3 +78,61 @@ def auction(request, pk): ...@@ -78,3 +78,61 @@ def auction(request, pk):
def error404(request): def error404(request):
return render(request, "boodlesite/templates/error404/notstarted_error404.html") return render(request, "boodlesite/templates/error404/notstarted_error404.html")
def tempstore(request): # temp view
#### Access to store 1 [ edit accordingly when it becomes accessible thru a user ] ####
current_store = Store.objects.get(storeid=1)
context = {
'current_store':current_store #### used for navbar, access to store 1
}
return render(request, "boodlesite/templates/tempstore.html", context)
def mystore(request, pk):
#### Access to store 1 [ edit accordingly when it becomes accessible thru a user ] ####
current_store = Store.objects.get(pk=pk)
store_items = Item.objects.filter(storeid=pk)
context = {
'current_store':current_store,
'store_items':store_items
}
return render(request, "boodlesite/templates/store.html", context)
def addItem(request, pk):
# Current Store, pk here is the storeid
current_store = Store.objects.get(pk=pk)
form = AddItemForm(initial={'storeid':current_store})
if request.method == 'POST':
form = AddItemForm(request.POST,initial={'storeid':current_store})
if form.is_valid():
form.save()
return redirect('storeid', pk=pk)
context = {
'form':form,
'current_store': current_store # access to store 1
}
return render(request, "boodlesite/templates/additem.html", context)
def startAuction(request):
#### Access to store 1 [ edit accordingly when it becomes accessible thru a user ] ####
current_store = Store.objects.get(storeid=1)
context = {
'current_store':current_store
}
return render(request, "boodlesite/templates/startauction.html", context)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment