From 8396561bb8b24abc8c8c78330c8f4a7daf6fc479 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sun, 25 Feb 2018 23:40:36 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B5?= =?UTF-8?q?=20global=5Fgroup=5Fupdate=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=B1=D1=83=D0=B4=D1=83=D1=82=20=D0=B2=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BC=D0=B8=D1=82:=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/admin.py=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20abonapp/forms.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/locale/ru/LC=5FMES?= =?UTF-8?q?SAGES/django.po=20=09=D0=BF=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE:=20abonapp/migrations/0001?= =?UTF-8?q?=5Fsquashed=5F0022=5Fauto=5F20170816=5F1109.py=20->=20abonapp/m?= =?UTF-8?q?igrations/0001=5Finitial.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/migrations/0002=5Faut?= =?UTF-8?q?o=5F20170905=5F1248.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/migrations/0003=5Faut?= =?UTF-8?q?o=5F20170927=5F1838.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/migrations/0004=5Faut?= =?UTF-8?q?o=5F20180122=5F1732.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/migrations/0005=5Faut?= =?UTF-8?q?o=5F20180123=5F1353.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/migrations/0006=5Fabo?= =?UTF-8?q?n=5Fmarkers.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20abonapp/models.py=20=09=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/?= =?UTF-8?q?templates/abonapp/addAbon.html=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20abonapp/templates/abona?= =?UTF-8?q?pp/addGroup.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/templates/abonapp/addInv?= =?UTF-8?q?oice.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?:=20=20=20=20=20=20abonapp/templates/abonapp/buy=5Ftariff.html?= =?UTF-8?q?=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20abonapp/templates/abonapp/charts.html=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20ab?= =?UTF-8?q?onapp/templates/abonapp/editAbon.html=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/templa?= =?UTF-8?q?tes/abonapp/ext.htm=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/templates/abonapp/group?= =?UTF-8?q?=5Flist.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20abonapp/templates/abonapp/group=5Ftari?= =?UTF-8?q?ffs.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:?= =?UTF-8?q?=20=20=20=20=20=20abonapp/templates/abonapp/invoiceForPayment.h?= =?UTF-8?q?tml=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20?= =?UTF-8?q?=20=20=20=20=20abonapp/templates/abonapp/modal=5Fabonamount.htm?= =?UTF-8?q?l=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20abonapp/templates/abonapp/passport=5Fview.html=20?= =?UTF-8?q?=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20?= =?UTF-8?q?=20=20=20abonapp/templates/abonapp/payHistory.html=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20ab?= =?UTF-8?q?onapp/templates/abonapp/peoples.html=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/templa?= =?UTF-8?q?tes/abonapp/service.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20abonapp/urls.py=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20abonapp/views.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20accounts=5Fapp/migrations/?= =?UTF-8?q?0001=5Finitial.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20=20accounts=5Fapp/migrations/0002=5Fus?= =?UTF-8?q?erprofile=5Femail.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20=20accounts=5Fapp/migrations/0003=5Fau?= =?UTF-8?q?to=5F20161206=5F2135.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20accounts=5Fapp/migrations/000?= =?UTF-8?q?4=5Fauto=5F20170128=5F1316.py=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20accounts=5Fapp/migratio?= =?UTF-8?q?ns/0005=5Fauto=5F20170222=5F2224.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20accounts=5Fapp/mi?= =?UTF-8?q?grations/0006=5Fauto=5F20170416=5F1029.py=20=09=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20accounts=5F?= =?UTF-8?q?app/migrations/0007=5Fauto=5F20170816=5F1109.py=20=09=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20accou?= =?UTF-8?q?nts=5Fapp/migrations/0008=5Fauto=5F20170927=5F1838.py=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20accounts=5Fapp/models.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20accounts=5Fapp/templ?= =?UTF-8?q?ates/accounts/create=5Facc.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20accounts=5Fapp/templ?= =?UTF-8?q?ates/accounts/profile=5Fchgroup.html=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20accounts=5Fapp?= =?UTF-8?q?/templates/accounts/set=5Fabon=5Fgroups=5Fpermission.html=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20accounts=5Fapp/views.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20agent/commands/dhcp.?= =?UTF-8?q?py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20chatbot/migrations/0001=5Finitial.py=20=09=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20chatb?= =?UTF-8?q?ot/migrations/0002=5Fauto=5F20171214=5F1517.py=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20cl?= =?UTF-8?q?ientsideapp/views.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20devapp/forms.py=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20de?= =?UTF-8?q?vapp/locale/ru/LC=5FMESSAGES/django.po=20=09=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20=20devapp/migr?= =?UTF-8?q?ations/0001=5Finitial.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations/0001=5Fsqua?= =?UTF-8?q?shed=5F0007=5Fauto=5F20170816=5F1109.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations?= =?UTF-8?q?/0002=5Fdevice=5Fuser=5Fgroup.py=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations/0003?= =?UTF-8?q?=5Fauto=5F20170927=5F1838.py=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations/0004?= =?UTF-8?q?=5Fauto=5F20171103=5F0006.py=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations/0005?= =?UTF-8?q?=5Fdevice=5Fsnmp=5Fitem=5Fnum.py=20=09=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20devapp/migrations/0006?= =?UTF-8?q?=5Fauto=5F20180129=5F1625.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20devapp/models.py=20?= =?UTF-8?q?=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20?= =?UTF-8?q?=20=20=20devapp/templates/devapp/add=5Fdev.html=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20de?= =?UTF-8?q?vapp/templates/devapp/custom=5Fdev=5Fpage/olt.html=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20de?= =?UTF-8?q?vapp/templates/devapp/custom=5Fdev=5Fpage/onu.html=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20de?= =?UTF-8?q?vapp/templates/devapp/custom=5Fdev=5Fpage/ports.html=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20devapp/templates/devapp/dev.html=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20devapp/templat?= =?UTF-8?q?es/devapp/devices.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20devapp/templates/devapp/de?= =?UTF-8?q?vices=5Fnull=5Fgroup.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20devapp/templates/devapp/ex?= =?UTF-8?q?t.htm=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20?= =?UTF-8?q?=20=20=20=20=20devapp/templates/devapp/fix=5Fdev=5Fgroup.html?= =?UTF-8?q?=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20devapp/templates/devapp/group=5Flist.html=20=09?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20devapp/templates/devapp/manage=5Fports/add=5Fports.html?= =?UTF-8?q?=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20devapp/templates/devapp/manage=5Fports/fix=5Fabon?= =?UTF-8?q?=5Fdevice.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20devapp/templates/devapp/manage=5Fports?= =?UTF-8?q?/list.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20devapp/views.py=20=09=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20dialing?= =?UTF-8?q?=5Fapp/migrations/0001=5Finitial.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20dialing=5Fapp/mig?= =?UTF-8?q?rations/0002=5Fauto=5F20171229=5F1353.py=20=09=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20dialing=5Fa?= =?UTF-8?q?pp/migrations/0003=5Fsmsout.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20dialing=5Fapp/views.?= =?UTF-8?q?py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20djing/settings.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20djing/urls.py=20=09?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20?= =?UTF-8?q?=20=20=20group=5Fapp/=5F=5Finit=5F=5F.py=20=09=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20=20group?= =?UTF-8?q?=5Fapp/admin.py=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB:=20=20=20=20group=5Fapp/apps.py=20=09=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20?= =?UTF-8?q?=20group=5Fapp/forms.py=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20=20group=5Fapp/locale/ru/LC?= =?UTF-8?q?=5FMESSAGES/django.po=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20=20group=5Fapp/migrations/000?= =?UTF-8?q?1=5Finitial.py=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB:=20=20=20=20group=5Fapp/migrations/=5F=5Fini?= =?UTF-8?q?t=5F=5F.py=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB:=20=20=20=20group=5Fapp/models.py=20=09=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20?= =?UTF-8?q?=20group=5Fapp/templates/group=5Fapp/add=5Fgroup.html=20=09?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20?= =?UTF-8?q?=20=20=20group=5Fapp/templates/group=5Fapp/edit=5Fgroup.html=20?= =?UTF-8?q?=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:?= =?UTF-8?q?=20=20=20=20group=5Fapp/templates/group=5Fapp/ext.html=20=09?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20?= =?UTF-8?q?=20=20=20group=5Fapp/templates/group=5Fapp/group=5Flist.html=20?= =?UTF-8?q?=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:?= =?UTF-8?q?=20=20=20=20group=5Fapp/tests.py=20=09=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB:=20=20=20=20group=5Fapp/urls.?= =?UTF-8?q?py=20=09=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB:=20=20=20=20group=5Fapp/views.py=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20locale/ru/LC?= =?UTF-8?q?=5FMESSAGES/django.po=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20mapapp/migrations/0001=5Finitial?= =?UTF-8?q?.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20?= =?UTF-8?q?=20=20=20=20mapapp/migrations/0002=5Fauto=5F20171103=5F0006.py?= =?UTF-8?q?=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20mapapp/templates/maps/dot.html=20=09=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20mapapp/t?= =?UTF-8?q?emplates/maps/map=5Ftooltip.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20mapapp/templates/map?= =?UTF-8?q?s/ya=5Findex.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE:=20=20=20=20=20=20mapapp/views.py=20=09=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20ms?= =?UTF-8?q?g=5Fapp/migrations/0001=5Finitial.py=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20photo=5Fapp/mi?= =?UTF-8?q?grations/0001=5Finitial.py=20=09=D0=BF=D0=B5=D1=80=D0=B5=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE:=20statistics/?= =?UTF-8?q?migrations/0002=5Fstatcache.py=20->=20statistics/migrations/000?= =?UTF-8?q?1=5Finitial.py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE:=20=20=20=20=20=20tariff=5Fapp/migrations/0001=5Finitial?= =?UTF-8?q?.py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20?= =?UTF-8?q?=20=20=20=20tariff=5Fapp/migrations/0002=5Ftariff=5Fdescr.py=20?= =?UTF-8?q?=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20?= =?UTF-8?q?=20=20tariff=5Fapp/migrations/0003=5Ftariff=5Fis=5Fadmin.py=20?= =?UTF-8?q?=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20?= =?UTF-8?q?=20=20tariff=5Fapp/migrations/0004=5Fauto=5F20170416=5F0350.py?= =?UTF-8?q?=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20=20tariff=5Fapp/migrations/0005=5Fauto=5F20170502=5F2229.?= =?UTF-8?q?py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20=20tariff=5Fapp/migrations/0006=5Fauto=5F20180122=5F1732.?= =?UTF-8?q?py=20=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20?= =?UTF-8?q?=20=20=20tariff=5Fapp/migrations/0007=5Fauto=5F20180215=5F1423.?= =?UTF-8?q?py=20=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20?= =?UTF-8?q?=20=20=20=20tariff=5Fapp/models.py=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20tariff=5Fapp/t?= =?UTF-8?q?emplates/tariff=5Fapp/tarifs.html=20=09=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20taskapp/forms.py=20?= =?UTF-8?q?=09=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20?= =?UTF-8?q?=20=20=20taskapp/migrations/0001=5Finitial.py=20=09=D1=83=D0=B4?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/mig?= =?UTF-8?q?rations/0001=5Fsquashed=5F0015=5Fauto=5F20170816=5F1109.py=20?= =?UTF-8?q?=09=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20?= =?UTF-8?q?=20=20taskapp/migrations/0002=5Fauto=5F20161006=5F0027.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0002=5Fauto=5F20180219=5F1255.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0003=5Fauto=5F20161130=5F1815.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0004=5Fauto=5F20161202=5F1230.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0005=5Fauto=5F20161206=5F0013.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0006=5Fauto=5F20161206=5F2135.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0007=5Fauto=5F20161206=5F2303.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0008=5Fauto=5F20161213=5F1932.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0009=5Fauto=5F20161216=5F2214.py=20=09?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20?= =?UTF-8?q?=20taskapp/migrations/0010=5Fauto.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/migration?= =?UTF-8?q?s/0011=5Fauto=5F20170116=5F0126.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/migration?= =?UTF-8?q?s/0012=5Fauto=5F20170407=5F0124.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/migration?= =?UTF-8?q?s/0013=5Fauto=5F20170413=5F1944.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/migration?= =?UTF-8?q?s/0014=5Fauto=5F20170416=5F1029.py=20=09=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20=20taskapp/migration?= =?UTF-8?q?s/0015=5Fauto=5F20170816=5F1109.py=20=09=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE:=20=20=20=20=20=20templates/base?= =?UTF-8?q?.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abonapp/admin.py | 1 - abonapp/forms.py | 19 +- abonapp/locale/ru/LC_MESSAGES/django.po | 17 +- ..._auto_20170816_1109.py => 0001_initial.py} | 308 ++++++++---------- abonapp/migrations/0002_auto_20170905_1248.py | 52 --- abonapp/migrations/0003_auto_20170927_1838.py | 43 --- abonapp/migrations/0004_auto_20180122_1732.py | 130 -------- abonapp/migrations/0005_auto_20180123_1353.py | 20 -- abonapp/migrations/0006_abon_markers.py | 23 -- abonapp/models.py | 27 +- abonapp/templates/abonapp/addAbon.html | 4 +- abonapp/templates/abonapp/addGroup.html | 39 --- abonapp/templates/abonapp/addInvoice.html | 8 +- abonapp/templates/abonapp/buy_tariff.html | 10 +- abonapp/templates/abonapp/charts.html | 2 +- abonapp/templates/abonapp/editAbon.html | 24 +- abonapp/templates/abonapp/ext.htm | 16 +- abonapp/templates/abonapp/group_list.html | 12 - abonapp/templates/abonapp/group_tariffs.html | 5 +- .../templates/abonapp/invoiceForPayment.html | 6 +- .../templates/abonapp/modal_abonamount.html | 3 +- abonapp/templates/abonapp/passport_view.html | 2 +- abonapp/templates/abonapp/payHistory.html | 4 +- abonapp/templates/abonapp/peoples.html | 45 +-- abonapp/templates/abonapp/service.html | 14 +- abonapp/urls.py | 2 - abonapp/views.py | 182 +++++------ accounts_app/migrations/0001_initial.py | 63 ++-- .../migrations/0002_userprofile_email.py | 20 -- .../migrations/0003_auto_20161206_2135.py | 25 -- .../migrations/0004_auto_20170128_1316.py | 18 - .../migrations/0005_auto_20170222_2224.py | 21 -- .../migrations/0006_auto_20170416_1029.py | 21 -- .../migrations/0007_auto_20170816_1109.py | 21 -- .../migrations/0008_auto_20170927_1838.py | 19 -- accounts_app/models.py | 28 +- .../templates/accounts/create_acc.html | 3 +- .../templates/accounts/profile_chgroup.html | 3 +- .../accounts/set_abon_groups_permission.html | 10 +- accounts_app/views.py | 26 +- agent/commands/dhcp.py | 14 +- chatbot/migrations/0001_initial.py | 32 +- chatbot/migrations/0002_auto_20171214_1517.py | 59 ---- clientsideapp/views.py | 4 +- devapp/forms.py | 5 +- devapp/locale/ru/LC_MESSAGES/django.po | 4 +- devapp/migrations/0001_initial.py | 62 ++++ .../0001_squashed_0007_auto_20170816_1109.py | 90 ----- devapp/migrations/0002_device_user_group.py | 22 -- devapp/migrations/0003_auto_20170927_1838.py | 23 -- devapp/migrations/0004_auto_20171103_0006.py | 72 ---- .../migrations/0005_device_snmp_item_num.py | 20 -- devapp/migrations/0006_auto_20180129_1625.py | 34 -- devapp/models.py | 4 +- devapp/templates/devapp/add_dev.html | 2 +- .../templates/devapp/custom_dev_page/olt.html | 2 +- .../templates/devapp/custom_dev_page/onu.html | 2 +- .../devapp/custom_dev_page/ports.html | 4 +- devapp/templates/devapp/dev.html | 2 +- devapp/templates/devapp/devices.html | 8 +- .../templates/devapp/devices_null_group.html | 6 +- devapp/templates/devapp/ext.htm | 10 +- devapp/templates/devapp/fix_dev_group.html | 6 +- devapp/templates/devapp/group_list.html | 19 +- .../devapp/manage_ports/add_ports.html | 8 +- .../devapp/manage_ports/fix_abon_device.html | 4 +- .../templates/devapp/manage_ports/list.html | 8 +- devapp/views.py | 81 +++-- dialing_app/migrations/0001_initial.py | 37 ++- .../migrations/0002_auto_20171229_1353.py | 35 -- dialing_app/migrations/0003_smsout.py | 31 -- dialing_app/views.py | 10 +- djing/settings.py | 2 +- djing/urls.py | 1 + group_app/__init__.py | 0 group_app/admin.py | 4 + group_app/apps.py | 5 + group_app/forms.py | 8 + group_app/locale/ru/LC_MESSAGES/django.po | 69 ++++ group_app/migrations/0001_initial.py | 30 ++ group_app/migrations/__init__.py | 0 group_app/models.py | 23 ++ group_app/templates/group_app/add_group.html | 20 ++ group_app/templates/group_app/edit_group.html | 20 ++ group_app/templates/group_app/ext.html | 23 ++ group_app/templates/group_app/group_list.html | 59 ++++ group_app/tests.py | 3 + group_app/urls.py | 10 + group_app/views.py | 52 +++ locale/ru/LC_MESSAGES/django.po | 66 ++-- mapapp/migrations/0001_initial.py | 16 +- mapapp/migrations/0002_auto_20171103_0006.py | 45 --- mapapp/templates/maps/dot.html | 10 +- mapapp/templates/maps/map_tooltip.html | 2 +- mapapp/templates/maps/ya_index.html | 2 +- mapapp/views.py | 17 +- msg_app/migrations/0001_initial.py | 2 +- photo_app/migrations/0001_initial.py | 4 +- statistics/migrations/0001_initial.py | 18 +- statistics/migrations/0002_statcache.py | 34 -- tariff_app/migrations/0001_initial.py | 47 ++- tariff_app/migrations/0002_tariff_descr.py | 20 -- tariff_app/migrations/0003_tariff_is_admin.py | 20 -- .../migrations/0004_auto_20170416_0350.py | 24 -- .../migrations/0005_auto_20170502_2229.py | 20 -- .../migrations/0006_auto_20180122_1732.py | 69 ---- .../migrations/0007_auto_20180215_1423.py | 23 -- tariff_app/models.py | 11 + tariff_app/templates/tariff_app/tarifs.html | 80 ++--- taskapp/forms.py | 2 +- taskapp/migrations/0001_initial.py | 64 +++- .../0001_squashed_0015_auto_20170816_1109.py | 148 --------- taskapp/migrations/0002_auto_20161006_0027.py | 23 -- taskapp/migrations/0002_auto_20180219_1255.py | 93 ------ taskapp/migrations/0003_auto_20161130_1815.py | 19 -- taskapp/migrations/0004_auto_20161202_1230.py | 19 -- taskapp/migrations/0005_auto_20161206_0013.py | 21 -- taskapp/migrations/0006_auto_20161206_2135.py | 24 -- taskapp/migrations/0007_auto_20161206_2303.py | 20 -- taskapp/migrations/0008_auto_20161213_1932.py | 39 --- taskapp/migrations/0009_auto_20161216_2214.py | 29 -- taskapp/migrations/0010_auto.py | 23 -- taskapp/migrations/0011_auto_20170116_0126.py | 19 -- taskapp/migrations/0012_auto_20170407_0124.py | 20 -- taskapp/migrations/0013_auto_20170413_1944.py | 20 -- taskapp/migrations/0014_auto_20170416_1029.py | 27 -- taskapp/migrations/0015_auto_20170816_1109.py | 25 -- templates/base.html | 31 +- 128 files changed, 1170 insertions(+), 2371 deletions(-) rename abonapp/migrations/{0001_squashed_0022_auto_20170816_1109.py => 0001_initial.py} (54%) delete mode 100644 abonapp/migrations/0002_auto_20170905_1248.py delete mode 100644 abonapp/migrations/0003_auto_20170927_1838.py delete mode 100644 abonapp/migrations/0004_auto_20180122_1732.py delete mode 100644 abonapp/migrations/0005_auto_20180123_1353.py delete mode 100644 abonapp/migrations/0006_abon_markers.py delete mode 100644 abonapp/templates/abonapp/addGroup.html delete mode 100644 accounts_app/migrations/0002_userprofile_email.py delete mode 100644 accounts_app/migrations/0003_auto_20161206_2135.py delete mode 100644 accounts_app/migrations/0004_auto_20170128_1316.py delete mode 100644 accounts_app/migrations/0005_auto_20170222_2224.py delete mode 100644 accounts_app/migrations/0006_auto_20170416_1029.py delete mode 100644 accounts_app/migrations/0007_auto_20170816_1109.py delete mode 100644 accounts_app/migrations/0008_auto_20170927_1838.py delete mode 100644 chatbot/migrations/0002_auto_20171214_1517.py create mode 100644 devapp/migrations/0001_initial.py delete mode 100644 devapp/migrations/0001_squashed_0007_auto_20170816_1109.py delete mode 100644 devapp/migrations/0002_device_user_group.py delete mode 100644 devapp/migrations/0003_auto_20170927_1838.py delete mode 100644 devapp/migrations/0004_auto_20171103_0006.py delete mode 100644 devapp/migrations/0005_device_snmp_item_num.py delete mode 100644 devapp/migrations/0006_auto_20180129_1625.py delete mode 100644 dialing_app/migrations/0002_auto_20171229_1353.py delete mode 100644 dialing_app/migrations/0003_smsout.py create mode 100644 group_app/__init__.py create mode 100644 group_app/admin.py create mode 100644 group_app/apps.py create mode 100644 group_app/forms.py create mode 100644 group_app/locale/ru/LC_MESSAGES/django.po create mode 100644 group_app/migrations/0001_initial.py create mode 100644 group_app/migrations/__init__.py create mode 100644 group_app/models.py create mode 100644 group_app/templates/group_app/add_group.html create mode 100644 group_app/templates/group_app/edit_group.html create mode 100644 group_app/templates/group_app/ext.html create mode 100644 group_app/templates/group_app/group_list.html create mode 100644 group_app/tests.py create mode 100644 group_app/urls.py create mode 100644 group_app/views.py delete mode 100644 mapapp/migrations/0002_auto_20171103_0006.py delete mode 100644 statistics/migrations/0002_statcache.py delete mode 100644 tariff_app/migrations/0002_tariff_descr.py delete mode 100644 tariff_app/migrations/0003_tariff_is_admin.py delete mode 100644 tariff_app/migrations/0004_auto_20170416_0350.py delete mode 100644 tariff_app/migrations/0005_auto_20170502_2229.py delete mode 100644 tariff_app/migrations/0006_auto_20180122_1732.py delete mode 100644 tariff_app/migrations/0007_auto_20180215_1423.py delete mode 100644 taskapp/migrations/0001_squashed_0015_auto_20170816_1109.py delete mode 100644 taskapp/migrations/0002_auto_20161006_0027.py delete mode 100644 taskapp/migrations/0002_auto_20180219_1255.py delete mode 100644 taskapp/migrations/0003_auto_20161130_1815.py delete mode 100644 taskapp/migrations/0004_auto_20161202_1230.py delete mode 100644 taskapp/migrations/0005_auto_20161206_0013.py delete mode 100644 taskapp/migrations/0006_auto_20161206_2135.py delete mode 100644 taskapp/migrations/0007_auto_20161206_2303.py delete mode 100644 taskapp/migrations/0008_auto_20161213_1932.py delete mode 100644 taskapp/migrations/0009_auto_20161216_2214.py delete mode 100644 taskapp/migrations/0010_auto.py delete mode 100644 taskapp/migrations/0011_auto_20170116_0126.py delete mode 100644 taskapp/migrations/0012_auto_20170407_0124.py delete mode 100644 taskapp/migrations/0013_auto_20170413_1944.py delete mode 100644 taskapp/migrations/0014_auto_20170416_1029.py delete mode 100644 taskapp/migrations/0015_auto_20170816_1109.py diff --git a/abonapp/admin.py b/abonapp/admin.py index 082d3d8..70b55fc 100644 --- a/abonapp/admin.py +++ b/abonapp/admin.py @@ -3,7 +3,6 @@ from django.contrib import admin from . import models -admin.site.register(models.AbonGroup) admin.site.register(models.Abon) admin.site.register(models.InvoiceForPayment) admin.site.register(models.AbonLog) diff --git a/abonapp/forms.py b/abonapp/forms.py index a2932d0..20c4cdf 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -12,7 +12,7 @@ from django.conf import settings TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') -def generate_random_username(length=6, chars=digits, split=2, delimiter=''): +def generate_random_chars(length=6, chars=digits, split=2, delimiter=''): username = ''.join([choice(chars) for i in range(length)]) if split: @@ -25,8 +25,13 @@ def generate_random_username(length=6, chars=digits, split=2, delimiter=''): return username +def generate_random_username(): + username = generate_random_chars(length=6, chars=digits) + return str(int(username)) + + def generate_random_password(): - return generate_random_username(length=8, chars=digits + ascii_lowercase) + return generate_random_chars(length=8, chars=digits + ascii_lowercase) class AbonForm(forms.ModelForm): @@ -92,16 +97,6 @@ class AbonForm(forms.ModelForm): return acc -class AbonGroupForm(forms.ModelForm): - class Meta: - model = models.AbonGroup - fields = '__all__' - widgets = { - 'title': forms.TextInput(attrs={'class': 'form-control'}), - 'profiles': forms.TextInput(attrs={'class': 'form-control'}) - } - - class PassportForm(forms.ModelForm): class Meta: model = models.PassportInfo diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index e1a2e02..f95800b 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -96,10 +96,6 @@ msgstr "Динамический ip" msgid "Fields" msgstr "Поля" -#: models.py:31 -msgid "Can view subscriber group" -msgstr "Может просматривать группу абонентов" - #: models.py:33 msgid "Abon group" msgstr "Группа абонентов" @@ -894,19 +890,11 @@ msgstr "Просмотр абонента" msgid "yes,no" msgstr "Да,Нет" -#: views.py:94 -msgid "create group success msg" -msgstr "Группа успешно создана" - #: views.py:97 views.py:161 views.py:308 views.py:423 views.py:500 views.py:642 #: views.py:812 views.py:884 views.py:953 views.py:1059 msgid "fix form errors" msgstr "Некоторые поля заполнены не правильно, проверте ещё раз" -#: views.py:128 -msgid "delete group success msg" -msgstr "Группа успешно удалена" - #: views.py:158 msgid "create abon success msg" msgstr "Абонент успешно создан" @@ -1128,7 +1116,7 @@ msgid "User flags has changed successfully" msgstr "Флаги абонента изменены успешно" msgid "Services" -msgstr "Услуги" +msgstr "Тарифы" msgid "Payments" msgstr "Финансы" @@ -1144,3 +1132,6 @@ msgstr "Инфо." msgid "Dialing" msgstr "Звонки" + +msgid "Subscribers" +msgstr "Абоненты" diff --git a/abonapp/migrations/0001_squashed_0022_auto_20170816_1109.py b/abonapp/migrations/0001_initial.py similarity index 54% rename from abonapp/migrations/0001_squashed_0022_auto_20170816_1109.py rename to abonapp/migrations/0001_initial.py index 89e222c..50042d8 100644 --- a/abonapp/migrations/0001_squashed_0022_auto_20170816_1109.py +++ b/abonapp/migrations/0001_initial.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-09-04 16:15 +# Generated by Django 1.11 on 2018-02-26 00:20 from __future__ import unicode_literals +import bitfield.models from django.conf import settings import django.core.validators from django.db import migrations, models @@ -15,8 +16,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('devapp', '0001_squashed_0007_auto_20170816_1109'), - ('tariff_app', '0002_tariff_descr'), + ('devapp', '0001_initial'), + ('group_app', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('accounts_app', '0001_initial'), ('tariff_app', '0001_initial'), @@ -26,128 +27,82 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Abon', fields=[ - ('userprofile_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)), - ('ballance', models.FloatField(default=0.0, validators=[django.core.validators.DecimalValidator])), - ('address', models.CharField(max_length=256)), + ('baseaccount_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='accounts_app.BaseAccount')), + ('ballance', models.FloatField(default=0.0)), + ('ip_address', mydefs.MyGenericIPAddressField(blank=True, max_length=8, null=True, protocol='ipv4')), + ('description', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('house', models.CharField(blank=True, max_length=12, null=True, verbose_name='House')), + ('is_dynamic_ip', models.BooleanField(default=False)), + ('markers', bitfield.models.BitField((('icon_donkey', 'Donkey'), ('icon_fire', 'Fire'), ('icon_ok', 'Ok'), ('icon_king', 'King'), ('icon_tv', 'TV'), ('icon_smile', 'Smile'), ('icon_dollar', 'Dollar'), ('icon_service', 'Service'), ('icon_mrk', 'Marker')), default=0)), ], options={ + 'verbose_name': 'Abon', + 'verbose_name_plural': 'Abons', 'db_table': 'abonent', + 'ordering': ['fio'], + 'permissions': (('can_buy_tariff', 'Buy service perm'), ('can_view_passport', 'Can view passport'), ('can_add_ballance', 'fill account'), ('can_ping', 'Can ping')), }, - bases=('accounts_app.userprofile',), + bases=('accounts_app.baseaccount',), ), migrations.CreateModel( - name='AbonGroup', + name='AbonLog', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=127, unique=True)), + ('amount', models.FloatField(default=0.0)), + ('comment', models.CharField(max_length=128)), + ('date', models.DateTimeField(auto_now_add=True)), ], options={ - 'db_table': 'abonent_groups', + 'db_table': 'abonent_log', + 'ordering': ['-date'], + 'permissions': (('can_view_abonlog', 'Can view subscriber logs'),), }, ), migrations.CreateModel( - name='AbonLog', + name='AbonStreet', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('amount', models.FloatField(default=0.0)), - ('comment', models.CharField(max_length=128)), - ('date', models.DateTimeField(auto_now_add=True)), - ('abon', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), + ('name', models.CharField(max_length=64)), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='group_app.Group')), ], options={ - 'db_table': 'abonent_log', + 'verbose_name': 'Street', + 'verbose_name_plural': 'Streets', + 'db_table': 'abon_street', + 'ordering': ['name'], }, ), migrations.CreateModel( name='AbonTariff', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('tariff_priority', models.PositiveSmallIntegerField(default=0)), ('time_start', models.DateTimeField(blank=True, default=None, null=True)), - ('abon', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon')), + ('deadline', models.DateTimeField(blank=True, default=None, null=True)), ('tariff', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='linkto_tariff', to='tariff_app.Tariff')), ], options={ - 'ordering': ('tariff_priority',), + 'verbose_name': 'Abon service', + 'verbose_name_plural': 'Abon services', 'db_table': 'abonent_tariff', + 'ordering': ['time_start'], + 'permissions': (('can_complete_service', 'finish service perm'),), }, ), migrations.CreateModel( - name='InvoiceForPayment', + name='AdditionalTelephone', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.BooleanField(default=False)), - ('amount', models.FloatField(default=0.0)), - ('comment', models.CharField(max_length=128)), - ('date_create', models.DateTimeField(auto_now_add=True)), - ('date_pay', models.DateTimeField(blank=True, null=True)), - ('abon', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon')), - ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('telephone', models.CharField(max_length=16, validators=[django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone')), + ('owner_name', models.CharField(max_length=127)), ], options={ - 'ordering': ('date_create',), - 'db_table': 'abonent_inv_pay', + 'verbose_name': 'Additional telephone', + 'verbose_name_plural': 'Additional telephones', + 'db_table': 'additional_telephones', + 'ordering': ('owner_name',), + 'permissions': (('can_view_additionaltelephones', 'Can view additional telephones'),), }, ), - migrations.AddField( - model_name='abon', - name='current_tariffs', - field=models.ManyToManyField(through='abonapp.AbonTariff', to='tariff_app.Tariff'), - ), - migrations.AddField( - model_name='abon', - name='group', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonGroup'), - ), - migrations.AlterUniqueTogether( - name='abontariff', - unique_together=set([('abon', 'tariff', 'tariff_priority')]), - ), - migrations.AddField( - model_name='abongroup', - name='profiles', - field=models.ManyToManyField(blank=True, related_name='abon_groups', to=settings.AUTH_USER_MODEL), - ), - migrations.AlterModelOptions( - name='abon', - options={'permissions': (('can_buy_tariff', 'Покупка тарифа абоненту'),)}, - ), - migrations.AlterModelOptions( - name='abongroup', - options={'permissions': (('can_add_ballance', 'Пополнение счёта'),)}, - ), - migrations.AlterModelOptions( - name='abontariff', - options={'ordering': ('tariff_priority',), 'permissions': (('can_complete_service', 'Досрочное завершение услуги абонента'), ('can_activate_service', 'Активация услуги абонента'))}, - ), - migrations.CreateModel( - name='AbonStreet', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=64)), - ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.AbonGroup')), - ], - ), - migrations.RemoveField( - model_name='abon', - name='address', - ), - migrations.AddField( - model_name='abon', - name='description', - field=models.TextField(blank=True, null=True), - ), - migrations.AddField( - model_name='abon', - name='house', - field=models.CharField(blank=True, max_length=12, null=True), - ), - migrations.AddField( - model_name='abon', - name='street', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonStreet'), - ), migrations.CreateModel( name='AllPayLog', fields=[ @@ -158,7 +113,7 @@ class Migration(migrations.Migration): ], options={ 'db_table': 'all_pay_log', - 'ordering': ('date_action',), + 'ordering': ['-date_action'], }, ), migrations.CreateModel( @@ -167,70 +122,44 @@ class Migration(migrations.Migration): ('pay_id', models.CharField(max_length=36, primary_key=True, serialize=False, unique=True)), ('date_add', models.DateTimeField(auto_now_add=True)), ('summ', models.FloatField(default=0.0)), + ('trade_point', models.CharField(blank=True, default=None, max_length=20, null=True, verbose_name='Trade point')), + ('receipt_num', models.BigIntegerField(default=0, verbose_name='Receipt number')), ], options={ 'db_table': 'all_time_pay_log', - 'ordering': ('date_add',), + 'ordering': ['-date_add'], }, ), migrations.CreateModel( - name='AbonRawPassword', + name='ExtraFieldsModel', fields=[ - ('account', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='abonapp.Abon')), - ('passw_text', models.CharField(max_length=64)), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(default='no title', max_length=16)), + ('field_type', models.CharField(choices=[('int', 'Digital field'), ('str', 'Text field'), ('dbl', 'Floating field'), ('ipa', 'Ip Address')], default='str', max_length=3)), + ('data', models.CharField(blank=True, max_length=64, null=True)), ], options={ - 'db_table': 'abon_raw_password', + 'db_table': 'abon_extra_fields', }, ), - migrations.AlterModelTable( - name='abonstreet', - table='abon_street', - ), - migrations.AddField( - model_name='abontariff', - name='deadline', - field=models.DateTimeField(blank=True, default=None, null=True), - ), migrations.CreateModel( - name='ExtraFieldsModel', + name='InvoiceForPayment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('field_type', models.CharField(choices=[('int', 'Цифровое поле'), ('str', 'Текстовое поле'), ('dbl', 'Дробное с плавающей точкой'), ('ipa', 'IP Адрес')], default='str', max_length=3)), - ('data', models.CharField(blank=True, max_length=64, null=True)), - ('title', models.CharField(default='no title', max_length=16)), + ('status', models.BooleanField(default=False)), + ('amount', models.FloatField(default=0.0)), + ('comment', models.CharField(max_length=128)), + ('date_create', models.DateTimeField(auto_now_add=True)), + ('date_pay', models.DateTimeField(blank=True, null=True)), ], options={ - 'db_table': 'abon_extra_fields', + 'verbose_name': 'Debt', + 'verbose_name_plural': 'Debts', + 'db_table': 'abonent_inv_pay', + 'ordering': ('date_create',), + 'permissions': (('can_view_invoiceforpayment', 'Can view invoice for payment'),), }, ), - migrations.AlterModelOptions( - name='abon', - options={'permissions': (('can_buy_tariff', 'Покупка тарифа абоненту'), ('can_view_passport', 'Can view passport'))}, - ), - migrations.AlterModelOptions( - name='abontariff', - options={'ordering': ('tariff_priority',), 'permissions': (('can_complete_service', 'Снятие со счёта средств'), ('can_activate_service', 'Активация услуги абонента'))}, - ), - migrations.AlterField( - model_name='abon', - name='ballance', - field=models.FloatField(default=0.0), - ), - migrations.AlterModelOptions( - name='abon', - options={'permissions': (('can_buy_tariff', 'Покупка тарифа абоненту'), ('can_view_passport', 'Может просматривать паспортные данные'))}, - ), - migrations.AddField( - model_name='abon', - name='extra_fields', - field=models.ManyToManyField(blank=True, to='abonapp.ExtraFieldsModel'), - ), - migrations.AddField( - model_name='abongroup', - name='tariffs', - field=models.ManyToManyField(blank=True, related_name='tariff_groups', to='tariff_app.Tariff'), - ), migrations.CreateModel( name='PassportInfo', fields=[ @@ -239,38 +168,83 @@ class Migration(migrations.Migration): ('number', models.CharField(max_length=6, validators=[django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', message='Enter a valid integer.')])), ('distributor', models.CharField(max_length=64)), ('date_of_acceptance', models.DateField()), - ('abon', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.Abon')), ], + options={ + 'verbose_name': 'Passport Info', + 'verbose_name_plural': 'Passport Info', + 'db_table': 'passport_info', + }, ), migrations.CreateModel( - name='AbonDevice', + name='PeriodicPayForId', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('abon', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon')), - ('device', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='devapp.Device')), + ('last_pay', models.DateTimeField(blank=True, null=True, verbose_name='Last pay time')), + ('next_pay', models.DateTimeField(verbose_name='Next time to pay')), ], options={ - 'db_table': 'abon_device', + 'db_table': 'periodic_pay_for_id', }, ), - migrations.AlterUniqueTogether( - name='abondevice', - unique_together=set([('abon', 'device')]), + migrations.CreateModel( + name='AbonRawPassword', + fields=[ + ('account', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='abonapp.Abon')), + ('passw_text', models.CharField(max_length=64)), + ], + options={ + 'db_table': 'abon_raw_password', + }, + ), + migrations.AddField( + model_name='periodicpayforid', + name='account', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon', verbose_name='Account'), ), - migrations.AlterField( - model_name='abondevice', + migrations.AddField( + model_name='periodicpayforid', + name='periodic_pay', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tariff_app.PeriodicPay', verbose_name='Periodic pay'), + ), + migrations.AddField( + model_name='passportinfo', + name='abon', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.Abon'), + ), + migrations.AddField( + model_name='invoiceforpayment', name='abon', field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon'), ), - migrations.AlterField( - model_name='abondevice', - name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devapp.Device'), + migrations.AddField( + model_name='invoiceforpayment', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='alltimepaylog', + name='abon', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='abonapp.Abon'), + ), + migrations.AddField( + model_name='additionaltelephone', + name='abon', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='additional_telephones', to='abonapp.Abon'), + ), + migrations.AddField( + model_name='abonlog', + name='abon', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon'), + ), + migrations.AddField( + model_name='abonlog', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL), ), migrations.AddField( model_name='abon', - name='ip_address', - field=mydefs.MyGenericIPAddressField(blank=True, max_length=8, null=True, protocol='ipv4'), + name='current_tariff', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonTariff'), ), migrations.AddField( model_name='abon', @@ -284,35 +258,17 @@ class Migration(migrations.Migration): ), migrations.AddField( model_name='abon', - name='is_dynamic_ip', - field=models.BooleanField(default=False), - ), - migrations.DeleteModel( - name='AbonDevice', - ), - migrations.AlterModelOptions( - name='abontariff', - options={'permissions': (('can_complete_service', 'Снятие со счёта средств'),)}, + name='extra_fields', + field=models.ManyToManyField(blank=True, to='abonapp.ExtraFieldsModel'), ), - migrations.RemoveField( + migrations.AddField( model_name='abon', - name='current_tariffs', + name='group', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='group_app.Group', verbose_name='User group'), ), migrations.AddField( model_name='abon', - name='current_tariff', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonTariff'), - ), - migrations.AlterUniqueTogether( - name='abontariff', - unique_together=set([]), - ), - migrations.RemoveField( - model_name='abontariff', - name='abon', - ), - migrations.RemoveField( - model_name='abontariff', - name='tariff_priority', + name='street', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonStreet', verbose_name='Street'), ), ] diff --git a/abonapp/migrations/0002_auto_20170905_1248.py b/abonapp/migrations/0002_auto_20170905_1248.py deleted file mode 100644 index 75bbac0..0000000 --- a/abonapp/migrations/0002_auto_20170905_1248.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-09-05 12:48 -from __future__ import unicode_literals - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('abonapp', '0001_squashed_0022_auto_20170816_1109'), - ] - - operations = [ - migrations.CreateModel( - name='AdditionalTelephone', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('telephone', models.CharField(max_length=16, validators=[django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Телефон')), - ('owner_name', models.CharField(max_length=127)), - ], - options={ - 'verbose_name': 'Дополнительный телефон', - 'verbose_name_plural': 'Дополнительные телефоны', - 'db_table': 'additional_telephones', - 'ordering': ('owner_name',), - }, - ), - migrations.AlterModelOptions( - name='abon', - options={'permissions': (('can_buy_tariff', 'Покупка тарифа абоненту'), ('can_view_passport', 'Может просматривать паспортные данные')), 'verbose_name': 'Абонент', 'verbose_name_plural': 'Абоненты'}, - ), - migrations.AlterModelOptions( - name='abongroup', - options={'permissions': (('can_add_ballance', 'Пополнение счёта'),), 'verbose_name': 'Группа абонентов', 'verbose_name_plural': 'Группы абонентов'}, - ), - migrations.AlterModelOptions( - name='abonstreet', - options={'verbose_name': 'Улица', 'verbose_name_plural': 'Улицы'}, - ), - migrations.AlterModelOptions( - name='abontariff', - options={'permissions': (('can_complete_service', 'Снятие со счёта средств'),), 'verbose_name': 'Услуга абонента', 'verbose_name_plural': 'Услуги абонентов'}, - ), - migrations.AddField( - model_name='additionaltelephone', - name='abon', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='additional_telephones', to='abonapp.Abon'), - ), - ] diff --git a/abonapp/migrations/0003_auto_20170927_1838.py b/abonapp/migrations/0003_auto_20170927_1838.py deleted file mode 100644 index f15a614..0000000 --- a/abonapp/migrations/0003_auto_20170927_1838.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9 on 2017-09-27 18:38 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('abonapp', '0002_auto_20170905_1248'), - ] - - operations = [ - migrations.AlterModelOptions( - name='abon', - options={'permissions': (('can_buy_tariff', 'Покупка тарифа абоненту'), ('can_view_passport', 'Может просматривать паспортные данные'), ('can_add_ballance', 'Пополнение счёта'), ('can_ping', 'Может пинговать')), 'verbose_name': 'Абонент', 'verbose_name_plural': 'Абоненты'}, - ), - migrations.AlterModelOptions( - name='abongroup', - options={'permissions': (('can_view_abongroup', 'Может просматривать группу абонентов'),), 'verbose_name': 'Группа абонентов', 'verbose_name_plural': 'Группы абонентов'}, - ), - migrations.AlterModelOptions( - name='abonlog', - options={'permissions': (('can_view_abonlog', 'Может видеть логи абонента'),)}, - ), - migrations.AlterModelOptions( - name='additionaltelephone', - options={'ordering': ('owner_name',), 'permissions': (('can_view_additionaltelephones', 'Может видеть дополнительные телефоны'),), 'verbose_name': 'Дополнительный телефон', 'verbose_name_plural': 'Дополнительные телефоны'}, - ), - migrations.AlterModelOptions( - name='invoiceforpayment', - options={'ordering': ('date_create',), 'permissions': (('can_view_invoiceforpayment', 'Может видеть назначенные платежи'),), 'verbose_name': 'Квитанция (долг)', 'verbose_name_plural': 'Квитанции (долги)'}, - ), - migrations.AlterModelOptions( - name='passportinfo', - options={'verbose_name': 'Паспортные данные', 'verbose_name_plural': 'Паспортные данные'}, - ), - migrations.AlterModelTable( - name='passportinfo', - table='passport_info', - ), - ] diff --git a/abonapp/migrations/0004_auto_20180122_1732.py b/abonapp/migrations/0004_auto_20180122_1732.py deleted file mode 100644 index c2f90a7..0000000 --- a/abonapp/migrations/0004_auto_20180122_1732.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2018-01-22 17:32 -from __future__ import unicode_literals - -from django.conf import settings -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('tariff_app', '0006_auto_20180122_1732'), - ('abonapp', '0003_auto_20170927_1838'), - ] - - operations = [ - migrations.CreateModel( - name='PeriodicPayForId', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('last_pay', models.DateTimeField(blank=True, null=True, verbose_name='Last pay time')), - ('next_pay', models.DateTimeField(verbose_name='Next time to pay')), - ], - options={ - 'db_table': 'periodic_pay_for_id', - }, - ), - migrations.AlterModelOptions( - name='abon', - options={'ordering': ['fio'], 'permissions': (('can_buy_tariff', 'Buy service perm'), ('can_view_passport', 'Can view passport'), ('can_add_ballance', 'fill account'), ('can_ping', 'Can ping')), 'verbose_name': 'Abon', 'verbose_name_plural': 'Abons'}, - ), - migrations.AlterModelOptions( - name='abongroup', - options={'ordering': ['title'], 'permissions': (('can_view_abongroup', 'Can view subscriber group'),), 'verbose_name': 'Abon group', 'verbose_name_plural': 'Abon groups'}, - ), - migrations.AlterModelOptions( - name='abonlog', - options={'ordering': ['-date'], 'permissions': (('can_view_abonlog', 'Can view subscriber logs'),)}, - ), - migrations.AlterModelOptions( - name='abonstreet', - options={'ordering': ['name'], 'verbose_name': 'Street', 'verbose_name_plural': 'Streets'}, - ), - migrations.AlterModelOptions( - name='abontariff', - options={'ordering': ['time_start'], 'permissions': (('can_complete_service', 'finish service perm'),), 'verbose_name': 'Abon service', 'verbose_name_plural': 'Abon services'}, - ), - migrations.AlterModelOptions( - name='additionaltelephone', - options={'ordering': ('owner_name',), 'permissions': (('can_view_additionaltelephones', 'Can view additional telephones'),), 'verbose_name': 'Additional telephone', 'verbose_name_plural': 'Additional telephones'}, - ), - migrations.AlterModelOptions( - name='allpaylog', - options={'ordering': ['-date_action']}, - ), - migrations.AlterModelOptions( - name='alltimepaylog', - options={'ordering': ['-date_add']}, - ), - migrations.AlterModelOptions( - name='invoiceforpayment', - options={'ordering': ('date_create',), 'permissions': (('can_view_invoiceforpayment', 'Can view invoice for payment'),), 'verbose_name': 'Debt', 'verbose_name_plural': 'Debts'}, - ), - migrations.AlterModelOptions( - name='passportinfo', - options={'verbose_name': 'Passport Info', 'verbose_name_plural': 'Passport Info'}, - ), - migrations.AddField( - model_name='alltimepaylog', - name='abon', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='abonapp.Abon'), - ), - migrations.AddField( - model_name='alltimepaylog', - name='receipt_num', - field=models.IntegerField(default=0, verbose_name='Receipt number'), - ), - migrations.AddField( - model_name='alltimepaylog', - name='trade_point', - field=models.CharField(blank=True, default=None, max_length=20, null=True, verbose_name='Trade point'), - ), - migrations.AlterField( - model_name='abon', - name='description', - field=models.TextField(blank=True, null=True, verbose_name='Comment'), - ), - migrations.AlterField( - model_name='abon', - name='group', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonGroup', verbose_name='User group'), - ), - migrations.AlterField( - model_name='abon', - name='house', - field=models.CharField(blank=True, max_length=12, null=True, verbose_name='House'), - ), - migrations.AlterField( - model_name='abon', - name='street', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonStreet', verbose_name='Street'), - ), - migrations.AlterField( - model_name='abonlog', - name='author', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='additionaltelephone', - name='telephone', - field=models.CharField(max_length=16, validators=[django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone'), - ), - migrations.AlterField( - model_name='extrafieldsmodel', - name='field_type', - field=models.CharField(choices=[('int', 'Digital field'), ('str', 'Text field'), ('dbl', 'Floating field'), ('ipa', 'Ip Address')], default='str', max_length=3), - ), - migrations.AddField( - model_name='periodicpayforid', - name='account', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon', verbose_name='Account'), - ), - migrations.AddField( - model_name='periodicpayforid', - name='periodic_pay', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tariff_app.PeriodicPay', verbose_name='Periodic pay'), - ), - ] diff --git a/abonapp/migrations/0005_auto_20180123_1353.py b/abonapp/migrations/0005_auto_20180123_1353.py deleted file mode 100644 index b2705a6..0000000 --- a/abonapp/migrations/0005_auto_20180123_1353.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2018-01-23 13:53 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('abonapp', '0004_auto_20180122_1732'), - ] - - operations = [ - migrations.AlterField( - model_name='alltimepaylog', - name='receipt_num', - field=models.BigIntegerField(default=0, verbose_name='Receipt number'), - ), - ] diff --git a/abonapp/migrations/0006_abon_markers.py b/abonapp/migrations/0006_abon_markers.py deleted file mode 100644 index ba76123..0000000 --- a/abonapp/migrations/0006_abon_markers.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11 on 2018-02-13 14:06 -from __future__ import unicode_literals - -import bitfield.models -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('abonapp', '0005_auto_20180123_1353'), - ] - - operations = [ - migrations.AddField( - model_name='abon', - name='markers', - field=bitfield.models.BitField((('icon_donkey', 'Donkey'), ('icon_fire', 'Fire'), ('icon_ok', 'Ok'), - ('icon_king', 'King'), ('icon_tv', 'TV'), ('icon_smile', 'Smile'), - ('icon_dollar', 'Dollar'), ('icon_service', 'Service'), - ('icon_mrk', 'Marker')), default=None), - ), - ] diff --git a/abonapp/models.py b/abonapp/models.py index f329859..be12bb2 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -10,8 +10,9 @@ from django.dispatch import receiver from django.utils import timezone from django.utils.translation import ugettext_lazy as _ -from accounts_app.models import UserProfile, MyUserManager +from accounts_app.models import UserProfile, MyUserManager, BaseAccount from agent import Transmitter, AbonStruct, TariffStruct, NasFailedResult, NasNetworkError +from group_app.models import Group from mydefs import MyGenericIPAddressField, ip2int, LogicError, ip_addr_regex from tariff_app.models import Tariff, PeriodicPay from bitfield import BitField @@ -20,24 +21,6 @@ from bitfield import BitField TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') -class AbonGroup(models.Model): - title = models.CharField(max_length=127, unique=True) - profiles = models.ManyToManyField(UserProfile, blank=True, related_name='abon_groups') - tariffs = models.ManyToManyField(Tariff, blank=True, related_name='tariff_groups') - - class Meta: - db_table = 'abonent_groups' - permissions = ( - ('can_view_abongroup', _('Can view subscriber group')), - ) - verbose_name = _('Abon group') - verbose_name_plural = _('Abon groups') - ordering = ['title'] - - def __str__(self): - return self.title - - class AbonLog(models.Model): abon = models.ForeignKey('Abon', models.CASCADE) amount = models.FloatField(default=0.0) @@ -89,7 +72,7 @@ class AbonTariff(models.Model): class AbonStreet(models.Model): name = models.CharField(max_length=64) - group = models.ForeignKey(AbonGroup, models.CASCADE) + group = models.ForeignKey(Group, models.CASCADE) def __str__(self): return self.name @@ -149,9 +132,9 @@ class AbonManager(MyUserManager): return super(MyUserManager, self).get_queryset().filter(is_admin=False) -class Abon(UserProfile): +class Abon(BaseAccount): current_tariff = models.ForeignKey(AbonTariff, null=True, blank=True, on_delete=models.SET_NULL) - group = models.ForeignKey(AbonGroup, models.SET_NULL, blank=True, null=True, verbose_name=_('User group')) + group = models.ForeignKey(Group, models.SET_NULL, blank=True, null=True, verbose_name=_('User group')) ballance = models.FloatField(default=0.0) ip_address = MyGenericIPAddressField(blank=True, null=True) description = models.TextField(_('Comment'), null=True, blank=True) diff --git a/abonapp/templates/abonapp/addAbon.html b/abonapp/templates/abonapp/addAbon.html index 8196114..8fe4088 100644 --- a/abonapp/templates/abonapp/addAbon.html +++ b/abonapp/templates/abonapp/addAbon.html @@ -5,7 +5,7 @@ @@ -16,7 +16,7 @@

{% trans 'Add abon' %}

-
{% csrf_token %} + {% csrf_token %}
diff --git a/abonapp/templates/abonapp/addGroup.html b/abonapp/templates/abonapp/addGroup.html deleted file mode 100644 index 4f407a3..0000000 --- a/abonapp/templates/abonapp/addGroup.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends 'base.html' %} -{% load i18n %} -{% block main %} - - - - {% include 'message_block.html' %} - -
-
-

