Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev backend #3

Merged
merged 46 commits into from
Jan 31, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
500a204
merge faild
srhinee Nov 12, 2018
41df2bf
fix
zxh326 Nov 13, 2018
6dcb441
fix
zxh326 Nov 13, 2018
2381368
xian
srhinee Nov 14, 2018
7517a34
f
zxh326 Nov 14, 2018
ae847b0
f
zxh326 Nov 14, 2018
0cd755a
f
zxh326 Nov 14, 2018
bae380c
f
zxh326 Nov 14, 2018
c7e148f
sfd
srhinee Nov 14, 2018
c5beb1c
xian
srhinee Nov 14, 2018
4748fa2
fix
zxh326 Nov 14, 2018
7fb135b
f
zxh326 Nov 14, 2018
67cea8b
xian
srhinee Nov 14, 2018
1913d03
f
zxh326 Nov 15, 2018
f90ee09
xian
srhinee Nov 15, 2018
6aa81cb
xian
srhinee Nov 15, 2018
881b9a1
f
zxh326 Nov 15, 2018
911bf12
Merge branch 'samsara' of github.com:zxh326/Subway into samsara
zxh326 Nov 15, 2018
4f3cbed
f
zxh326 Nov 15, 2018
f684e6c
a
srhinee Nov 15, 2018
21e4d22
f
zxh326 Nov 15, 2018
f67794e
xian
srhinee Nov 15, 2018
e37187b
1
srhinee Nov 15, 2018
c4ea9b4
Merge branch 'master' into samsara
zxh326 Nov 15, 2018
8402222
add update member
zxh326 Nov 16, 2018
34cb93b
a
zxh326 Dec 3, 2018
7bbfb7a
safety technology
zxh326 Jan 17, 2019
22c3f27
a
srhinee Jan 18, 2019
6972a41
Merge branch 'dev-backend' of https://github.com/NeuSovo/Subway into …
srhinee Jan 18, 2019
ab40e95
init database
srhinee Jan 20, 2019
217bd61
continue
srhinee Jan 20, 2019
797996b
continiue
srhinee Jan 21, 2019
a9a5786
technology
srhinee Jan 21, 2019
29c0acd
fix dj-form
srhinee Jan 23, 2019
45b0134
add schedule
srhinee Jan 23, 2019
0d7ad3c
change member_add_form with dj-form
srhinee Jan 23, 2019
c6b8840
fix conflicts
zxh326 Jan 24, 2019
a5c60e0
fix merge conflicts
zxh326 Jan 16, 2019
e399ec2
Update README.md
zxh326 Jan 18, 2019
baec39a
safety technology
zxh326 Jan 18, 2019
f0be751
encrypt password
zxh326 Jan 21, 2019
50f06f3
fix
zxh326 Jan 21, 2019
e434d86
Merge pull request #1 from dev-backend
zxh326 Jan 22, 2019
568050d
fix migration files
zxh326 Jan 22, 2019
724633d
fix merge confilcts
zxh326 Jan 24, 2019
6d33176
Merge branch 'test' into dev-backend
zxh326 Jan 31, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Subway/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('member.urls')),
path('schedule/',include('schedule.urls')),
path('device',include('device.urls')),
path('material/', include('material.urls')),
path('technology/', include('technology.urls')),
path('safety/', include('safety.urls'))
Expand Down
9 changes: 9 additions & 0 deletions core/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,12 @@ def permission(request):
res[item['permissions__code']] = True
print(res)
return res


def validate_file_extension(value):
import os
from django.core.exceptions import ValidationError
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls']
if not ext.lower() in valid_extensions:
raise ValidationError(u'不支持此类型的文件')
10 changes: 10 additions & 0 deletions device/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path
from .views import *

app_name = "device"
urlpatterns = [
path('list', DeviceFileListView.as_view(), name='list'), # TODO
path('add', DeviceFileCreateView.as_view(), name='add'),
path('update/<int:pk>', DeviceFileUpdatView.as_view(), name='update'),
path('delete/<int:pk>', DeviceFileDetailView.as_view(), name='delete'),
]
21 changes: 20 additions & 1 deletion device/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView, TemplateView

# Create your views here.

class DeviceFileListView(TemplateView):
template_name = "device/device.html"


class DeviceFileCreateView(CreateView):
template_name = "TEMPLATE_NAME"


class DeviceFileUpdatView(UpdateView):
template_name = "TEMPLATE_NAME"


class DeviceFileDeleteView(DeleteView):
template_name = "TEMPLATE_NAME"


class DeviceFileDetailView(DetailView):
template_name = "TEMPLATE_NAME"
21 changes: 0 additions & 21 deletions material/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,6 @@ class Material(models.Model):
def __str__(self):
return self.name

def in_stock(self, user, num):
try:
with transaction.atomic():
self.objects.material_set.create(num=num, create_user=user, operation_type=0)
self.num += num
self.save()
return True
except:
return False