{% trans 'Add group' %}

-
-
- {% csrf_token %} -
- - -
- - {{ form.title.errors }} -
-
-
- - -
- -
-
- -{% endblock %} \ No newline at end of file diff --git a/abonapp/templates/abonapp/addInvoice.html b/abonapp/templates/abonapp/addInvoice.html index 1c65d5e..a2a98bf 100644 --- a/abonapp/templates/abonapp/addInvoice.html +++ b/abonapp/templates/abonapp/addInvoice.html @@ -5,8 +5,8 @@ @@ -15,11 +15,11 @@

{% trans 'Add receipt for' %} - {{ abon.fio }} + {{ abon.fio }}

-
{% csrf_token %}
diff --git a/abonapp/templates/abonapp/buy_tariff.html b/abonapp/templates/abonapp/buy_tariff.html index a8cce4c..1aae249 100644 --- a/abonapp/templates/abonapp/buy_tariff.html +++ b/abonapp/templates/abonapp/buy_tariff.html @@ -5,8 +5,8 @@ @@ -15,11 +15,11 @@

{% trans 'Pick a service for' %} - {% trans 'Sub' %} + {% trans 'Sub' %}

- {% csrf_token %}
{% if tariffs %} @@ -59,7 +59,7 @@ diff --git a/abonapp/templates/abonapp/charts.html b/abonapp/templates/abonapp/charts.html index 97bcd2f..052a0a5 100644 --- a/abonapp/templates/abonapp/charts.html +++ b/abonapp/templates/abonapp/charts.html @@ -11,7 +11,7 @@
{% if charts_data %}
- +
- {% csrf_token %} + {% csrf_token %} {% bootstrap_field form.username label_class='col-sm-4' field_class='col-sm-8' form_group_class='form-group-sm' %} {% bootstrap_field form.fio label_class='col-sm-4' field_class='col-sm-8' form_group_class='form-group-sm' %} @@ -24,10 +24,10 @@ - + - + @@ -41,7 +41,7 @@
- + @@ -116,20 +116,20 @@
- {% csrf_token %} + {% csrf_token %}
{% if device %} - + {{ device.comment|truncatechars:11 }} {{ device.ip_address }} - + {% else %} - + {% trans 'Add clutch' %} {% endif %} @@ -177,7 +177,7 @@

{% trans 'Extra fields' %}

- {% csrf_token %} + {% csrf_token %} {% for ef in abon.extra_fields.all %}
@@ -188,7 +188,7 @@ - + @@ -202,7 +202,7 @@
- + {% trans 'Add' %} @@ -227,7 +227,7 @@