def out_stock(self, user, num):
try:
with transaction.atomic():
self.objects.material_set.create(num=num, create_user=user, operation_type=1)
self.num -= num
self.save()
return True
except Exception as e:
print(e)
return False


class MaterialStock(models.Model):

Expand Down
7 changes: 4 additions & 3 deletions material/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import django_excel as excel

from .models import *
from .forms import MaterialForm
from .forms import MaterialForm


class MaterialAddView(PassRequestMixin, SuccessMessageMixin, CreateView):
Expand Down Expand Up @@ -53,7 +53,7 @@ def get_queryset(self):
if self.pk:
queryset = queryset.filter(material_id=self.pk)
return queryset

def get_context_data(self, **kwargs):
context = super(MaterialStockRecordView, self).get_context_data(**kwargs)
context['material_list'] = Material.objects.all()
Expand All @@ -62,7 +62,8 @@ def get_context_data(self, **kwargs):
else:
context['select_material'] = '全部'
return context



def material_in_out_stock(request, **kwargs):
material = get_object_or_404(Material, pk=kwargs.get('pk'))
in_or_out = int(request.POST.get('type_id')) # 0 in 1 out
Expand Down
6 changes: 1 addition & 5 deletions member/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,6 @@ class RoleAdmin(admin.ModelAdmin):
filter_horizontal = ('permissions',)


class PermissionAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'code')


admin.site.register(Role, RoleAdmin)
admin.site.register(Account, AccountAdmin)
admin.site.register(Permission, PermissionAdmin)
admin.site.register(Permission)
2 changes: 1 addition & 1 deletion member/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class Meta:
fields = ['username', 'enp', 'last_name', 'position', 'roles']


class MemberForm(forms.ModelForm):
class MemberForm(PopRequestMixin, CreateUpdateAjaxMixin, forms.ModelForm):
class Meta:
model = Member
fields = '__all__'
Expand Down
3 changes: 2 additions & 1 deletion member/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Generated by Django 2.1.3 on 2019-01-22 05:52
# Generated by Django 2.1.3 on 2019-01-11 08:56


import django.contrib.auth.models
import django.contrib.auth.validators
Expand Down
18 changes: 10 additions & 8 deletions member/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ def post(self, request, *args, **kwargs):

def form_valid(self, form):
self.object = form.save()
self.object.enp = form.cleaned_data.get('password1')
self.object.enp = en_password(form.cleaned_data.get('password1'))
print(self.object.enp, form.cleaned_data.get('password1'))
self.object.user_dept = self.dept
self.object.roles.add(*list(form.cleaned_data.get('roles')))
return super(AssignAccountView, self).form_valid(form)
Expand All @@ -85,8 +86,8 @@ class AssignAccountUpdateView(PassRequestMixin, SuccessMessageMixin, UpdateView)

def form_valid(self, form):
self.object = form.save()
self.object.enp = form.cleaned_data.get('enp')
self.object.set_password(self.object.enp)
self.object.enp = en_password(form.cleaned_data.get('enp'))
self.object.set_password(form.cleaned_data.get('enp'))
self.object.roles.clear()
self.object.roles.add(*list(form.cleaned_data.get('roles')))
return super(AssignAccountUpdateView, self).form_valid(form)
Expand Down Expand Up @@ -177,10 +178,11 @@ class DeptDeleteView(DeleteAjaxMixin, DeleteView):
success_url = reverse_lazy("member:dept_list")


class MemberAddView(CreateView):
class MemberAddView(PassRequestMixin, SuccessMessageMixin, CreateView):
model = Member
template_name = "member/member_add_update_form.html"
form_class = MemberForm
template_name = "member/member_add_update_form.html"
success_message = '添加成功'
success_url = reverse_lazy('member:member_list')


Expand Down Expand Up @@ -251,7 +253,7 @@ class MemberListDetailView(MemberListView):

class MemberUpdateView(UpdateView):
model = Member
template_name = "member/member_add_update_form.html"
template_name = "member/member_add_update_form2.html"
form_class = MemberForm
success_message = '%s 更新成功'
success_url = reverse_lazy('member:member_list')
Expand Down Expand Up @@ -355,5 +357,5 @@ def depass_view(request):
try:
depass = de_password(salt)
return JsonResponse({'msg': 'ok', 'pass': depass})
except Exception as e:
return JsonResponse({'msg': str(e)})
except Exception as e:
return JsonResponse({'msg': str(e)})
19 changes: 19 additions & 0 deletions safety/migrations/0002_auto_20190124_1615.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.1.3 on 2019-01-24 08:15

import core.utils
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('safety', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='safetyfile',
name='file_s',
field=models.FileField(blank=True, null=True, upload_to='safety/%Y/%m/%d/', validators=[core.utils.validate_file_extension], verbose_name='文件'),
),
]
3 changes: 2 additions & 1 deletion safety/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.db import models
from core.utils import validate_file_extension


class SafetyFile(models.Model):
Expand All @@ -16,5 +17,5 @@ class SafetyFile(models.Model):
file_type = models.IntegerField(
verbose_name='文件类型', choices=file_type_choiced, default=0)
file_s = models.FileField(
verbose_name='文件', upload_to='Safety_file', max_length=100)
verbose_name='文件', upload_to='safety/%Y/%m/%d/', null=True, blank=True, validators=[validate_file_extension])
upload_date = models.DateTimeField(auto_now_add=True)
2 changes: 1 addition & 1 deletion safety/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

class SafetyFileListView(ListView):
model = SafetyFile
template_name = "TEMPLATE_NAME"
template_name = "safe/safe.html"

def get_queryset(self):
queryset = super(SafetyFileListView, self).get_queryset()
Expand Down
13 changes: 13 additions & 0 deletions schedule/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django.urls import path
from .views import *

app_name = "schedule"
urlpatterns = [
path('list', ScheduleListView.as_view(), name='list'),
path('detail', ScheduleDetailView.as_view(), name='detail'),
path('chart', ScheduleChartView.as_view(), name='chart'),
path('item', ScheduleItemChartView.as_view(), name='item'),
path('add', ScheduleFileCreateView.as_view(), name='add'),
path('update/<int:pk>', ScheduleFileUpdatView.as_view(), name='update'),
path('delete/<int:pk>', ScheduleFileDetailView.as_view(), name='delete'),
]
35 changes: 35 additions & 0 deletions schedule/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,38 @@
from django.shortcuts import render
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, DetailView, TemplateView


# Create your views here.


class ScheduleListView(TemplateView):
template_name = "schedule/schedule.html"


class ScheduleDetailView(TemplateView):
template_name = "schedule/schedule_detail.html"


class ScheduleChartView(TemplateView):
template_name = "schedule/schedule_chart.html"


class ScheduleItemChartView(TemplateView):
template_name = "schedule/schedule_item.html"


class ScheduleFileCreateView(CreateView):
template_name = "TEMPLATE_NAME"


class ScheduleFileUpdatView(UpdateView):
template_name = "TEMPLATE_NAME"


class ScheduleFileDeleteView(DeleteView):
template_name = "TEMPLATE_NAME"


class ScheduleFileDetailView(DetailView):
template_name = "TEMPLATE_NAME"

1 change: 1 addition & 0 deletions static/javascript/g2/data-set.min.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions static/javascript/g2/g2.min.js

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions static/javascript/jquery.bootstrap.modal.forms.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
django-bootstrap-modal-forms
version : 1.3.1
Copyright (c) 2018 Uros Trstenjak
https://github.com/trco/django-bootstrap-modal-forms
*/

(function ($) {

// Open modal & load the form at formURL to the modalContent element
var newForm = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn) {
$(modalContent).load(formURL, function () {
$(modalID).modal("show");
$(modalForm).attr("action", formURL);
// Add click listener to the submitBtn
ajaxSubmit(modalID, modalContent, modalForm, formURL, errorClass, submitBtn);
});
};

// Add click listener to the submitBtn
var ajaxSubmit = function (modalID, modalContent, modalForm, formURL, errorClass, submitBtn) {
$(submitBtn).on("click", function () {
// Check if form.is_valid() via ajax request
var formIsValid = isFormValid(modalID, modalContent, modalForm, formURL, errorClass);
if (formIsValid) {
// Submit form if form.is_valid()
$(modalForm).submit();
} else {
// Reinstantiate click listener on submitBtn
// Form is updated with errors in isFormValid(...) call
ajaxSubmit(modalID, modalContent, modalForm, formURL, errorClass, submitBtn);
}
});
};

// Check if form.is_valid()
var isFormValid = function (modalID, modalContent, modalForm, formURL, errorClass) {
var formIsValid = true;
$.ajax({
type: $(modalForm).attr("method"),
url: $(modalForm).attr("action"),
async: false,
// Serialize form data
data: new FormData($(modalForm)[0]),
cache: false,
contentType: false,
processData: false,
success: function (response) {
if ($(response).find(errorClass).length > 0) {
formIsValid = false;
// Update form with errors if not form.is_valid()
$(modalID).find(modalContent).html(response);
$(modalForm).attr("action", formURL);
}
}
});
return formIsValid;
};


$.fn.modalForm = function (options) {
// Default settings
var defaults = {
modalID: "#modal",
modalContent: ".modal-content",
modalForm: ".modal-content form",
formURL: null,
errorClass: ".invalid",
submitBtn: ".submit-btn"
};

// Extend default settings with provided options
var settings = $.extend(defaults, options);

return this.each(function () {
// Add click listener to the element with attached modalForm
$(this).click(function (event) {
// Instantiate new modalForm in modal
newForm(settings.modalID,
settings.modalContent,
settings.modalForm,
settings.formURL,
settings.errorClass,
settings.submitBtn);
});
});
};

}(jQuery));
2 changes: 2 additions & 0 deletions static/javascript/laydate/laydate.js

Large diffs are not rendered by default.

Binary file not shown.
Loading