├── .gitignore ├── .idea ├── .name ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── teknikservistakibi.iml ├── vcs.xml └── workspace.xml ├── README ├── Video_PDF ├── .~lock.Django__21012016.odt# ├── Django.pdf ├── Django_1.9__10116.pdf ├── Django_1.9__140116.pdf ├── Django_1.9__140116___Serhan.pdf ├── Django_1.9__150116.pdf ├── Django_1.9__180116.pdf ├── Django_1.9__v2.pdf ├── Django_Serhan.odt ├── Django__19012016.pdf ├── Django__20012016.odt ├── Django__20012016.pdf ├── Django__21012016.odt ├── Django__21012016.pdf ├── coding.mp4 ├── coding.webm ├── django.epub ├── django.pdf ├── django.png └── djnago_neleranlatildi.txt ├── db.sqlite3 ├── manage.py ├── media ├── fancyInput.js ├── html5shiv.min.js ├── jquery-1.9.1.min.js └── styles.css ├── pycsil ├── pycsil~ ├── servisformu ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20160114_1519.py │ ├── 0003_auto_20160114_1520.py │ ├── 0004_auto_20160114_1526.py │ ├── 0005_auto_20160115_1151.py │ ├── 0006_auto_20160115_1152.py │ ├── 0007_auto_20160115_1152.py │ ├── 0008_auto_20160115_1156.py │ ├── 0009_auto_20160115_1156.py │ └── __init__.py ├── models.py ├── tests.py └── views.py ├── static └── admin │ ├── css │ ├── base.css │ ├── changelists.css │ ├── dashboard.css │ ├── fonts.css │ ├── forms.css │ ├── login.css │ ├── rtl.css │ └── widgets.css │ ├── fonts │ ├── LICENSE.txt │ ├── README.txt │ ├── Roboto-Bold-webfont.woff │ ├── Roboto-Light-webfont.woff │ └── Roboto-Regular-webfont.woff │ ├── img │ ├── LICENSE │ ├── README.txt │ ├── calendar-icons.svg │ ├── gis │ │ ├── move_vertex_off.svg │ │ └── move_vertex_on.svg │ ├── icon-addlink.svg │ ├── icon-alert.svg │ ├── icon-calendar.svg │ ├── icon-changelink.svg │ ├── icon-clock.svg │ ├── icon-deletelink.svg │ ├── icon-no.svg │ ├── icon-unknown-alt.svg │ ├── icon-unknown.svg │ ├── icon-yes.svg │ ├── inline-delete.svg │ ├── search.svg │ ├── selector-icons.svg │ ├── sorting-icons.svg │ ├── tooltag-add.svg │ └── tooltag-arrowright.svg │ └── js │ ├── SelectBox.js │ ├── SelectFilter2.js │ ├── actions.js │ ├── actions.min.js │ ├── admin │ ├── DateTimeShortcuts.js │ └── RelatedObjectLookups.js │ ├── calendar.js │ ├── collapse.js │ ├── collapse.min.js │ ├── core.js │ ├── inlines.js │ ├── inlines.min.js │ ├── jquery.init.js │ ├── prepopulate.js │ ├── prepopulate.min.js │ ├── timeparse.js │ ├── urlify.js │ └── vendor │ ├── jquery │ ├── LICENSE-JQUERY.txt │ ├── jquery.js │ └── jquery.min.js │ └── xregexp │ ├── LICENSE-XREGEXP.txt │ └── xregexp.min.js ├── teknikservistakibi ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py └── templates ├── admin ├── 404.html ├── 500.html ├── actions.html ├── app_index.html ├── auth │ └── user │ │ ├── add_form.html │ │ └── change_password.html ├── base.html ├── base_site.html ├── change_form.html ├── change_list.html ├── change_list_results.html ├── date_hierarchy.html ├── delete_confirmation.html ├── delete_selected_confirmation.html ├── edit_inline │ ├── stacked.html │ └── tabular.html ├── filter.html ├── includes │ ├── fieldset.html │ └── object_delete_summary.html ├── index.html ├── invalid_setup.html ├── login.html ├── object_history.html ├── pagination.html ├── popup_response.html ├── prepopulated_fields_js.html ├── related_widget_wrapper.html ├── search_form.html └── submit_line.html ├── formlar.xml ├── gerekli.html ├── index.html ├── robots.txt ├── test.html └── yazdir.html /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | teknikservistakibi -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/teknikservistakibi.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Muslu YÜKSEKTEPE – 2016 2 | 3 | www.muslu.org | www.djangoturkiye.com 4 | https://www.facebook.com/groups/PythonTurkiye/ 5 | Bağış Hesabı: TR03 0006 2000 7500 0006 6675 10 6 | 7 | 8 | Dokümanlar ODT formatıyla sunulmaktadır. 9 | 10 | Tekrar yayınlamak ve/veya düzenlemek istediğinizde isim ve site adreslerinin yazılmasıyla istenildiği gibi kullanılabilir. 11 | 12 | Muslu YÜKSEKTEPE – 2016 13 | www.muslu.org | www.djangoturkiye.com 14 | 15 | 16 | Merhaba arkadaşlar; genel olarak değişimler aşağıda listelenmiştir. 17 | 18 | 21 Ocak 2016 19 | Templatetags ve filter örnekleri 20 | PDF index eklemesi 21 | 22 | 20 Ocak 2016 23 | Templatetags örnekleri 24 | 25 | 26 | 19 Ocak 2016 27 | xml ve txt dosyası yönlendirmeleri 28 | detaylı sayfa parselleme (block) anlatımı 29 | 30 | 17 Ocak 2016 31 | xml dosyasına yönlendirme (render) 32 | cdata nedir ve kullanımı 33 | inline bilgileri (_set.all) template olarak kullanma 34 | forloop.counter nedir 35 | 36 | 14 Ocak 2016 37 | TemplateView ile direk html,txt veya xml dosyasına yönlendirme 38 | media klasör kullanımı 39 | url.py ye fiziksel yol tanımlama (media) 40 | csrf kısa değinme 41 | ajax ile sorgulama 42 | HttpResponse anlatımı 43 | veritabanına alan ekleme 44 | 45 | 13 Ocak 2016 46 | admin temasını kopyalama 47 | static dosyalarını düzenleme 48 | html dosyalarını düzenleme 49 | stil ekleme 50 | yetkilendirme 51 | list_display kısıtlama 52 | kayıt limiti koyma 53 | kayıt silme iptali 54 | 55 | 12 Ocak 2016 56 | uygulama adı değiştirme 57 | proje öncesi fizibilite 58 | charfield için default rastgele kod oluşturma 59 | boş geçilemez kısıtı 60 | null olamaz kısıtı 61 | list_display_links ile sadece istenilen alanlara düzenleme linki 62 | action (eylem) ekleme 63 | toplu kayıt güncelleme 64 | müşteri telefonunu arama 65 | toplu kayıt güncellemede koşul kullanma 66 | manytomany ile çoklu seçim 67 | inline ile tablo bağı oluşturma 68 | foreignkey veri kısıtlama 69 | foreignkey default seçeneği 70 | tabular ve stacked inline denemesi 71 | servis kaydı oluşturma ve çıktısını alma 72 | 73 | 74 | 75 | 76 | 77 | *** Bağış için alt bilgiye iban numarası ekledim. Yapılacak bağışlar oğlum Cem Emir'in oyuncakları için kullanılacaktır. 78 | *** Gönüllü bir arkadaş editörlük yapıp metinleri ve renkleri düzenlerse çok sevinirim. 79 | -------------------------------------------------------------------------------- /Video_PDF/.~lock.Django__21012016.odt#: -------------------------------------------------------------------------------- 1 | ,muslu,muslu-MS-7641,21.01.2016 13:39,file:///home/muslu/.config/libreoffice/4; -------------------------------------------------------------------------------- /Video_PDF/Django.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__10116.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__10116.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__140116.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__140116.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__140116___Serhan.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__140116___Serhan.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__150116.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__150116.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__180116.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__180116.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_1.9__v2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_1.9__v2.pdf -------------------------------------------------------------------------------- /Video_PDF/Django_Serhan.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django_Serhan.odt -------------------------------------------------------------------------------- /Video_PDF/Django__19012016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django__19012016.pdf -------------------------------------------------------------------------------- /Video_PDF/Django__20012016.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django__20012016.odt -------------------------------------------------------------------------------- /Video_PDF/Django__20012016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django__20012016.pdf -------------------------------------------------------------------------------- /Video_PDF/Django__21012016.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django__21012016.odt -------------------------------------------------------------------------------- /Video_PDF/Django__21012016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/Django__21012016.pdf -------------------------------------------------------------------------------- /Video_PDF/coding.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/coding.mp4 -------------------------------------------------------------------------------- /Video_PDF/coding.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/coding.webm -------------------------------------------------------------------------------- /Video_PDF/django.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/django.epub -------------------------------------------------------------------------------- /Video_PDF/django.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/django.pdf -------------------------------------------------------------------------------- /Video_PDF/django.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/Video_PDF/django.png -------------------------------------------------------------------------------- /Video_PDF/djnago_neleranlatildi.txt: -------------------------------------------------------------------------------- 1 | createsuperuser ile yetkili kullanıcı oluşturma 20 2 | 3 | 4 | uygulama adı değiştirme 5 | proje öncesi fizibilite 6 | charfield için default rastgele kod oluşturma 7 | boş geçilemez kısıtı 8 | null olamaz kısıtı 9 | list_display_links ile sadece istenilen alanlara düzenleme linki 10 | action (eylem) ekleme 11 | toplu kayıt güncelleme 12 | müşteri telefonunu arama 13 | toplu kayıt güncellemede koşul kullanma 14 | manytomany ile çoklu seçim 15 | inline ile tablo bağı oluşturma 16 | foreignkey veri kısıtlama 17 | foreignkey default seçeneği 18 | tabular ve stacked inline denemesi 19 | servis kaydı oluşturma ve çıktısını alma 20 | 21 | 22 | TemplateView ile direk html,txt veya xml dosyasına yönlendirme 23 | media klasör kullanımı 24 | url.py ye fiziksel yol tanımlama (media) 25 | csrf kısa değinme 26 | ajax ile sorgulama 27 | HttpResponse anlatımı 28 | veritabanına alan ekleme 29 | 30 | 31 | 32 | 33 | 34 | xml dosyasına yönlendirme (render) 35 | cdata nedir ve kullanımı 36 | inline bilgileri (_set.all) template olarak kullanma 37 | forloop.counter nedir 38 | 39 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/db.sqlite3 -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "teknikservistakibi.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /media/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document); -------------------------------------------------------------------------------- /media/styles.css: -------------------------------------------------------------------------------- 1 | html { 2 | height: 100%; 3 | width: 100% 4 | } 5 | 6 | body { 7 | font-family: "Ubuntu Mono", sans-serif; 8 | height: 100%; 9 | text-align: center; 10 | width: 100% 11 | } 12 | 13 | #wrap { 14 | position: absolute; 15 | z-index: 999; 16 | width: 100%; 17 | height: 100%; 18 | position: relative; 19 | background: -webkit-radial-gradient(#205983, #0a2742); 20 | background: radial-gradient(#205983, #0a2742); 21 | overflow: hidden 22 | } 23 | 24 | * { 25 | margin: 0; 26 | padding: 0 27 | } 28 | 29 | #content { 30 | position: absolute; 31 | width: 200%; 32 | height: 100%; 33 | -webkit-transition: .6s cubic-bezier(.02, .6, .2, 1); 34 | transition: .6s cubic-bezier(.02, .6, .2, 1) 35 | } 36 | 37 | #content section { 38 | width: 50%; 39 | height: 100%; 40 | float: left 41 | } 42 | 43 | #content section::before { 44 | content: ''; 45 | display: inline-block; 46 | height: 100%; 47 | vertical-align: middle 48 | } 49 | 50 | .fancyInput { 51 | max-width: 100%; 52 | min-width: 90%; 53 | font-size: 9vw; 54 | color: #fff; 55 | vertical-align: middle; 56 | line-height: 1.3; 57 | overflow: hidden; 58 | text-align: left; 59 | box-shadow: 0 1px 0 rgba(255, 255, 255, .15), 0 2px 4px rgba(0, 0, 0, .2) inset, 0 0 12px rgba(255, 255, 255, .1); 60 | padding: 20px 20px; 61 | background: rgba(0, 0, 0, .1); 62 | border-radius: 10px 63 | } 64 | 65 | .fancyInput { 66 | display: inline-block; 67 | letter-spacing: -1px; 68 | text-shadow: 0 2px 5px rgba(0, 0, 0, .6); 69 | white-space: nowrap; 70 | width: auto; 71 | font-family: "Ubuntu Mono", sans-serif; 72 | position: relative 73 | } 74 | 75 | .fancyInput ::-webkit-input-placeholder { 76 | color: transparent 77 | } 78 | 79 | .fancyInput :-moz-placeholder { 80 | color: transparent 81 | } 82 | 83 | .fancyInput ::-moz-placeholder { 84 | color: transparent 85 | } 86 | 87 | .fancyInput :-ms-input-placeholder { 88 | color: transparent 89 | } 90 | 91 | .fancyInput.textarea { 92 | white-space: normal; 93 | overflow: auto 94 | } 95 | 96 | .fancyInput input { 97 | color: transparent; 98 | position: absolute; 99 | z-index: 2; 100 | width: 100%; 101 | border: 0; 102 | outline: 0; 103 | top: 0; 104 | left: 0; 105 | background: none; 106 | padding: inherit; 107 | padding-bottom: 0; 108 | font-family: "Ubuntu Mono", sans-serif; 109 | font-size: inherit; 110 | letter-spacing: -1px; 111 | -moz-box-sizing: border-box; 112 | -webkit-box-sizing: border-box 113 | } 114 | 115 | .fancyInput input { 116 | top: 1px; 117 | left: -1px; 118 | padding-right: 0 119 | } 120 | 121 | .fancyInput > div { 122 | display: inline-block; 123 | position: relative 124 | } 125 | 126 | .fancyInput > div:before { 127 | opacity: 0; 128 | left: -20px; 129 | content: attr(data-placeholder); 130 | position: absolute; 131 | transition: .3s ease-out 132 | } 133 | 134 | .fancyInput > div.empty:before { 135 | opacity: .2; 136 | left: 0 137 | } 138 | 139 | .fancyInput input:focus ~ div.empty:before { 140 | opacity: .1 141 | } 142 | 143 | .fancyInput.textarea > div { 144 | width: 99.9% 145 | } 146 | 147 | .fancyInput *:focus ~ .caret, 148 | .fancyInput *:focus ~ div .caret { 149 | opacity: .8; 150 | box-shadow: 0 0 8px #fff; 151 | -webkit-animation: .4s 40ms caret infinite; 152 | animation: .4s 40ms caret infinite 153 | } 154 | 155 | .fancyInput .caret { 156 | font-weight: normal; 157 | opacity: 0; 158 | display: inline-block; 159 | width: 3px; 160 | margin-left: -3px; 161 | background: #fff; 162 | border-radius: 4px; 163 | -moz-user-select: none 164 | } 165 | 166 | .fancyInput span:not(.deleted) ~ .caret { 167 | position: absolute; 168 | margin: 0 169 | } 170 | 171 | .fancyInput > div span { 172 | -webkit-transition: 100ms cubic-bezier(0, .6, .55, 1.4); 173 | transition: 100ms cubic-bezier(0, .6, .55, 1.4); 174 | display: inline-block; 175 | position: relative 176 | } 177 | 178 | .fancyInput > input[type="password"] + div span:empty::after { 179 | content: '●'; 180 | display: inline 181 | } 182 | 183 | .fancyInput > div .deleted { 184 | opacity: 0; 185 | -webkit-transition: 140ms; 186 | transition: 140ms; 187 | -webkit-transform: translateX(12px); 188 | transform: translateX(12px) 189 | } 190 | 191 | .fancyInput > div span.state1 { 192 | -webkit-transform: translateY(-25px) rotateX(90deg); 193 | transform: translateY(-25px) rotateX(90deg) 194 | } 195 | 196 | .fancyInput > div span.state2 { 197 | -webkit-transform: translateY(25px) rotateX(90deg); 198 | transform: translateY(25px) rotateX(90deg) 199 | } 200 | 201 | @charset "IBM437"; 202 | @keyframes caret { 203 | 50% { 204 | opacity: 0.1; 205 | transform: scaleY(0.8); 206 | } 207 | } 208 | 209 | @-webkit-keyframes caret { 210 | 50% { 211 | opacity: 0.1; 212 | -webkit-transform: scaleY(0.8); 213 | } 214 | } -------------------------------------------------------------------------------- /pycsil: -------------------------------------------------------------------------------- 1 | find ~/teknikservisformu/ -name '*.pyc' -exec rm {} \; 2 | 3 | -------------------------------------------------------------------------------- /pycsil~: -------------------------------------------------------------------------------- 1 | find ~/django/ -name '*.pyc' -exec rm {} \; 2 | 3 | -------------------------------------------------------------------------------- /servisformu/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | default_app_config = 'servisformu.apps.ServisformuConfig' -------------------------------------------------------------------------------- /servisformu/admin.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from django.contrib import admin 4 | from servisformu.models import Teknisyen, Musteriler, Durumlar, Aksesuarlar, ServisForm, Urunler 5 | 6 | class TeknisyenAdmin(admin.ModelAdmin): 7 | list_display = ['Aktif', 'AdSoyad', 'Yazdir', 'EkAlanTest'] 8 | list_per_page = 20 9 | exclude = ( 'KayitTarihi', ) 10 | 11 | list_filter = ['Aktif', 'AdSoyad', ] 12 | search_fields = ['AdSoyad', ] 13 | date_hierarchy = 'KayitTarihi' 14 | 15 | 16 | 17 | 18 | # def has_add_permission(self, request): 19 | # try: 20 | # if not request.user.is_superuser: 21 | # try: 22 | # KayitSayisi = self.model.objects.count() 23 | # except: 24 | # KayitSayisi = 0 25 | # KalanLimit = 2 26 | # 27 | # if KayitSayisi >= KalanLimit: 28 | # return False 29 | # else: 30 | # return True 31 | # except: 32 | # return True 33 | # 34 | # def get_list_display(self, request): 35 | # g_l = super(TeknisyenAdmin, self).get_list_display(request) 36 | # 37 | # try: 38 | # if not request.user.is_superuser: 39 | # g_l.remove('user') 40 | # except: 41 | # pass 42 | # return g_l 43 | 44 | 45 | 46 | def SecilileriGuncelle(modeladmin, request, queryset): 47 | print queryset.query 48 | for k in queryset: 49 | if k.Yetkili.startswith("Muslu"): 50 | k.Yetkili = k.Yetkili + u"___Musluilebaşlıyordu" 51 | k.save() 52 | return "" 53 | SecilileriGuncelle.short_description = u"Seçilileri Güncelle" 54 | 55 | 56 | class MusterilerAdmin(admin.ModelAdmin): 57 | list_display = ( 'Kodu', 'Unvan', 'Yetkili', 'Aktif', 'AramaYap') 58 | list_per_page = 80 59 | exclude = ( 'KayitTarihi', ) 60 | search_fields = ( 'Yetkili', 'Unvan' ) 61 | list_display_links = ('Unvan', 'Yetkili') 62 | actions = (SecilileriGuncelle,) 63 | actions_on_bottom = True 64 | actions_on_top = True 65 | 66 | 67 | 68 | class DurumlarAdmin(admin.ModelAdmin): 69 | list_display = ('Durumu',) 70 | list_per_page = 80 71 | 72 | 73 | class AksesuarlarAdmin(admin.ModelAdmin): 74 | list_display = ('Adi',) 75 | list_per_page = 5 76 | 77 | 78 | class UrunlerInline(admin.StackedInline): 79 | model = Urunler 80 | extra = 0 81 | max_num = 5 82 | 83 | 84 | 85 | class ServisFormAdmin(admin.ModelAdmin): 86 | inlines = [ UrunlerInline, ] 87 | list_display = ( 'FormNo', 'Musteri', 'TeslimEden', 'TeslimAlan', 'KayitTarihi', 'Yazdir' ) 88 | list_per_page = 50 89 | ordering = ( '-KayitTarihi', ) 90 | date_hierarchy = 'KayitTarihi' 91 | search_fields = ( 'FormNo', 'Musteri__Yetkili', 'Musteri__Telefon' ) 92 | exclude = ( 'KayitTarihi', ) 93 | 94 | 95 | def formfield_for_foreignkey(self, db_field, request, **kwargs): 96 | 97 | if db_field.name == 'TeslimAlan': 98 | kwargs["queryset"] = Teknisyen.objects.filter(Aktif=True) 99 | 100 | if db_field.name == 'Musteri': 101 | kwargs["queryset"] = Musteriler.objects.filter(Aktif=True) 102 | 103 | return super(ServisFormAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 104 | 105 | 106 | 107 | admin.site.register(ServisForm, ServisFormAdmin) 108 | admin.site.register(Aksesuarlar, AksesuarlarAdmin) 109 | admin.site.register(Durumlar, DurumlarAdmin) 110 | admin.site.register(Musteriler, MusterilerAdmin) 111 | admin.site.register(Teknisyen, TeknisyenAdmin) -------------------------------------------------------------------------------- /servisformu/apps.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | from django.apps import AppConfig 4 | 5 | class ServisformuConfig(AppConfig): 6 | name = 'servisformu' 7 | verbose_name = u'Servis Formları' 8 | 9 | -------------------------------------------------------------------------------- /servisformu/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-14 13:19 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | import django.utils.timezone 8 | 9 | 10 | class Migration(migrations.Migration): 11 | 12 | initial = True 13 | 14 | dependencies = [ 15 | ] 16 | 17 | operations = [ 18 | migrations.CreateModel( 19 | name='Aksesuarlar', 20 | fields=[ 21 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('Adi', models.CharField(help_text='\xdcr\xfcnle beraber getirilen t\xfcm aksesuarlar. \xd6rn: Batarya, \xc7anta', max_length=30, verbose_name='Adi')), 23 | ], 24 | options={ 25 | 'verbose_name': 'Aksesuar', 26 | 'verbose_name_plural': 'Aksesuarlar', 27 | }, 28 | ), 29 | migrations.CreateModel( 30 | name='Durumlar', 31 | fields=[ 32 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 33 | ('Durumu', models.CharField(help_text='Metin alan\u0131n\u0131n alt\u0131nda kay\u0131t girerken yard\u0131mc\u0131 olabilecek konular\u0131 anlatan k\u0131sa bir a\xe7\u0131klama yazabilirsiniz.', max_length=30, verbose_name='Durum')), 34 | ], 35 | options={ 36 | 'verbose_name': 'Durum', 37 | 'verbose_name_plural': 'Durumlar', 38 | }, 39 | ), 40 | migrations.CreateModel( 41 | name='Musteriler', 42 | fields=[ 43 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 44 | ('Aktif', models.BooleanField(default=1)), 45 | ('Kodu', models.CharField(default='21755294', max_length=8, verbose_name='M\xfc\u015fteri Kodu')), 46 | ('Unvan', models.CharField(max_length=250, verbose_name='Ticari \xdcnvan')), 47 | ('Yetkili', models.CharField(max_length=250, verbose_name='Yetkili Ad\u0131 Soyad\u0131')), 48 | ('Telefon', models.CharField(blank=True, max_length=13, verbose_name='Telefon')), 49 | ('KayitTarihi', models.DateField(default=django.utils.timezone.now, verbose_name='Kay\u0131t Tarihi')), 50 | ], 51 | options={ 52 | 'verbose_name': 'M\xfc\u015fteri', 53 | 'verbose_name_plural': 'M\xfc\u015fteriler', 54 | }, 55 | ), 56 | migrations.CreateModel( 57 | name='ServisForm', 58 | fields=[ 59 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 60 | ('TeslimEden', models.CharField(max_length=130, verbose_name='Teslim Eden')), 61 | ('FormNo', models.CharField(default='22608778', max_length=8, verbose_name='Form No')), 62 | ('KayitTarihi', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Kay\u0131t Tarihi')), 63 | ('Musteri', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servisformu.Musteriler')), 64 | ], 65 | options={ 66 | 'verbose_name': 'Servis Formu', 67 | 'verbose_name_plural': 'Formlar', 68 | }, 69 | ), 70 | migrations.CreateModel( 71 | name='Teknisyen', 72 | fields=[ 73 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 74 | ('Aktif', models.BooleanField(default=1)), 75 | ('AdSoyad', models.CharField(max_length=250, verbose_name='Ad\u0131 Soyad\u0131')), 76 | ('KayitTarihi', models.DateField(default=django.utils.timezone.now, verbose_name='Kay\u0131t Tarihi')), 77 | ], 78 | options={ 79 | 'verbose_name': 'Teknisyen', 80 | 'verbose_name_plural': 'Teknisyenler', 81 | }, 82 | ), 83 | migrations.CreateModel( 84 | name='Urunler', 85 | fields=[ 86 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 87 | ('Cins', models.CharField(max_length=30, verbose_name='Cinsi')), 88 | ('Marka', models.CharField(max_length=50, verbose_name='Marka')), 89 | ('Model', models.CharField(max_length=50, verbose_name='Model')), 90 | ('SeriNo', models.CharField(max_length=250, verbose_name='Seri No')), 91 | ('GarantiBitis', models.DateField(default=django.utils.timezone.now, verbose_name='Garanti Biti\u015f')), 92 | ('Sikayet', models.TextField(verbose_name='\u015eikayet')), 93 | ('Not', models.TextField(blank=True, verbose_name='Yap\u0131lan \u0130\u015flemler')), 94 | ('Aksesuar', models.ManyToManyField(blank=True, to='servisformu.Aksesuarlar')), 95 | ('Durum', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servisformu.Durumlar')), 96 | ('ServisFormu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servisformu.ServisForm')), 97 | ], 98 | options={ 99 | 'verbose_name': '\xdcr\xfcn', 100 | 'verbose_name_plural': '\xdcr\xfcnler', 101 | }, 102 | ), 103 | migrations.AddField( 104 | model_name='servisform', 105 | name='TeslimAlan', 106 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='servisformu.Teknisyen'), 107 | ), 108 | ] 109 | -------------------------------------------------------------------------------- /servisformu/migrations/0002_auto_20160114_1519.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-14 13:19 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='77514188', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='49942436', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0003_auto_20160114_1520.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-14 13:20 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0002_auto_20160114_1519'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='87473836', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='39584910', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0004_auto_20160114_1526.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-14 13:26 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0003_auto_20160114_1520'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='23229028', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='27150718', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0005_auto_20160115_1151.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-15 09:51 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | import django.utils.timezone 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('servisformu', '0004_auto_20160114_1526'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AddField( 17 | model_name='urunler', 18 | name='TeslimatTarihi', 19 | field=models.DateField(blank=True, default=django.utils.timezone.now, verbose_name='Teslimat Tarihi'), 20 | ), 21 | migrations.AlterField( 22 | model_name='musteriler', 23 | name='Kodu', 24 | field=models.CharField(default='98930143', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 25 | ), 26 | migrations.AlterField( 27 | model_name='servisform', 28 | name='FormNo', 29 | field=models.CharField(default='21352374', max_length=8, verbose_name='Form No'), 30 | ), 31 | ] 32 | -------------------------------------------------------------------------------- /servisformu/migrations/0006_auto_20160115_1152.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-15 09:52 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0005_auto_20160115_1151'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='43878296', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='71158273', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0007_auto_20160115_1152.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-15 09:52 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0006_auto_20160115_1152'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='42650415', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='17157930', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0008_auto_20160115_1156.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-15 09:56 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0007_auto_20160115_1152'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='82157338', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='90197119', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/0009_auto_20160115_1156.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-15 09:56 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('servisformu', '0008_auto_20160115_1156'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='musteriler', 17 | name='Kodu', 18 | field=models.CharField(default='27525844', max_length=8, verbose_name='M\xfc\u015fteri Kodu'), 19 | ), 20 | migrations.AlterField( 21 | model_name='servisform', 22 | name='FormNo', 23 | field=models.CharField(default='58178840', max_length=8, verbose_name='Form No'), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /servisformu/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/servisformu/migrations/__init__.py -------------------------------------------------------------------------------- /servisformu/models.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.utils import timezone 5 | 6 | from django.db import models 7 | 8 | 9 | 10 | 11 | 12 | 13 | class Teknisyen ( models.Model ) : 14 | Aktif = models.BooleanField(default = 1) 15 | AdSoyad = models.CharField ( u'Adı Soyadı', max_length = 250 ) 16 | KayitTarihi = models.DateField ( u"Kayıt Tarihi", default=timezone.now) 17 | 18 | def __unicode__(self): 19 | return self.AdSoyad 20 | 21 | class Meta: 22 | verbose_name_plural = u"Teknisyenler" 23 | verbose_name = u"Teknisyen" 24 | 25 | 26 | def Yazdir ( self ) : 27 | return 'Yazdır' % self.id 28 | Yazdir.short_description = u'Yazdır' 29 | Yazdir.allow_tags = True 30 | 31 | def EkAlanTest(self): 32 | return self.AdSoyad.replace(' ', '_______') 33 | EkAlanTest.short_description = u'Burası alanın başlığı' 34 | 35 | 36 | 37 | 38 | import random, string 39 | 40 | class Musteriler ( models.Model ) : 41 | Aktif = models.BooleanField(default = 1) 42 | Kodu = models.CharField ( u'Müşteri Kodu', default=''.join(random.choice(string.digits) for x in range(8)), max_length = 8 ) 43 | Unvan = models.CharField ( u'Ticari Ünvan', max_length = 250 ) 44 | Yetkili = models.CharField ( u'Yetkili Adı Soyadı', max_length = 250 ) 45 | Telefon = models.CharField ( u'Telefon', max_length = 13, blank = True ) 46 | KayitTarihi = models.DateField ( u"Kayıt Tarihi", default=timezone.now) 47 | 48 | def __unicode__(self): 49 | # return self.Kodu + " " + self.Yetkili 50 | return "Müşteri Kodu: %s - Adı: %s" % (self.Kodu, self.Yetkili) 51 | 52 | class Meta: 53 | verbose_name_plural = u"Müşteriler" 54 | verbose_name = u"Müşteri" 55 | 56 | 57 | def AramaYap ( self ) : 58 | if self.Telefon: 59 | return 'Numarayı Ara' % self.Telefon 60 | else: 61 | return 'Telefon No kayıt edilmedi' 62 | 63 | AramaYap.short_description = u'Ara' 64 | AramaYap.allow_tags = True 65 | 66 | 67 | 68 | class Durumlar (models.Model ): 69 | Durumu = models.CharField(u'Durum', max_length=30, help_text='Metin alanının altında kayıt girerken yardımcı olabilecek konuları anlatan kısa bir açıklama yazabilirsiniz.') 70 | 71 | def __unicode__(self): 72 | return self.Durumu 73 | 74 | class Meta: 75 | verbose_name_plural = u"Durumlar" 76 | verbose_name = u"Durum" 77 | 78 | 79 | 80 | class Aksesuarlar (models.Model ): 81 | Adi = models.CharField(u'Adi', max_length=30, help_text='Ürünle beraber getirilen tüm aksesuarlar. Örn: Batarya, Çanta' ) 82 | 83 | def __unicode__(self): 84 | return self.Adi 85 | 86 | class Meta: 87 | verbose_name_plural = u"Aksesuarlar" 88 | verbose_name = u"Aksesuar" 89 | 90 | 91 | 92 | 93 | class ServisForm ( models.Model ) : 94 | Musteri = models.ForeignKey ( Musteriler ) 95 | TeslimEden = models.CharField ( u'Teslim Eden', max_length = 130 ) 96 | # TeslimAlan = models.ForeignKey ( Teknisyen, default=int(Teknisyen.objects.get(id=1).id) ) 97 | TeslimAlan = models.ForeignKey ( Teknisyen ) 98 | FormNo = models.CharField ( u'Form No', default=''.join(random.choice(string.digits) for x in range(8)), max_length = 8 ) 99 | KayitTarihi = models.DateTimeField ( u"Kayıt Tarihi", default=timezone.now) 100 | 101 | def __unicode__(self): 102 | return self.FormNo 103 | 104 | class Meta: 105 | verbose_name_plural = u"Formlar" 106 | verbose_name = u"Servis Formu" 107 | 108 | def Yazdir ( self ) : 109 | return 'Yazdır' % self.id 110 | Yazdir.short_description = u'Yazdır' 111 | Yazdir.allow_tags = True 112 | 113 | 114 | 115 | 116 | class Urunler ( models.Model ) : 117 | ServisFormu = models.ForeignKey ( ServisForm ) 118 | Cins = models.CharField ( u'Cinsi', max_length = 30 ) 119 | Marka = models.CharField ( u'Marka', max_length = 50 ) 120 | Model = models.CharField ( u'Model', max_length = 50 ) 121 | SeriNo = models.CharField ( u'Seri No', max_length = 250 ) 122 | GarantiBitis = models.DateField ( u"Garanti Bitiş", default=timezone.now ) 123 | Sikayet = models.TextField ( u'Şikayet' ) 124 | Aksesuar = models.ManyToManyField ( Aksesuarlar, blank=True ) 125 | Durum = models.ForeignKey ( Durumlar ) 126 | Not = models.TextField ( u'Yapılan İşlemler', blank=True ) 127 | TeslimatTarihi = models.DateField ( u"Teslimat Tarihi", default=timezone.now, blank=True ) 128 | def __unicode__(self): 129 | return "%s %s %s" % (self.Cins, self.Marka, self.Model) 130 | 131 | class Meta: 132 | verbose_name_plural = u"Ürünler" 133 | verbose_name = u"Ürün" 134 | -------------------------------------------------------------------------------- /servisformu/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /servisformu/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.http import HttpResponse 3 | from django.shortcuts import render 4 | from servisformu.models import ServisForm, Urunler 5 | 6 | 7 | def formdurumusorgula(request): 8 | formno = request.POST.get('TakipNo', None) 9 | 10 | print formno 11 | 12 | try: 13 | formdurumu = ServisForm.objects.get(FormNo = formno) 14 | urunler = Urunler.objects.filter(ServisFormu__id = formdurumu.id) 15 | htmltablo = u"" 16 | 17 | for k in urunler: 18 | htmltablo += "" 19 | htmltablo += "" 20 | htmltablo += "" 21 | htmltablo += "" 22 | htmltablo += "" 23 | htmltablo += "
ÜrünNOTDurum
" + k.Cins.upper() + "(" + k.Marka.upper() + " " + k.Model.upper() + ")" + k.Not + "" + k.Durum.Durumu + "
" 24 | return HttpResponse(htmltablo) 25 | except: 26 | return HttpResponse("Form no bulunamadı!") 27 | return HttpResponse("Form no bulunamadı!") 28 | 29 | 30 | def sayfayiyazdir(request, idsi): 31 | formdurumu = ServisForm.objects.get(id = idsi) 32 | formbilgileri = Urunler.objects.filter(ServisFormu__id = idsi) 33 | return render(request, 'yazdir.html', {'formbilgileri': formbilgileri, 'formdurumu':formdurumu}) 34 | 35 | 36 | def xmlcikart(request): 37 | tumformlar = ServisForm.objects.order_by('-KayitTarihi') 38 | ### Tüm servis formlarını kayıt tarihlerini sondan başa doğru sıralayarak 2 tanesini al. Yani son 2 kaydı al 39 | return render(request, 'formlar.xml', {'tumformlar': tumformlar}, content_type="application/xml") 40 | ### tumformlar adında toparladığımız son 2 kaydı formlar.xml dosyasına gönderiyoruz. 41 | ### Bu arada gönderdiğimiz dosyanın türü xml 42 | ### eski versiyonlarda mime_type olarak kullanılmalı 43 | ### "application/xml" de kullanılabilir 44 | 45 | def xmlcikart(request): 46 | tumformlar = ServisForm.objects.order_by('-KayitTarihi') 47 | 48 | from django.core.urlresolvers import resolve 49 | ### isterseniz yukarıya tamımlayabilirsiniz. 50 | GelenUrl = resolve( request.path_info ).url_name 51 | 52 | if GelenUrl == "urunlerxml": 53 | print tumformlar 54 | tumformlar = tumformlar[0:1] 55 | print tumformlar 56 | ### tumformlar bir liste olduğu için 1 kayıt al diyebilir ve tekrar aynı isimle tanımlayabiliriz 57 | 58 | return render(request, 'formlar.xml', {'tumformlar': tumformlar}, content_type="application/xml") 59 | 60 | 61 | 62 | 63 | def test(request): 64 | list1 = ['muslu', 'yuksektepe', '', False] 65 | list2 = ['digerliste1', 'digerliste2', None] 66 | string = "bu bir string" 67 | integer = 35 68 | return render(request, 'test.html', { 69 | 'list1': list1, 70 | 'list2':list2, 71 | 'string':string, 72 | 'integer':integer 73 | }, 74 | ) 75 | 76 | -------------------------------------------------------------------------------- /static/admin/css/changelists.css: -------------------------------------------------------------------------------- 1 | /* CHANGELISTS */ 2 | 3 | #changelist { 4 | position: relative; 5 | width: 100%; 6 | } 7 | 8 | #changelist table { 9 | width: 100%; 10 | } 11 | 12 | .change-list .hiddenfields { display:none; } 13 | 14 | .change-list .filtered table { 15 | border-right: none; 16 | } 17 | 18 | .change-list .filtered { 19 | min-height: 400px; 20 | } 21 | 22 | .change-list .filtered .results, .change-list .filtered .paginator, 23 | .filtered #toolbar, .filtered div.xfull { 24 | margin-right: 280px; 25 | width: auto; 26 | } 27 | 28 | .change-list .filtered table tbody th { 29 | padding-right: 1em; 30 | } 31 | 32 | #changelist-form .results { 33 | overflow-x: auto; 34 | } 35 | 36 | #changelist .toplinks { 37 | border-bottom: 1px solid #ddd; 38 | } 39 | 40 | #changelist .paginator { 41 | color: #666; 42 | border-bottom: 1px solid #eee; 43 | background: #fff; 44 | overflow: hidden; 45 | } 46 | 47 | /* CHANGELIST TABLES */ 48 | 49 | #changelist table thead th { 50 | padding: 0; 51 | white-space: nowrap; 52 | vertical-align: middle; 53 | } 54 | 55 | #changelist table thead th.action-checkbox-column { 56 | width: 1.5em; 57 | text-align: center; 58 | } 59 | 60 | #changelist table tbody td.action-checkbox { 61 | text-align: center; 62 | } 63 | 64 | #changelist table tfoot { 65 | color: #666; 66 | } 67 | 68 | /* TOOLBAR */ 69 | 70 | #changelist #toolbar { 71 | padding: 8px 10px; 72 | margin-bottom: 15px; 73 | border-top: 1px solid #eee; 74 | border-bottom: 1px solid #eee; 75 | background: #f8f8f8; 76 | color: #666; 77 | } 78 | 79 | #changelist #toolbar form input { 80 | border-radius: 4px; 81 | font-size: 14px; 82 | padding: 5px; 83 | color: #333; 84 | } 85 | 86 | #changelist #toolbar form #searchbar { 87 | height: 19px; 88 | border: 1px solid #ccc; 89 | padding: 2px 5px; 90 | margin: 0; 91 | vertical-align: top; 92 | font-size: 13px; 93 | } 94 | 95 | #changelist #toolbar form #searchbar:focus { 96 | border-color: #999; 97 | } 98 | 99 | #changelist #toolbar form input[type="submit"] { 100 | border: 1px solid #ccc; 101 | padding: 2px 10px; 102 | margin: 0; 103 | vertical-align: middle; 104 | background: #fff; 105 | box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; 106 | cursor: pointer; 107 | color: #333; 108 | } 109 | 110 | #changelist #toolbar form input[type="submit"]:focus, 111 | #changelist #toolbar form input[type="submit"]:hover { 112 | border-color: #999; 113 | } 114 | 115 | #changelist #changelist-search img { 116 | vertical-align: middle; 117 | margin-right: 4px; 118 | } 119 | 120 | /* FILTER COLUMN */ 121 | 122 | #changelist-filter { 123 | position: absolute; 124 | top: 0; 125 | right: 0; 126 | z-index: 1000; 127 | width: 240px; 128 | background: #f8f8f8; 129 | border-left: none; 130 | margin: 0; 131 | } 132 | 133 | #changelist-filter h2 { 134 | font-size: 14px; 135 | text-transform: uppercase; 136 | letter-spacing: 0.5px; 137 | padding: 5px 15px; 138 | margin-bottom: 12px; 139 | border-bottom: none; 140 | } 141 | 142 | #changelist-filter h3 { 143 | font-weight: 400; 144 | font-size: 14px; 145 | padding: 0 15px; 146 | margin-bottom: 10px; 147 | } 148 | 149 | #changelist-filter ul { 150 | margin: 5px 0; 151 | padding: 0 15px 15px; 152 | border-bottom: 1px solid #eaeaea; 153 | } 154 | 155 | #changelist-filter ul:last-child { 156 | border-bottom: none; 157 | padding-bottom: none; 158 | } 159 | 160 | #changelist-filter li { 161 | list-style-type: none; 162 | margin-left: 0; 163 | padding-left: 0; 164 | } 165 | 166 | #changelist-filter a { 167 | display: block; 168 | color: #999; 169 | } 170 | 171 | #changelist-filter li.selected { 172 | border-left: 5px solid #eaeaea; 173 | padding-left: 10px; 174 | margin-left: -15px; 175 | } 176 | 177 | #changelist-filter li.selected a { 178 | color: #5b80b2; 179 | } 180 | 181 | #changelist-filter a:focus, #changelist-filter a:hover, 182 | #changelist-filter li.selected a:focus, 183 | #changelist-filter li.selected a:hover { 184 | color: #036; 185 | } 186 | 187 | /* DATE DRILLDOWN */ 188 | 189 | .change-list ul.toplinks { 190 | display: block; 191 | float: left; 192 | padding: 0; 193 | margin: 0; 194 | width: 100%; 195 | } 196 | 197 | .change-list ul.toplinks li { 198 | padding: 3px 6px; 199 | font-weight: bold; 200 | list-style-type: none; 201 | display: inline-block; 202 | } 203 | 204 | .change-list ul.toplinks .date-back a { 205 | color: #999; 206 | } 207 | 208 | .change-list ul.toplinks .date-back a:focus, 209 | .change-list ul.toplinks .date-back a:hover { 210 | color: #036; 211 | } 212 | 213 | /* PAGINATOR */ 214 | 215 | .paginator { 216 | font-size: 13px; 217 | padding-top: 10px; 218 | padding-bottom: 10px; 219 | line-height: 22px; 220 | margin: 0; 221 | border-top: 1px solid #ddd; 222 | } 223 | 224 | .paginator a:link, .paginator a:visited { 225 | padding: 2px 6px; 226 | background: #79aec8; 227 | text-decoration: none; 228 | color: #fff; 229 | } 230 | 231 | .paginator a.showall { 232 | padding: 0; 233 | border: none; 234 | background: none; 235 | color: #5b80b2; 236 | } 237 | 238 | .paginator a.showall:focus, .paginator a.showall:hover { 239 | background: none; 240 | color: #036; 241 | } 242 | 243 | .paginator .end { 244 | margin-right: 6px; 245 | } 246 | 247 | .paginator .this-page { 248 | padding: 2px 6px; 249 | font-weight: bold; 250 | font-size: 13px; 251 | vertical-align: top; 252 | } 253 | 254 | .paginator a:focus, .paginator a:hover { 255 | color: white; 256 | background: #036; 257 | } 258 | 259 | /* ACTIONS */ 260 | 261 | .filtered .actions { 262 | margin-right: 280px; 263 | border-right: none; 264 | } 265 | 266 | #changelist table input { 267 | margin: 0; 268 | vertical-align: baseline; 269 | } 270 | 271 | #changelist table tbody tr.selected { 272 | background-color: #FFFFCC; 273 | } 274 | 275 | #changelist .actions { 276 | padding: 10px; 277 | background: #fff; 278 | border-top: none; 279 | border-bottom: none; 280 | line-height: 24px; 281 | color: #999; 282 | } 283 | 284 | #changelist .actions.selected { 285 | background: #fffccf; 286 | border-top: 1px solid #fffee8; 287 | border-bottom: 1px solid #edecd6; 288 | } 289 | 290 | #changelist .actions span.all, 291 | #changelist .actions span.action-counter, 292 | #changelist .actions span.clear, 293 | #changelist .actions span.question { 294 | font-size: 13px; 295 | margin: 0 0.5em; 296 | display: none; 297 | } 298 | 299 | #changelist .actions:last-child { 300 | border-bottom: none; 301 | } 302 | 303 | #changelist .actions select { 304 | vertical-align: top; 305 | height: 24px; 306 | background: none; 307 | border: 1px solid #ccc; 308 | border-radius: 4px; 309 | font-size: 14px; 310 | padding: 0 0 0 4px; 311 | margin: 0; 312 | margin-left: 10px; 313 | } 314 | 315 | #changelist .actions select:focus { 316 | border-color: #999; 317 | } 318 | 319 | #changelist .actions label { 320 | display: inline-block; 321 | vertical-align: middle; 322 | font-size: 13px; 323 | } 324 | 325 | #changelist .actions .button { 326 | font-size: 13px; 327 | border: 1px solid #ccc; 328 | border-radius: 4px; 329 | background: #fff; 330 | box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; 331 | cursor: pointer; 332 | height: 24px; 333 | line-height: 1; 334 | padding: 4px 8px; 335 | margin: 0; 336 | color: #333; 337 | } 338 | 339 | #changelist .actions .button:focus, #changelist .actions .button:hover { 340 | border-color: #999; 341 | } 342 | -------------------------------------------------------------------------------- /static/admin/css/dashboard.css: -------------------------------------------------------------------------------- 1 | /* DASHBOARD */ 2 | 3 | .dashboard .module table th { 4 | width: 100%; 5 | } 6 | 7 | .dashboard .module table td { 8 | white-space: nowrap; 9 | } 10 | 11 | .dashboard .module table td a { 12 | display: block; 13 | padding-right: .6em; 14 | } 15 | 16 | /* RECENT ACTIONS MODULE */ 17 | 18 | .module ul.actionlist { 19 | margin-left: 0; 20 | } 21 | 22 | ul.actionlist li { 23 | list-style-type: none; 24 | } 25 | 26 | ul.actionlist li { 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | -o-text-overflow: ellipsis; 30 | } 31 | -------------------------------------------------------------------------------- /static/admin/css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roboto'; 3 | src: url('../fonts/Roboto-Bold-webfont.woff'); 4 | font-weight: 700; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: 'Roboto'; 10 | src: url('../fonts/Roboto-Regular-webfont.woff'); 11 | font-weight: 400; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Roboto'; 17 | src: url('../fonts/Roboto-Light-webfont.woff'); 18 | font-weight: 300; 19 | font-style: normal; 20 | } 21 | -------------------------------------------------------------------------------- /static/admin/css/login.css: -------------------------------------------------------------------------------- 1 | /* LOGIN FORM */ 2 | 3 | body.login { 4 | background: #f8f8f8; 5 | } 6 | 7 | .login #header { 8 | height: auto; 9 | padding: 5px 16px; 10 | } 11 | 12 | .login #header h1 { 13 | font-size: 18px; 14 | } 15 | 16 | .login #header h1 a { 17 | color: #fff; 18 | } 19 | 20 | .login #content { 21 | padding: 20px 20px 0; 22 | } 23 | 24 | .login #container { 25 | background: #fff; 26 | border: 1px solid #eaeaea; 27 | border-radius: 4px; 28 | overflow: hidden; 29 | width: 28em; 30 | min-width: 300px; 31 | margin: 100px auto; 32 | } 33 | 34 | .login #content-main { 35 | width: 100%; 36 | } 37 | 38 | .login .form-row { 39 | padding: 4px 0; 40 | float: left; 41 | width: 100%; 42 | border-bottom: none; 43 | } 44 | 45 | .login .form-row label { 46 | padding-right: 0.5em; 47 | line-height: 2em; 48 | font-size: 1em; 49 | clear: both; 50 | color: #333; 51 | } 52 | 53 | .login .form-row #id_username, .login .form-row #id_password { 54 | clear: both; 55 | padding: 8px; 56 | width: 100%; 57 | -webkit-box-sizing: border-box; 58 | -moz-box-sizing: border-box; 59 | box-sizing: border-box; 60 | } 61 | 62 | .login span.help { 63 | font-size: 10px; 64 | display: block; 65 | } 66 | 67 | .login .submit-row { 68 | clear: both; 69 | padding: 1em 0 0 9.4em; 70 | margin: 0; 71 | border: none; 72 | background: none; 73 | text-align: left; 74 | } 75 | 76 | .login .password-reset-link { 77 | text-align: center; 78 | } 79 | -------------------------------------------------------------------------------- /static/admin/css/rtl.css: -------------------------------------------------------------------------------- 1 | body { 2 | direction: rtl; 3 | } 4 | 5 | /* LOGIN */ 6 | 7 | .login .form-row { 8 | float: right; 9 | } 10 | 11 | .login .form-row label { 12 | float: right; 13 | padding-left: 0.5em; 14 | padding-right: 0; 15 | text-align: left; 16 | } 17 | 18 | .login .submit-row { 19 | clear: both; 20 | padding: 1em 9.4em 0 0; 21 | } 22 | 23 | /* GLOBAL */ 24 | 25 | th { 26 | text-align: right; 27 | } 28 | 29 | .module h2, .module caption { 30 | text-align: right; 31 | } 32 | 33 | .module ul, .module ol { 34 | margin-left: 0; 35 | margin-right: 1.5em; 36 | } 37 | 38 | .addlink, .changelink { 39 | padding-left: 0; 40 | padding-right: 16px; 41 | background-position: 100% 1px; 42 | } 43 | 44 | .deletelink { 45 | padding-left: 0; 46 | padding-right: 16px; 47 | background-position: 100% 1px; 48 | } 49 | 50 | .object-tools { 51 | float: left; 52 | } 53 | 54 | thead th:first-child, 55 | tfoot td:first-child { 56 | border-left: none; 57 | } 58 | 59 | /* LAYOUT */ 60 | 61 | #user-tools { 62 | right: auto; 63 | left: 0; 64 | text-align: left; 65 | } 66 | 67 | div.breadcrumbs { 68 | text-align: right; 69 | } 70 | 71 | #content-main { 72 | float: right; 73 | } 74 | 75 | #content-related { 76 | float: left; 77 | margin-left: -300px; 78 | margin-right: auto; 79 | } 80 | 81 | .colMS { 82 | margin-left: 300px; 83 | margin-right: 0; 84 | } 85 | 86 | /* SORTABLE TABLES */ 87 | 88 | table thead th.sorted .sortoptions { 89 | float: left; 90 | } 91 | 92 | thead th.sorted .text { 93 | padding-right: 0; 94 | padding-left: 42px; 95 | } 96 | 97 | /* dashboard styles */ 98 | 99 | .dashboard .module table td a { 100 | padding-left: .6em; 101 | padding-right: 16px; 102 | } 103 | 104 | /* changelists styles */ 105 | 106 | .change-list .filtered table { 107 | border-left: none; 108 | border-right: 0px none; 109 | } 110 | 111 | #changelist-filter { 112 | right: auto; 113 | left: 0; 114 | border-left: none; 115 | border-right: none; 116 | } 117 | 118 | .change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { 119 | margin-right: 0; 120 | margin-left: 280px; 121 | } 122 | 123 | #changelist-filter li.selected { 124 | border-left: none; 125 | padding-left: 10px; 126 | margin-left: 0; 127 | border-right: 5px solid #eaeaea; 128 | padding-right: 10px; 129 | margin-right: -15px; 130 | } 131 | 132 | .filtered .actions { 133 | margin-left: 280px; 134 | margin-right: 0; 135 | } 136 | 137 | #changelist table tbody td:first-child, #changelist table tbody th:first-child { 138 | border-right: none; 139 | border-left: none; 140 | } 141 | 142 | /* FORMS */ 143 | 144 | .aligned label { 145 | padding: 0 0 3px 1em; 146 | float: right; 147 | } 148 | 149 | .submit-row { 150 | text-align: left 151 | } 152 | 153 | .submit-row p.deletelink-box { 154 | float: right; 155 | } 156 | 157 | .submit-row input.default { 158 | margin-left: 0; 159 | } 160 | 161 | .vDateField, .vTimeField { 162 | margin-left: 2px; 163 | } 164 | 165 | .aligned .form-row input { 166 | margin-left: 5px; 167 | } 168 | 169 | form ul.inline li { 170 | float: right; 171 | padding-right: 0; 172 | padding-left: 7px; 173 | } 174 | 175 | input[type=submit].default, .submit-row input.default { 176 | float: left; 177 | } 178 | 179 | fieldset .field-box { 180 | float: right; 181 | margin-left: 20px; 182 | margin-right: 0; 183 | } 184 | 185 | .errorlist li { 186 | background-position: 100% 12px; 187 | padding: 0; 188 | } 189 | 190 | .errornote { 191 | background-position: 100% 12px; 192 | padding: 10px 12px; 193 | } 194 | 195 | /* WIDGETS */ 196 | 197 | .calendarnav-previous { 198 | top: 0; 199 | left: auto; 200 | right: 10px; 201 | } 202 | 203 | .calendarnav-next { 204 | top: 0; 205 | right: auto; 206 | left: 10px; 207 | } 208 | 209 | .calendar caption, .calendarbox h2 { 210 | text-align: center; 211 | } 212 | 213 | .selector { 214 | float: right; 215 | } 216 | 217 | .selector .selector-filter { 218 | text-align: right; 219 | } 220 | 221 | .inline-deletelink { 222 | float: left; 223 | } 224 | 225 | form .form-row p.datetime { 226 | overflow: hidden; 227 | } 228 | 229 | /* MISC */ 230 | 231 | .inline-related h2, .inline-group h2 { 232 | text-align: right 233 | } 234 | 235 | .inline-related h3 span.delete { 236 | padding-right: 20px; 237 | padding-left: inherit; 238 | left: 10px; 239 | right: inherit; 240 | float:left; 241 | } 242 | 243 | .inline-related h3 span.delete label { 244 | margin-left: inherit; 245 | margin-right: 2px; 246 | } 247 | 248 | /* IE7 specific bug fixes */ 249 | 250 | div.colM { 251 | position: relative; 252 | } 253 | 254 | .submit-row input { 255 | float: left; 256 | } 257 | -------------------------------------------------------------------------------- /static/admin/fonts/README.txt: -------------------------------------------------------------------------------- 1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto 2 | Weights used in this project: Light (300), Regular (400), Bold (700) 3 | -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/static/admin/fonts/Roboto-Bold-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/static/admin/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /static/admin/fonts/Roboto-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muslu/django-teknikservis/ec6284ec43af60a7aa93557cd65a2fa302cc2f7c/static/admin/fonts/Roboto-Regular-webfont.woff -------------------------------------------------------------------------------- /static/admin/img/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Code Charm Ltd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /static/admin/img/README.txt: -------------------------------------------------------------------------------- 1 | All icons are taken from Font Awesome (http://fontawesome.io/) project. 2 | The Font Awesome font is licensed under the SIL OFL 1.1: 3 | - http://scripts.sil.org/OFL 4 | 5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG 6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license 7 | in current folder). 8 | -------------------------------------------------------------------------------- /static/admin/img/calendar-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/gis/move_vertex_on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /static/admin/img/icon-deletelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/icon-yes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/inline-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/selector-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /static/admin/img/sorting-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/admin/js/SelectBox.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | var SelectBox = { 4 | cache: {}, 5 | init: function(id) { 6 | var box = document.getElementById(id); 7 | var node; 8 | SelectBox.cache[id] = []; 9 | var cache = SelectBox.cache[id]; 10 | for (var i = 0, j = box.options.length; i < j; i++) { 11 | node = box.options[i]; 12 | cache.push({value: node.value, text: node.text, displayed: 1}); 13 | } 14 | }, 15 | redisplay: function(id) { 16 | // Repopulate HTML select box from cache 17 | var box = document.getElementById(id); 18 | var node; 19 | box.options.length = 0; // clear all options 20 | var cache = SelectBox.cache[id]; 21 | for (var i = 0, j = cache.length; i < j; i++) { 22 | node = cache[i]; 23 | if (node.displayed) { 24 | var new_option = new Option(node.text, node.value, false, false); 25 | // Shows a tooltip when hovering over the option 26 | new_option.setAttribute("title", node.text); 27 | box.options[box.options.length] = new_option; 28 | } 29 | } 30 | }, 31 | filter: function(id, text) { 32 | // Redisplay the HTML select box, displaying only the choices containing ALL 33 | // the words in text. (It's an AND search.) 34 | var tokens = text.toLowerCase().split(/\s+/); 35 | var node, token; 36 | var cache = SelectBox.cache[id]; 37 | for (var i = 0, j = cache.length; i < j; i++) { 38 | node = cache[i]; 39 | node.displayed = 1; 40 | var numTokens = tokens.length; 41 | for (var k = 0; k < numTokens; k++) { 42 | token = tokens[k]; 43 | if (node.text.toLowerCase().indexOf(token) === -1) { 44 | node.displayed = 0; 45 | } 46 | } 47 | } 48 | SelectBox.redisplay(id); 49 | }, 50 | delete_from_cache: function(id, value) { 51 | var node, delete_index = null; 52 | var cache = SelectBox.cache[id]; 53 | for (var i = 0, j = cache.length; i < j; i++) { 54 | node = cache[i]; 55 | if (node.value === value) { 56 | delete_index = i; 57 | break; 58 | } 59 | } 60 | var k = cache.length - 1; 61 | for (i = delete_index; i < k; i++) { 62 | cache[i] = cache[i + 1]; 63 | } 64 | cache.length--; 65 | }, 66 | add_to_cache: function(id, option) { 67 | SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); 68 | }, 69 | cache_contains: function(id, value) { 70 | // Check if an item is contained in the cache 71 | var node; 72 | var cache = SelectBox.cache[id]; 73 | for (var i = 0, j = cache.length; i < j; i++) { 74 | node = cache[i]; 75 | if (node.value === value) { 76 | return true; 77 | } 78 | } 79 | return false; 80 | }, 81 | move: function(from, to) { 82 | var from_box = document.getElementById(from); 83 | var option; 84 | var boxOptions = from_box.options; 85 | for (var i = 0, j = boxOptions.length; i < j; i++) { 86 | option = boxOptions[i]; 87 | if (option.selected && SelectBox.cache_contains(from, option.value)) { 88 | SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1}); 89 | SelectBox.delete_from_cache(from, option.value); 90 | } 91 | } 92 | SelectBox.redisplay(from); 93 | SelectBox.redisplay(to); 94 | }, 95 | move_all: function(from, to) { 96 | var from_box = document.getElementById(from); 97 | var option; 98 | var boxOptions = from_box.options; 99 | for (var i = 0, j = boxOptions.length; i < j; i++) { 100 | option = boxOptions[i]; 101 | if (SelectBox.cache_contains(from, option.value)) { 102 | SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1}); 103 | SelectBox.delete_from_cache(from, option.value); 104 | } 105 | } 106 | SelectBox.redisplay(from); 107 | SelectBox.redisplay(to); 108 | }, 109 | sort: function(id) { 110 | SelectBox.cache[id].sort(function(a, b) { 111 | a = a.text.toLowerCase(); 112 | b = b.text.toLowerCase(); 113 | try { 114 | if (a > b) { 115 | return 1; 116 | } 117 | if (a < b) { 118 | return -1; 119 | } 120 | } 121 | catch (e) { 122 | // silently fail on IE 'unknown' exception 123 | } 124 | return 0; 125 | } ); 126 | }, 127 | select_all: function(id) { 128 | var box = document.getElementById(id); 129 | for (var i = 0; i < box.options.length; i++) { 130 | box.options[i].selected = 'selected'; 131 | } 132 | } 133 | }; 134 | window.SelectBox = SelectBox; 135 | })(); 136 | -------------------------------------------------------------------------------- /static/admin/js/actions.js: -------------------------------------------------------------------------------- 1 | /*global _actions_icnt, gettext, interpolate, ngettext*/ 2 | (function($) { 3 | 'use strict'; 4 | var lastChecked; 5 | 6 | $.fn.actions = function(opts) { 7 | var options = $.extend({}, $.fn.actions.defaults, opts); 8 | var actionCheckboxes = $(this); 9 | var list_editable_changed = false; 10 | var showQuestion = function() { 11 | $(options.acrossClears).hide(); 12 | $(options.acrossQuestions).show(); 13 | $(options.allContainer).hide(); 14 | }, 15 | showClear = function() { 16 | $(options.acrossClears).show(); 17 | $(options.acrossQuestions).hide(); 18 | $(options.actionContainer).toggleClass(options.selectedClass); 19 | $(options.allContainer).show(); 20 | $(options.counterContainer).hide(); 21 | }, 22 | reset = function() { 23 | $(options.acrossClears).hide(); 24 | $(options.acrossQuestions).hide(); 25 | $(options.allContainer).hide(); 26 | $(options.counterContainer).show(); 27 | }, 28 | clearAcross = function() { 29 | reset(); 30 | $(options.acrossInput).val(0); 31 | $(options.actionContainer).removeClass(options.selectedClass); 32 | }, 33 | checker = function(checked) { 34 | if (checked) { 35 | showQuestion(); 36 | } else { 37 | reset(); 38 | } 39 | $(actionCheckboxes).prop("checked", checked) 40 | .parent().parent().toggleClass(options.selectedClass, checked); 41 | }, 42 | updateCounter = function() { 43 | var sel = $(actionCheckboxes).filter(":checked").length; 44 | // _actions_icnt is defined in the generated HTML 45 | // and contains the total amount of objects in the queryset 46 | $(options.counterContainer).html(interpolate( 47 | ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { 48 | sel: sel, 49 | cnt: _actions_icnt 50 | }, true)); 51 | $(options.allToggle).prop("checked", function() { 52 | var value; 53 | if (sel === actionCheckboxes.length) { 54 | value = true; 55 | showQuestion(); 56 | } else { 57 | value = false; 58 | clearAcross(); 59 | } 60 | return value; 61 | }); 62 | }; 63 | // Show counter by default 64 | $(options.counterContainer).show(); 65 | // Check state of checkboxes and reinit state if needed 66 | $(this).filter(":checked").each(function(i) { 67 | $(this).parent().parent().toggleClass(options.selectedClass); 68 | updateCounter(); 69 | if ($(options.acrossInput).val() === 1) { 70 | showClear(); 71 | } 72 | }); 73 | $(options.allToggle).show().click(function() { 74 | checker($(this).prop("checked")); 75 | updateCounter(); 76 | }); 77 | $("a", options.acrossQuestions).click(function(event) { 78 | event.preventDefault(); 79 | $(options.acrossInput).val(1); 80 | showClear(); 81 | }); 82 | $("a", options.acrossClears).click(function(event) { 83 | event.preventDefault(); 84 | $(options.allToggle).prop("checked", false); 85 | clearAcross(); 86 | checker(0); 87 | updateCounter(); 88 | }); 89 | lastChecked = null; 90 | $(actionCheckboxes).click(function(event) { 91 | if (!event) { event = window.event; } 92 | var target = event.target ? event.target : event.srcElement; 93 | if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { 94 | var inrange = false; 95 | $(lastChecked).prop("checked", target.checked) 96 | .parent().parent().toggleClass(options.selectedClass, target.checked); 97 | $(actionCheckboxes).each(function() { 98 | if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { 99 | inrange = (inrange) ? false : true; 100 | } 101 | if (inrange) { 102 | $(this).prop("checked", target.checked) 103 | .parent().parent().toggleClass(options.selectedClass, target.checked); 104 | } 105 | }); 106 | } 107 | $(target).parent().parent().toggleClass(options.selectedClass, target.checked); 108 | lastChecked = target; 109 | updateCounter(); 110 | }); 111 | $('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() { 112 | list_editable_changed = true; 113 | }); 114 | $('form#changelist-form button[name="index"]').click(function(event) { 115 | if (list_editable_changed) { 116 | return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); 117 | } 118 | }); 119 | $('form#changelist-form input[name="_save"]').click(function(event) { 120 | var action_changed = false; 121 | $('select option:selected', options.actionContainer).each(function() { 122 | if ($(this).val()) { 123 | action_changed = true; 124 | } 125 | }); 126 | if (action_changed) { 127 | if (list_editable_changed) { 128 | return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")); 129 | } else { 130 | return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.")); 131 | } 132 | } 133 | }); 134 | }; 135 | /* Setup plugin defaults */ 136 | $.fn.actions.defaults = { 137 | actionContainer: "div.actions", 138 | counterContainer: "span.action-counter", 139 | allContainer: "div.actions span.all", 140 | acrossInput: "div.actions input.select-across", 141 | acrossQuestions: "div.actions span.question", 142 | acrossClears: "div.actions span.clear", 143 | allToggle: "#action-toggle", 144 | selectedClass: "selected" 145 | }; 146 | })(django.jQuery); 147 | -------------------------------------------------------------------------------- /static/admin/js/actions.min.js: -------------------------------------------------------------------------------- 1 | (function(a){var f;a.fn.actions=function(q){var b=a.extend({},a.fn.actions.defaults,q),g=a(this),e=!1,k=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},l=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},m=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},n=function(){m(); 2 | a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},p=function(c){c?k():m();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},!0));a(b.allToggle).prop("checked",function(){var a;c===g.length?(a=!0,k()):(a=!1,n());return a})};a(b.counterContainer).show();a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass); 3 | h();1===a(b.acrossInput).val()&&l()});a(b.allToggle).show().click(function(){p(a(this).prop("checked"));h()});a("a",b.acrossQuestions).click(function(c){c.preventDefault();a(b.acrossInput).val(1);l()});a("a",b.acrossClears).click(function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);n();p(0);h()});f=null;a(g).click(function(c){c||(c=window.event);var d=c.target?c.target:c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass, 4 | d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){e=!0});a('form#changelist-form button[name="index"]').click(function(a){if(e)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))}); 5 | a('form#changelist-form input[name="_save"]').click(function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return e?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})}; 6 | a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery); 7 | -------------------------------------------------------------------------------- /static/admin/js/admin/RelatedObjectLookups.js: -------------------------------------------------------------------------------- 1 | /*global SelectBox, interpolate*/ 2 | // Handles related-objects functionality: lookup link for raw_id_fields 3 | // and Add Another links. 4 | 5 | (function($) { 6 | 'use strict'; 7 | 8 | function html_unescape(text) { 9 | // Unescape a string that was escaped using django.utils.html.escape. 10 | text = text.replace(/</g, '<'); 11 | text = text.replace(/>/g, '>'); 12 | text = text.replace(/"/g, '"'); 13 | text = text.replace(/'/g, "'"); 14 | text = text.replace(/&/g, '&'); 15 | return text; 16 | } 17 | 18 | // IE doesn't accept periods or dashes in the window name, but the element IDs 19 | // we use to generate popup window names may contain them, therefore we map them 20 | // to allowed characters in a reversible way so that we can locate the correct 21 | // element when the popup window is dismissed. 22 | function id_to_windowname(text) { 23 | text = text.replace(/\./g, '__dot__'); 24 | text = text.replace(/\-/g, '__dash__'); 25 | return text; 26 | } 27 | 28 | function windowname_to_id(text) { 29 | text = text.replace(/__dot__/g, '.'); 30 | text = text.replace(/__dash__/g, '-'); 31 | return text; 32 | } 33 | 34 | function showAdminPopup(triggeringLink, name_regexp, add_popup) { 35 | var name = triggeringLink.id.replace(name_regexp, ''); 36 | name = id_to_windowname(name); 37 | var href = triggeringLink.href; 38 | if (add_popup) { 39 | if (href.indexOf('?') === -1) { 40 | href += '?_popup=1'; 41 | } else { 42 | href += '&_popup=1'; 43 | } 44 | } 45 | var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); 46 | win.focus(); 47 | return false; 48 | } 49 | 50 | function showRelatedObjectLookupPopup(triggeringLink) { 51 | return showAdminPopup(triggeringLink, /^lookup_/, true); 52 | } 53 | 54 | function dismissRelatedLookupPopup(win, chosenId) { 55 | var name = windowname_to_id(win.name); 56 | var elem = document.getElementById(name); 57 | if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { 58 | elem.value += ',' + chosenId; 59 | } else { 60 | document.getElementById(name).value = chosenId; 61 | } 62 | win.close(); 63 | } 64 | 65 | function showRelatedObjectPopup(triggeringLink) { 66 | return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); 67 | } 68 | 69 | function updateRelatedObjectLinks(triggeringLink) { 70 | var $this = django.jQuery(triggeringLink); 71 | var siblings = $this.nextAll('.change-related, .delete-related'); 72 | if (!siblings.length) { 73 | return; 74 | } 75 | var value = $this.val(); 76 | if (value) { 77 | siblings.each(function() { 78 | var elm = django.jQuery(this); 79 | elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); 80 | }); 81 | } else { 82 | siblings.removeAttr('href'); 83 | } 84 | } 85 | 86 | function dismissAddRelatedObjectPopup(win, newId, newRepr) { 87 | // newId and newRepr are expected to have previously been escaped by 88 | // django.utils.html.escape. 89 | newId = html_unescape(newId); 90 | newRepr = html_unescape(newRepr); 91 | var name = windowname_to_id(win.name); 92 | var elem = document.getElementById(name); 93 | if (elem) { 94 | var elemName = elem.nodeName.toUpperCase(); 95 | if (elemName === 'SELECT') { 96 | elem.options[elem.options.length] = new Option(newRepr, newId, true, true); 97 | } else if (elemName === 'INPUT') { 98 | if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { 99 | elem.value += ',' + newId; 100 | } else { 101 | elem.value = newId; 102 | } 103 | } 104 | // Trigger a change event to update related links if required. 105 | django.jQuery(elem).trigger('change'); 106 | } else { 107 | var toId = name + "_to"; 108 | var o = new Option(newRepr, newId); 109 | SelectBox.add_to_cache(toId, o); 110 | SelectBox.redisplay(toId); 111 | } 112 | win.close(); 113 | } 114 | 115 | function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { 116 | objId = html_unescape(objId); 117 | newRepr = html_unescape(newRepr); 118 | var id = windowname_to_id(win.name).replace(/^edit_/, ''); 119 | var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); 120 | var selects = django.jQuery(selectsSelector); 121 | selects.find('option').each(function() { 122 | if (this.value === objId) { 123 | this.innerHTML = newRepr; 124 | this.value = newId; 125 | } 126 | }); 127 | win.close(); 128 | } 129 | 130 | function dismissDeleteRelatedObjectPopup(win, objId) { 131 | objId = html_unescape(objId); 132 | var id = windowname_to_id(win.name).replace(/^delete_/, ''); 133 | var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); 134 | var selects = django.jQuery(selectsSelector); 135 | selects.find('option').each(function() { 136 | if (this.value === objId) { 137 | django.jQuery(this).remove(); 138 | } 139 | }).trigger('change'); 140 | win.close(); 141 | } 142 | 143 | // Global for testing purposes 144 | window.html_unescape = html_unescape; 145 | window.id_to_windowname = id_to_windowname; 146 | window.windowname_to_id = windowname_to_id; 147 | 148 | window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; 149 | window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; 150 | window.showRelatedObjectPopup = showRelatedObjectPopup; 151 | window.updateRelatedObjectLinks = updateRelatedObjectLinks; 152 | window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; 153 | window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; 154 | window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; 155 | 156 | // Kept for backward compatibility 157 | window.showAddAnotherPopup = showRelatedObjectPopup; 158 | window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; 159 | 160 | $(document).ready(function() { 161 | $('body').on('click', '.related-widget-wrapper-link', function(e) { 162 | e.preventDefault(); 163 | if (this.href) { 164 | var event = $.Event('django:show-related', {href: this.href}); 165 | $(this).trigger(event); 166 | if (!event.isDefaultPrevented()) { 167 | showRelatedObjectPopup(this); 168 | } 169 | } 170 | }); 171 | $('body').on('change', '.related-widget-wrapper select', function(e) { 172 | var event = $.Event('django:update-related'); 173 | $(this).trigger(event); 174 | if (!event.isDefaultPrevented()) { 175 | updateRelatedObjectLinks(this); 176 | } 177 | }); 178 | $('.related-widget-wrapper select').trigger('change'); 179 | }); 180 | 181 | })(django.jQuery); 182 | -------------------------------------------------------------------------------- /static/admin/js/calendar.js: -------------------------------------------------------------------------------- 1 | /*global gettext, get_format, quickElement, removeChildren*/ 2 | /* 3 | calendar.js - Calendar functions by Adrian Holovaty 4 | depends on core.js for utility functions like removeChildren or quickElement 5 | */ 6 | 7 | (function() { 8 | 'use strict'; 9 | // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions 10 | var CalendarNamespace = { 11 | monthsOfYear: gettext('January February March April May June July August September October November December').split(' '), 12 | daysOfWeek: gettext('S M T W T F S').split(' '), 13 | firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), 14 | isLeapYear: function(year) { 15 | return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); 16 | }, 17 | getDaysInMonth: function(month, year) { 18 | var days; 19 | if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { 20 | days = 31; 21 | } 22 | else if (month === 4 || month === 6 || month === 9 || month === 11) { 23 | days = 30; 24 | } 25 | else if (month === 2 && CalendarNamespace.isLeapYear(year)) { 26 | days = 29; 27 | } 28 | else { 29 | days = 28; 30 | } 31 | return days; 32 | }, 33 | draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 34 | var today = new Date(); 35 | var todayDay = today.getDate(); 36 | var todayMonth = today.getMonth() + 1; 37 | var todayYear = today.getFullYear(); 38 | var todayClass = ''; 39 | 40 | // Use UTC functions here because the date field does not contain time 41 | // and using the UTC function variants prevent the local time offset 42 | // from altering the date, specifically the day field. For example: 43 | // 44 | // ``` 45 | // var x = new Date('2013-10-02'); 46 | // var day = x.getDate(); 47 | // ``` 48 | // 49 | // The day variable above will be 1 instead of 2 in, say, US Pacific time 50 | // zone. 51 | var isSelectedMonth = false; 52 | if (typeof selected !== 'undefined') { 53 | isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); 54 | } 55 | 56 | month = parseInt(month); 57 | year = parseInt(year); 58 | var calDiv = document.getElementById(div_id); 59 | removeChildren(calDiv); 60 | var calTable = document.createElement('table'); 61 | quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); 62 | var tableBody = quickElement('tbody', calTable); 63 | 64 | // Draw days-of-week header 65 | var tableRow = quickElement('tr', tableBody); 66 | for (var i = 0; i < 7; i++) { 67 | quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); 68 | } 69 | 70 | var startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); 71 | var days = CalendarNamespace.getDaysInMonth(month, year); 72 | 73 | var nonDayCell; 74 | 75 | // Draw blanks before first of month 76 | tableRow = quickElement('tr', tableBody); 77 | for (i = 0; i < startingPos; i++) { 78 | nonDayCell = quickElement('td', tableRow, ' '); 79 | nonDayCell.className = "nonday"; 80 | } 81 | 82 | // Draw days of month 83 | var currentDay = 1; 84 | for (i = startingPos; currentDay <= days; i++) { 85 | if (i % 7 === 0 && currentDay !== 1) { 86 | tableRow = quickElement('tr', tableBody); 87 | } 88 | if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { 89 | todayClass = 'today'; 90 | } else { 91 | todayClass = ''; 92 | } 93 | 94 | // use UTC function; see above for explanation. 95 | if (isSelectedMonth && currentDay === selected.getUTCDate()) { 96 | if (todayClass !== '') { 97 | todayClass += " "; 98 | } 99 | todayClass += "selected"; 100 | } 101 | 102 | var cell = quickElement('td', tableRow, '', 'class', todayClass); 103 | 104 | quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '(' + year + ',' + month + ',' + currentDay + '));'); 105 | currentDay++; 106 | } 107 | 108 | // Draw blanks after end of month (optional, but makes for valid code) 109 | while (tableRow.childNodes.length < 7) { 110 | nonDayCell = quickElement('td', tableRow, ' '); 111 | nonDayCell.className = "nonday"; 112 | } 113 | 114 | calDiv.appendChild(calTable); 115 | } 116 | }; 117 | 118 | // Calendar -- A calendar instance 119 | function Calendar(div_id, callback, selected) { 120 | // div_id (string) is the ID of the element in which the calendar will 121 | // be displayed 122 | // callback (string) is the name of a JavaScript function that will be 123 | // called with the parameters (year, month, day) when a day in the 124 | // calendar is clicked 125 | this.div_id = div_id; 126 | this.callback = callback; 127 | this.today = new Date(); 128 | this.currentMonth = this.today.getMonth() + 1; 129 | this.currentYear = this.today.getFullYear(); 130 | if (typeof selected !== 'undefined') { 131 | this.selected = selected; 132 | } 133 | } 134 | Calendar.prototype = { 135 | drawCurrent: function() { 136 | CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); 137 | }, 138 | drawDate: function(month, year, selected) { 139 | this.currentMonth = month; 140 | this.currentYear = year; 141 | 142 | if(selected) { 143 | this.selected = selected; 144 | } 145 | 146 | this.drawCurrent(); 147 | }, 148 | drawPreviousMonth: function() { 149 | if (this.currentMonth === 1) { 150 | this.currentMonth = 12; 151 | this.currentYear--; 152 | } 153 | else { 154 | this.currentMonth--; 155 | } 156 | this.drawCurrent(); 157 | }, 158 | drawNextMonth: function() { 159 | if (this.currentMonth === 12) { 160 | this.currentMonth = 1; 161 | this.currentYear++; 162 | } 163 | else { 164 | this.currentMonth++; 165 | } 166 | this.drawCurrent(); 167 | }, 168 | drawPreviousYear: function() { 169 | this.currentYear--; 170 | this.drawCurrent(); 171 | }, 172 | drawNextYear: function() { 173 | this.currentYear++; 174 | this.drawCurrent(); 175 | } 176 | }; 177 | window.Calendar = Calendar; 178 | })(); 179 | -------------------------------------------------------------------------------- /static/admin/js/collapse.js: -------------------------------------------------------------------------------- 1 | /*global gettext*/ 2 | (function($) { 3 | 'use strict'; 4 | $(document).ready(function() { 5 | // Add anchor tag for Show/Hide link 6 | $("fieldset.collapse").each(function(i, elem) { 7 | // Don't hide if fields in this fieldset have errors 8 | if ($(elem).find("div.errors").length === 0) { 9 | $(elem).addClass("collapsed").find("h2").first().append(' (' + gettext("Show") + 11 | ')'); 12 | } 13 | }); 14 | // Add toggle to anchor tag 15 | $("fieldset.collapse a.collapse-toggle").click(function(ev) { 16 | if ($(this).closest("fieldset").hasClass("collapsed")) { 17 | // Show 18 | $(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); 19 | } else { 20 | // Hide 21 | $(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); 22 | } 23 | return false; 24 | }); 25 | }); 26 | })(django.jQuery); 27 | -------------------------------------------------------------------------------- /static/admin/js/collapse.min.js: -------------------------------------------------------------------------------- 1 | (function(a){a(document).ready(function(){a("fieldset.collapse").each(function(b,c){0===a(c).find("div.errors").length&&a(c).addClass("collapsed").find("h2").first().append(' ('+gettext("Show")+")")});a("fieldset.collapse a.collapse-toggle").click(function(b){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", 2 | [a(this).attr("id")]);return!1})})})(django.jQuery); 3 | -------------------------------------------------------------------------------- /static/admin/js/core.js: -------------------------------------------------------------------------------- 1 | // Core javascript helper functions 2 | 3 | // basic browser identification & version 4 | var isOpera = (navigator.userAgent.indexOf("Opera") >= 0) && parseFloat(navigator.appVersion); 5 | var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); 6 | 7 | // Cross-browser event handlers. 8 | function addEvent(obj, evType, fn) { 9 | 'use strict'; 10 | if (obj.addEventListener) { 11 | obj.addEventListener(evType, fn, false); 12 | return true; 13 | } else if (obj.attachEvent) { 14 | var r = obj.attachEvent("on" + evType, fn); 15 | return r; 16 | } else { 17 | return false; 18 | } 19 | } 20 | 21 | function removeEvent(obj, evType, fn) { 22 | 'use strict'; 23 | if (obj.removeEventListener) { 24 | obj.removeEventListener(evType, fn, false); 25 | return true; 26 | } else if (obj.detachEvent) { 27 | obj.detachEvent("on" + evType, fn); 28 | return true; 29 | } else { 30 | return false; 31 | } 32 | } 33 | 34 | function cancelEventPropagation(e) { 35 | 'use strict'; 36 | if (!e) { 37 | e = window.event; 38 | } 39 | e.cancelBubble = true; 40 | if (e.stopPropagation) { 41 | e.stopPropagation(); 42 | } 43 | } 44 | 45 | // quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); 46 | function quickElement() { 47 | 'use strict'; 48 | var obj = document.createElement(arguments[0]); 49 | if (arguments[2]) { 50 | var textNode = document.createTextNode(arguments[2]); 51 | obj.appendChild(textNode); 52 | } 53 | var len = arguments.length; 54 | for (var i = 3; i < len; i += 2) { 55 | obj.setAttribute(arguments[i], arguments[i + 1]); 56 | } 57 | arguments[1].appendChild(obj); 58 | return obj; 59 | } 60 | 61 | // "a" is reference to an object 62 | function removeChildren(a) { 63 | 'use strict'; 64 | while (a.hasChildNodes()) { 65 | a.removeChild(a.lastChild); 66 | } 67 | } 68 | 69 | // ---------------------------------------------------------------------------- 70 | // Cross-browser xmlhttp object 71 | // from http://jibbering.com/2002/4/httprequest.html 72 | // ---------------------------------------------------------------------------- 73 | var xmlhttp; 74 | /*@cc_on @*/ 75 | /*@if (@_jscript_version >= 5) 76 | try { 77 | xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 78 | } catch (e) { 79 | try { 80 | xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 81 | } catch (E) { 82 | xmlhttp = false; 83 | } 84 | } 85 | @else 86 | xmlhttp = false; 87 | @end @*/ 88 | if (!xmlhttp && typeof XMLHttpRequest !== 'undefined') { 89 | xmlhttp = new XMLHttpRequest(); 90 | } 91 | 92 | // ---------------------------------------------------------------------------- 93 | // Find-position functions by PPK 94 | // See http://www.quirksmode.org/js/findpos.html 95 | // ---------------------------------------------------------------------------- 96 | function findPosX(obj) { 97 | 'use strict'; 98 | var curleft = 0; 99 | if (obj.offsetParent) { 100 | while (obj.offsetParent) { 101 | curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); 102 | obj = obj.offsetParent; 103 | } 104 | // IE offsetParent does not include the top-level 105 | if (isIE && obj.parentElement) { 106 | curleft += obj.offsetLeft - obj.scrollLeft; 107 | } 108 | } else if (obj.x) { 109 | curleft += obj.x; 110 | } 111 | return curleft; 112 | } 113 | 114 | function findPosY(obj) { 115 | 'use strict'; 116 | var curtop = 0; 117 | if (obj.offsetParent) { 118 | while (obj.offsetParent) { 119 | curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); 120 | obj = obj.offsetParent; 121 | } 122 | // IE offsetParent does not include the top-level 123 | if (isIE && obj.parentElement) { 124 | curtop += obj.offsetTop - obj.scrollTop; 125 | } 126 | } else if (obj.y) { 127 | curtop += obj.y; 128 | } 129 | return curtop; 130 | } 131 | 132 | //----------------------------------------------------------------------------- 133 | // Date object extensions 134 | // ---------------------------------------------------------------------------- 135 | (function() { 136 | 'use strict'; 137 | Date.prototype.getTwelveHours = function() { 138 | var hours = this.getHours(); 139 | if (hours === 0) { 140 | return 12; 141 | } 142 | else { 143 | return hours <= 12 ? hours : hours - 12; 144 | } 145 | }; 146 | 147 | Date.prototype.getTwoDigitMonth = function() { 148 | return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); 149 | }; 150 | 151 | Date.prototype.getTwoDigitDate = function() { 152 | return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); 153 | }; 154 | 155 | Date.prototype.getTwoDigitTwelveHour = function() { 156 | return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); 157 | }; 158 | 159 | Date.prototype.getTwoDigitHour = function() { 160 | return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); 161 | }; 162 | 163 | Date.prototype.getTwoDigitMinute = function() { 164 | return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); 165 | }; 166 | 167 | Date.prototype.getTwoDigitSecond = function() { 168 | return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); 169 | }; 170 | 171 | Date.prototype.getHourMinute = function() { 172 | return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); 173 | }; 174 | 175 | Date.prototype.getHourMinuteSecond = function() { 176 | return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); 177 | }; 178 | 179 | Date.prototype.strftime = function(format) { 180 | var fields = { 181 | c: this.toString(), 182 | d: this.getTwoDigitDate(), 183 | H: this.getTwoDigitHour(), 184 | I: this.getTwoDigitTwelveHour(), 185 | m: this.getTwoDigitMonth(), 186 | M: this.getTwoDigitMinute(), 187 | p: (this.getHours() >= 12) ? 'PM' : 'AM', 188 | S: this.getTwoDigitSecond(), 189 | w: '0' + this.getDay(), 190 | x: this.toLocaleDateString(), 191 | X: this.toLocaleTimeString(), 192 | y: ('' + this.getFullYear()).substr(2, 4), 193 | Y: '' + this.getFullYear(), 194 | '%': '%' 195 | }; 196 | var result = '', i = 0; 197 | while (i < format.length) { 198 | if (format.charAt(i) === '%') { 199 | result = result + fields[format.charAt(i + 1)]; 200 | ++i; 201 | } 202 | else { 203 | result = result + format.charAt(i); 204 | } 205 | ++i; 206 | } 207 | return result; 208 | }; 209 | 210 | // ---------------------------------------------------------------------------- 211 | // String object extensions 212 | // ---------------------------------------------------------------------------- 213 | String.prototype.pad_left = function(pad_length, pad_string) { 214 | var new_string = this; 215 | for (var i = 0; new_string.length < pad_length; i++) { 216 | new_string = pad_string + new_string; 217 | } 218 | return new_string; 219 | }; 220 | 221 | String.prototype.strptime = function(format) { 222 | var split_format = format.split(/[.\-/]/); 223 | var date = this.split(/[.\-/]/); 224 | var i = 0; 225 | var day, month, year; 226 | while (i < split_format.length) { 227 | switch (split_format[i]) { 228 | case "%d": 229 | day = date[i]; 230 | break; 231 | case "%m": 232 | month = date[i] - 1; 233 | break; 234 | case "%Y": 235 | year = date[i]; 236 | break; 237 | case "%y": 238 | year = date[i]; 239 | break; 240 | } 241 | ++i; 242 | } 243 | return new Date(year, month, day); 244 | }; 245 | 246 | })(); 247 | // ---------------------------------------------------------------------------- 248 | // Get the computed style for and element 249 | // ---------------------------------------------------------------------------- 250 | function getStyle(oElm, strCssRule) { 251 | 'use strict'; 252 | var strValue = ""; 253 | if(document.defaultView && document.defaultView.getComputedStyle) { 254 | strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); 255 | } 256 | else if(oElm.currentStyle) { 257 | strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { 258 | return p1.toUpperCase(); 259 | }); 260 | strValue = oElm.currentStyle[strCssRule]; 261 | } 262 | return strValue; 263 | } 264 | -------------------------------------------------------------------------------- /static/admin/js/inlines.min.js: -------------------------------------------------------------------------------- 1 | (function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),e=b(this);d=e.parent();var k=function(a,f,l){var c=new RegExp("("+f+"-(\\d+|__prefix__))");f=f+"-"+l;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(c,f));a.id&&(a.id=a.id.replace(c,f));a.name&&(a.name=a.name.replace(c,f))},h=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),l=parseInt(h.val(),10),f=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),c=""===f.val()||0'+a.addText+""),m=d.find("tr:last a")):(e.filter(":last").after('
'+a.addText+"
"),m=e.filter(":last").next().find("a"));m.click(function(c){c.preventDefault();c=b("#"+a.prefix+ 3 | "-empty");var g=c.clone(!0);g.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+l);g.is("tr")?g.children(":last").append('
'+a.deleteText+"
"):g.is("ul")||g.is("ol")?g.append('
  • '+a.deleteText+"
  • "):g.children(":first").append(''+a.deleteText+"");g.find("*").each(function(){k(this, 4 | a.prefix,h.val())});g.insertBefore(b(c));b(h).val(parseInt(h.val(),10)+1);l+=1;""!==f.val()&&0>=f.val()-h.val()&&m.parent().hide();g.find("a."+a.deleteCssClass).click(function(c){c.preventDefault();g.remove();--l;a.removed&&a.removed(g);b(document).trigger("formset:removed",[g,a.prefix]);c=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(c.length);(""===f.val()||0 0) { 26 | values.push(field.val()); 27 | } 28 | }); 29 | prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); 30 | }; 31 | 32 | prepopulatedField.data('_changed', false); 33 | prepopulatedField.change(function() { 34 | prepopulatedField.data('_changed', true); 35 | }); 36 | 37 | if (!prepopulatedField.val()) { 38 | $(dependencies.join(',')).keyup(populate).change(populate).focus(populate); 39 | } 40 | }); 41 | }; 42 | })(django.jQuery); 43 | -------------------------------------------------------------------------------- /static/admin/js/prepopulate.min.js: -------------------------------------------------------------------------------- 1 | (function(c){c.fn.prepopulate=function(e,f,g){return this.each(function(){var a=c(this),b=function(){if(!a.data("_changed")){var b=[];c.each(e,function(a,d){d=c(d);0 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /teknikservistakibi/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /teknikservistakibi/settings.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | 4 | # Projenin bulunduğu klasöre ulaşmak için değişken 5 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 6 | 7 | 8 | # Hataların ekrana yansıtılması 9 | DEBUG = True 10 | 11 | #Çalışılacak domain isimler listesi 12 | ALLOWED_HOSTS = ['192.168.2.168', '127.0.0.1'] 13 | 14 | # Veritabanı seçimi, ayarları 15 | DATABASES = { 16 | 'default': { 17 | 'ENGINE': 'django.db.backends.sqlite3', 18 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 19 | } 20 | } 21 | 22 | 23 | #Kurulu uygulamalar. Yazdığımız uygulamaların listesi. Öncelik sırası var. 24 | INSTALLED_APPS = [ 25 | 'django.contrib.admin', 26 | 'django.contrib.auth', 27 | 'django.contrib.contenttypes', 28 | 'django.contrib.sessions', 29 | 'django.contrib.messages', 30 | 'django.contrib.staticfiles', 31 | 'servisformu' 32 | ] 33 | 34 | # Tüm projede geçerli olacak kodlar. Sıralamaya göre öncelik middleware lerdedi. 35 | MIDDLEWARE_CLASSES = [ 36 | 'django.middleware.security.SecurityMiddleware', 37 | 'django.contrib.sessions.middleware.SessionMiddleware', 38 | 'django.middleware.common.CommonMiddleware', 39 | 'django.middleware.csrf.CsrfViewMiddleware', 40 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 41 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 42 | 'django.contrib.messages.middleware.MessageMiddleware', 43 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 44 | ] 45 | 46 | # urls.py dosyası 47 | ROOT_URLCONF = 'teknikservistakibi.urls' 48 | 49 | # Html dosyaları içinde gönderilecek veriler, ayarlar vs.. 50 | TEMPLATES = [ 51 | { 52 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 53 | 'DIRS': [os.path.join(BASE_DIR, 'templates')], 54 | 'APP_DIRS': True, 55 | 'OPTIONS': { 56 | 'context_processors': [ 57 | 'django.template.context_processors.debug', 58 | 'django.template.context_processors.request', 59 | 'django.contrib.auth.context_processors.auth', 60 | 'django.contrib.messages.context_processors.messages', 61 | ], 62 | }, 63 | }, 64 | ] 65 | 66 | # Http serverlar için wsgi dosya adı ve uygulaması 67 | WSGI_APPLICATION = 'teknikservistakibi.wsgi.application' 68 | 69 | 70 | 71 | 72 | # Yetkilerde geçerli olan şifreleme yöntemleri 73 | AUTH_PASSWORD_VALIDATORS = [ 74 | { 75 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 76 | }, 77 | { 78 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 79 | }, 80 | # { 81 | # 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 82 | # }, 83 | # { 84 | # 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 85 | # }, 86 | ] 87 | 88 | 89 | # Uluslararasılaşma 90 | # https://docs.djangoproject.com/en/1.9/topics/i18n/ 91 | LANGUAGE_CODE = 'tr_TR' 92 | TIME_ZONE = 'Europe/Istanbul' 93 | USE_I18N = True 94 | USE_L10N = True 95 | USE_TZ = True 96 | 97 | 98 | # Statik dosyaları (CSS, JavaScript, Resimler) 99 | # https://docs.djangoproject.com/en/1.9/howto/static-files/ 100 | MEDIA_ROOT = BASE_DIR + '/media/' 101 | MEDIA_URL = '/media/' 102 | 103 | STATIC_ROOT = BASE_DIR + "/static/" 104 | STATIC_URL = '/static/' 105 | 106 | 107 | # Gizli kod. İleride gerekecek. 108 | SECRET_KEY = '9f5$6e&r&x3*_a%j1ocv*p3aftgkl1y5n&)+^jehhc@&z%@@8p' 109 | 110 | 111 | -------------------------------------------------------------------------------- /teknikservistakibi/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | from django.conf.urls import url 3 | from django.contrib import admin 4 | from django.conf.urls.static import static 5 | from django.views.generic import TemplateView 6 | 7 | from servisformu.views import sayfayiyazdir, formdurumusorgula, xmlcikart, test 8 | 9 | 10 | 11 | 12 | urlpatterns = [ 13 | url(r'^$', TemplateView.as_view(template_name="index.html")), 14 | 15 | url(r'^test/$', test), 16 | # url(r'^test/$', TemplateView.as_view(template_name="test.html")), 17 | 18 | url(r'^kn/$', formdurumusorgula, name='formdurumusorgula'), 19 | 20 | url(r'^xml/$', xmlcikart, name='xml'), 21 | url(r'^urunler\.xml$', xmlcikart, name='urunlerxml'), 22 | url(r'^sitemap\.xml', TemplateView.as_view(template_name='sitemap.xml', content_type='application/xml')), 23 | url(r'^robots\.txt', TemplateView.as_view(template_name='robots.txt', content_type='text/plain')), 24 | url(r'^yazdir/([\w\-]+)/$', sayfayiyazdir, name='sayfayiyazdir'), 25 | 26 | url(r'^admin/', admin.site.urls), 27 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 28 | 29 | -------------------------------------------------------------------------------- /teknikservistakibi/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for teknikservistakibi project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "teknikservistakibi.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /templates/admin/404.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %}{% trans 'Page not found' %}{% endblock %} 5 | 6 | {% block content %} 7 | 8 |

    {% trans 'Page not found' %}

    9 | 10 |

    {% trans "We're sorry, but the requested page could not be found." %}

    11 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /templates/admin/500.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n %} 3 | 4 | {% block breadcrumbs %} 5 | 9 | {% endblock %} 10 | 11 | {% block title %}{% trans 'Server error (500)' %}{% endblock %} 12 | 13 | {% block content %} 14 |

    {% trans 'Server Error (500)' %}

    15 |

    {% trans "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience." %}

    16 | 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /templates/admin/actions.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |
    3 | {% for field in action_form %}{% if field.label %}{% endif %}{% endfor %} 4 | 5 | {% if actions_selection_counter %} 6 | 7 | {{ selection_note }} 8 | {% if cl.result_count != cl.result_list|length %} 9 | {{ selection_note_all }} 10 | 11 | {% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %} 12 | 13 | {% trans "Clear selection" %} 14 | {% endif %} 15 | {% endif %} 16 |
    17 | -------------------------------------------------------------------------------- /templates/admin/app_index.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/index.html" %} 2 | {% load i18n %} 3 | 4 | {% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %} 5 | 6 | {% if not is_popup %} 7 | {% block breadcrumbs %} 8 | 15 | {% endblock %} 16 | {% endif %} 17 | 18 | {% block sidebar %}{% endblock %} 19 | -------------------------------------------------------------------------------- /templates/admin/auth/user/add_form.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/change_form.html" %} 2 | {% load i18n %} 3 | 4 | {% block form_top %} 5 | {% if not is_popup %} 6 |

    {% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}

    7 | {% else %} 8 |

    {% trans "Enter a username and password." %}

    9 | {% endif %} 10 | {% endblock %} 11 | 12 | {% block after_field_sets %} 13 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /templates/admin/auth/user/change_password.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_static %} 3 | {% load admin_urls %} 4 | 5 | {% block extrahead %}{{ block.super }} 6 | 7 | {% endblock %} 8 | {% block extrastyle %}{{ block.super }}{% endblock %} 9 | {% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} 10 | {% if not is_popup %} 11 | {% block breadcrumbs %} 12 | 19 | {% endblock %} 20 | {% endif %} 21 | {% block content %}
    22 |
    {% csrf_token %}{% block form_top %}{% endblock %} 23 |
    24 | {% if is_popup %}{% endif %} 25 | {% if form.errors %} 26 |

    27 | {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} 28 |

    29 | {% endif %} 30 | 31 |

    {% blocktrans with username=original %}Enter a new password for the user {{ username }}.{% endblocktrans %}

    32 | 33 |
    34 | 35 |
    36 | {{ form.password1.errors }} 37 | {{ form.password1.label_tag }} {{ form.password1 }} 38 | {% if form.password1.help_text %} 39 |

    {{ form.password1.help_text|safe }}

    40 | {% endif %} 41 |
    42 | 43 |
    44 | {{ form.password2.errors }} 45 | {{ form.password2.label_tag }} {{ form.password2 }} 46 | {% if form.password2.help_text %} 47 |

    {{ form.password2.help_text|safe }}

    48 | {% endif %} 49 |
    50 | 51 |
    52 | 53 |
    54 | 55 |
    56 | 57 | 58 |
    59 |
    60 | {% endblock %} 61 | -------------------------------------------------------------------------------- /templates/admin/base.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_static %} 2 | {% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} 3 | 4 | 5 | {% block title %}{% endblock %} 6 | 7 | {% block extrastyle %}{% endblock %} 8 | {% if LANGUAGE_BIDI %}{% endif %} 9 | {% block extrahead %}{% endblock %} 10 | {% block blockbots %}{% endblock %} 11 | 12 | {% load i18n %} 13 | 14 | 16 | 17 | 18 |
    19 | 20 | {% if not is_popup %} 21 | 22 | 53 | 54 | {% block breadcrumbs %} 55 | 59 | {% endblock %} 60 | {% endif %} 61 | 62 | {% block messages %} 63 | {% if messages %} 64 |
      {% for message in messages %} 65 | {{ message|capfirst }} 66 | {% endfor %}
    67 | {% endif %} 68 | {% endblock messages %} 69 | 70 | 71 |
    72 | {% block pretitle %}{% endblock %} 73 | {% block content_title %}{% if title %}

    {{ title }}

    {% endif %}{% endblock %} 74 | {% block content %} 75 | {% block object-tools %}{% endblock %} 76 | {{ content }} 77 | {% endblock %} 78 | {% block sidebar %}{% endblock %} 79 |
    80 |
    81 | 82 | 83 | {% block footer %}{% endblock %} 84 |
    85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /templates/admin/base_site.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base.html" %} 2 | 3 | {% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }} {% endblock %} 4 | 5 | {% block branding %} 6 |

    {{ site_header|default:_('Django administration') }}

    7 | {% endblock %} 8 | 9 | {% block nav-global %}{% endblock %} 10 | -------------------------------------------------------------------------------- /templates/admin/change_form.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_urls admin_static admin_modify %} 3 | 4 | {% block extrahead %}{{ block.super }} 5 | 6 | {{ media }} 7 | {% endblock %} 8 | 9 | {% block extrastyle %}{{ block.super }}{% endblock %} 10 | 11 | {% block coltype %}colM{% endblock %} 12 | 13 | {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %} 14 | 15 | {% if not is_popup %} 16 | {% block breadcrumbs %} 17 | 23 | {% endblock %} 24 | {% endif %} 25 | 26 | {% block content %}
    27 | {% block object-tools %} 28 | {% if change %}{% if not is_popup %} 29 |
      30 | {% block object-tools-items %} 31 |
    • 32 | {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} 33 | {% trans "History" %} 34 |
    • 35 | {% if has_absolute_url %}
    • {% trans "View on site" %}
    • {% endif %} 36 | {% endblock %} 37 |
    38 | {% endif %}{% endif %} 39 | {% endblock %} 40 |
    {% csrf_token %}{% block form_top %}{% endblock %} 41 |
    42 | {% if is_popup %}{% endif %} 43 | {% if to_field %}{% endif %} 44 | {% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %} 45 | {% if errors %} 46 |

    47 | {% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} 48 |

    49 | {{ adminform.form.non_field_errors }} 50 | {% endif %} 51 | 52 | {% block field_sets %} 53 | {% for fieldset in adminform %} 54 | {% include "admin/includes/fieldset.html" %} 55 | {% endfor %} 56 | {% endblock %} 57 | 58 | {% block after_field_sets %}{% endblock %} 59 | 60 | {% block inline_field_sets %} 61 | {% for inline_admin_formset in inline_admin_formsets %} 62 | {% include inline_admin_formset.opts.template %} 63 | {% endfor %} 64 | {% endblock %} 65 | 66 | {% block after_related_objects %}{% endblock %} 67 | 68 | {% block submit_buttons_bottom %}{% submit_row %}{% endblock %} 69 | 70 | {% block admin_change_form_document_ready %} 71 | 97 | {% endblock %} 98 | 99 | {# JavaScript for prepopulated fields #} 100 | {% prepopulated_fields_js %} 101 | 102 |
    103 |
    104 | {% endblock %} 105 | -------------------------------------------------------------------------------- /templates/admin/change_list.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_urls admin_static admin_list %} 3 | 4 | {% block extrastyle %} 5 | {{ block.super }} 6 | 7 | {% if cl.formset %} 8 | 9 | {% endif %} 10 | {% if cl.formset or action_form %} 11 | 12 | {% endif %} 13 | {{ media.css }} 14 | {% if not actions_on_top and not actions_on_bottom %} 15 | 18 | {% endif %} 19 | {% endblock %} 20 | 21 | {% block extrahead %} 22 | {{ block.super }} 23 | {{ media.js }} 24 | {% if action_form %}{% if actions_on_top or actions_on_bottom %} 25 | 32 | {% endif %}{% endif %} 33 | {% endblock %} 34 | 35 | {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %} 36 | 37 | {% if not is_popup %} 38 | {% block breadcrumbs %} 39 | 44 | {% endblock %} 45 | {% endif %} 46 | 47 | {% block coltype %}flex{% endblock %} 48 | 49 | {% block content %} 50 |
    51 | {% block object-tools %} 52 | {% if has_add_permission %} 53 | 63 | {% endif %} 64 | {% endblock %} 65 | {% if cl.formset.errors %} 66 |

    67 | {% if cl.formset.total_error_count == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} 68 |

    69 | {{ cl.formset.non_form_errors }} 70 | {% endif %} 71 |
    72 | {% block search %}{% search_form cl %}{% endblock %} 73 | {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %} 74 | 75 | {% block filters %} 76 | {% if cl.has_filters %} 77 |
    78 |

    {% trans 'Filter' %}

    79 | {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %} 80 |
    81 | {% endif %} 82 | {% endblock %} 83 | 84 |
    {% csrf_token %} 85 | {% if cl.formset %} 86 |
    {{ cl.formset.management_form }}
    87 | {% endif %} 88 | 89 | {% block result_list %} 90 | {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %} 91 | {% result_list cl %} 92 | {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %} 93 | {% endblock %} 94 | {% block pagination %}{% pagination cl %}{% endblock %} 95 |
    96 |
    97 |
    98 | {% endblock %} 99 | -------------------------------------------------------------------------------- /templates/admin/change_list_results.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_static %} 2 | {% if result_hidden_fields %} 3 |
    {# DIV for HTML validation #} 4 | {% for item in result_hidden_fields %}{{ item }}{% endfor %} 5 |
    6 | {% endif %} 7 | 8 | 9 | 17 | {% if results %} 18 |
    19 | 20 |

    {{ results|length }} adet kayıt bulundu!

    21 | 22 | 23 | 24 | 25 | {% for header in result_headers %} 26 | {% endfor %} 45 | 46 | 47 | 48 | {% for result in results %} 49 | {% if result.form.non_field_errors %} 50 | 51 | 52 | 53 | {% endif %} 54 | {% for item in result %}{{ item }}{% endfor %} 55 | {% endfor %} 56 | 57 |
    27 | {% if header.sortable %} 28 | {% if header.sort_priority > 0 %} 29 |
    30 | 32 | {% if num_sorted_fields > 1 %}{{ header.sort_priority }}{% endif %} 34 | 37 |
    38 | {% endif %} 39 | {% endif %} 40 |
    {% if header.sortable %} 41 | {{ header.text|capfirst }}{% else %} 42 | {{ header.text|capfirst }}{% endif %}
    43 |
    44 |
    {{ result.form.non_field_errors }}
    58 |
    59 | 60 | 61 | {% endif %} 62 | -------------------------------------------------------------------------------- /templates/admin/date_hierarchy.html: -------------------------------------------------------------------------------- 1 | {% if show %} 2 |
    3 |
    9 |
    10 | {% endif %} 11 | -------------------------------------------------------------------------------- /templates/admin/delete_confirmation.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_urls %} 3 | 4 | {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} 5 | 6 | {% block breadcrumbs %} 7 | 14 | {% endblock %} 15 | 16 | {% block content %} 17 | {% if perms_lacking %} 18 |

    {% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

    19 |
      20 | {% for obj in perms_lacking %} 21 |
    • {{ obj }}
    • 22 | {% endfor %} 23 |
    24 | {% elif protected %} 25 |

    {% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}

    26 |
      27 | {% for obj in protected %} 28 |
    • {{ obj }}
    • 29 | {% endfor %} 30 |
    31 | {% else %} 32 |

    {% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}

    33 | {% include "admin/includes/object_delete_summary.html" %} 34 |

    {% trans "Objects" %}

    35 |
      {{ deleted_objects|unordered_list }}
    36 |
    {% csrf_token %} 37 |
    38 | 39 | {% if is_popup %}{% endif %} 40 | {% if to_field %}{% endif %} 41 | 42 | {% trans "No, take me back" %} 43 |
    44 |
    45 | {% endif %} 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /templates/admin/delete_selected_confirmation.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n l10n admin_urls %} 3 | 4 | {% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} 5 | 6 | {% block breadcrumbs %} 7 | 13 | {% endblock %} 14 | 15 | {% block content %} 16 | {% if perms_lacking %} 17 |

    {% blocktrans %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

    18 |
      19 | {% for obj in perms_lacking %} 20 |
    • {{ obj }}
    • 21 | {% endfor %} 22 |
    23 | {% elif protected %} 24 |

    {% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}

    25 |
      26 | {% for obj in protected %} 27 |
    • {{ obj }}
    • 28 | {% endfor %} 29 |
    30 | {% else %} 31 |

    {% blocktrans %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktrans %}

    32 | {% include "admin/includes/object_delete_summary.html" %} 33 |

    {% trans "Objects" %}

    34 | {% for deletable_object in deletable_objects %} 35 |
      {{ deletable_object|unordered_list }}
    36 | {% endfor %} 37 |
    {% csrf_token %} 38 |
    39 | {% for obj in queryset %} 40 | 41 | {% endfor %} 42 | 43 | 44 | 45 | {% trans "No, take me back" %} 46 |
    47 |
    48 | {% endif %} 49 | {% endblock %} 50 | -------------------------------------------------------------------------------- /templates/admin/edit_inline/stacked.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_urls admin_static %} 2 |
    3 |

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    4 | {{ inline_admin_formset.formset.management_form }} 5 | {{ inline_admin_formset.formset.non_form_errors }} 6 | 7 | {% for inline_admin_form in inline_admin_formset %}
    8 |

    {{ inline_admin_formset.opts.verbose_name|capfirst }}: {% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} {% trans "Change" %}{% endif %} 9 | {% else %}#{{ forloop.counter }}{% endif %} 10 | {% if inline_admin_form.show_url %}{% trans "View on site" %}{% endif %} 11 | {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}{% endif %} 12 |

    13 | {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %} 14 | {% for fieldset in inline_admin_form %} 15 | {% include "admin/includes/fieldset.html" %} 16 | {% endfor %} 17 | {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} 18 | {{ inline_admin_form.fk_field.field }} 19 |
    {% endfor %} 20 |
    21 | 22 | 31 | -------------------------------------------------------------------------------- /templates/admin/edit_inline/tabular.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_urls admin_static admin_modify %} 2 |
    3 | 72 |
    73 | 74 | 84 | -------------------------------------------------------------------------------- /templates/admin/filter.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |

    {% blocktrans with filter_title=title %} By {{ filter_title }} {% endblocktrans %}

    3 | 9 | -------------------------------------------------------------------------------- /templates/admin/includes/fieldset.html: -------------------------------------------------------------------------------- 1 |
    2 | {% if fieldset.name %}

    {{ fieldset.name }}

    {% endif %} 3 | {% if fieldset.description %} 4 |
    {{ fieldset.description|safe }}
    5 | {% endif %} 6 | {% for line in fieldset %} 7 |
    8 | {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} 9 | {% for field in line %} 10 | 11 | {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} 12 | {% if field.is_checkbox %} 13 | {{ field.field }}{{ field.label_tag }} 14 | {% else %} 15 | {{ field.label_tag }} 16 | {% if field.is_readonly %} 17 |

    {{ field.contents }}

    18 | {% else %} 19 | {{ field.field }} 20 | {% endif %} 21 | {% endif %} 22 | {% if field.field.help_text %} 23 |

    {{ field.field.help_text|safe }}

    24 | {% endif %} 25 |
    26 | {% endfor %} 27 | 28 | {% endfor %} 29 |
    30 | -------------------------------------------------------------------------------- /templates/admin/includes/object_delete_summary.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |

    {% trans "Summary" %}

    3 |
      4 | {% for model_name, object_count in model_count %} 5 |
    • {{ model_name|capfirst }}: {{ object_count }}
    • 6 | {% endfor %} 7 |
    8 | -------------------------------------------------------------------------------- /templates/admin/index.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_static %} 3 | 4 | {% block extrastyle %}{{ block.super }}{% endblock %} 5 | 6 | {% block coltype %}colMS{% endblock %} 7 | 8 | {% block bodyclass %}{{ block.super }} dashboard{% endblock %} 9 | 10 | {% block breadcrumbs %}{% endblock %} 11 | 12 | {% block content %} 13 |
    14 | 15 | {% if app_list %} 16 | {% for app in app_list %} 17 |
    18 | 19 | 22 | {% for model in app.models %} 23 | 24 | {% if model.admin_url %} 25 | 26 | {% else %} 27 | 28 | {% endif %} 29 | 30 | {% if model.add_url %} 31 | 32 | {% else %} 33 | 34 | {% endif %} 35 | 36 | {% if model.admin_url %} 37 | 38 | {% else %} 39 | 40 | {% endif %} 41 | 42 | {% endfor %} 43 |
    20 | {{ app.name }} 21 |
    {{ model.name }}{{ model.name }}{% trans 'Add' %} {% trans 'Change' %} 
    44 |
    45 | {% endfor %} 46 | {% else %} 47 |

    {% trans "You don't have permission to edit anything." %}

    48 | {% endif %} 49 |
    50 | {% endblock %} 51 | 52 | {% block sidebar %} 53 | 82 | {% endblock %} 83 | -------------------------------------------------------------------------------- /templates/admin/invalid_setup.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n %} 3 | 4 | {% block breadcrumbs %} 5 | 9 | {% endblock %} 10 | 11 | {% block content %} 12 |

    {% trans "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." %}

    13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /templates/admin/login.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_static %} 3 | 4 | {% block extrastyle %}{{ block.super }} 5 | {{ form.media }} 6 | {% endblock %} 7 | 8 | {% block bodyclass %}{{ block.super }} login{% endblock %} 9 | 10 | {% block usertools %}{% endblock %} 11 | 12 | {% block nav-global %}{% endblock %} 13 | 14 | {% block content_title %}{% endblock %} 15 | 16 | {% block breadcrumbs %}{% endblock %} 17 | 18 | {% block content %} 19 | {% if form.errors and not form.non_field_errors %} 20 |

    21 | {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %} 22 |

    23 | {% endif %} 24 | 25 | {% if form.non_field_errors %} 26 | {% for error in form.non_field_errors %} 27 |

    28 | {{ error }} 29 |

    30 | {% endfor %} 31 | {% endif %} 32 | 33 |
    34 | 35 | {% if user.is_authenticated %} 36 |

    37 | {% blocktrans with username=request.user.username trimmed %} 38 | You are authenticated as {{ username }}, but are not authorized to 39 | access this page. Would you like to login to a different account? 40 | {% endblocktrans %} 41 |

    42 | {% endif %} 43 | 44 |
    {% csrf_token %} 45 |
    46 | {{ form.username.errors }} 47 | {{ form.username.label_tag }} {{ form.username }} 48 |
    49 |
    50 | {{ form.password.errors }} 51 | {{ form.password.label_tag }} {{ form.password }} 52 | 53 |
    54 | {% url 'admin_password_reset' as password_reset_url %} 55 | {% if password_reset_url %} 56 | 59 | {% endif %} 60 |
    61 | 62 |
    63 |
    64 | 65 | 68 |
    69 | {% endblock %} 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /templates/admin/object_history.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base_site.html" %} 2 | {% load i18n admin_urls %} 3 | 4 | {% block breadcrumbs %} 5 | 12 | {% endblock %} 13 | 14 | {% block content %} 15 |
    16 |
    17 | 18 | {% if action_list %} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% for action in action_list %} 29 | 30 | 31 | 32 | 33 | 34 | {% endfor %} 35 | 36 |
    {% trans 'Date/time' %}{% trans 'User' %}{% trans 'Action' %}
    {{ action.action_time|date:"DATETIME_FORMAT" }}{{ action.user.get_username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}{{ action.change_message }}
    37 | {% else %} 38 |

    {% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}

    39 | {% endif %} 40 |
    41 |
    42 | {% endblock %} 43 | -------------------------------------------------------------------------------- /templates/admin/pagination.html: -------------------------------------------------------------------------------- 1 | {% load admin_list %} 2 | {% load i18n %} 3 |

    4 | {% if pagination_required %} 5 | {% for i in page_range %} 6 | {% paginator_number cl i %} 7 | {% endfor %} 8 | {% endif %} 9 | {{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %} 10 | {% if show_all_url %}  {% trans 'Show all' %}{% endif %} 11 | {% if cl.formset and cl.result_count %}{% endif %} 12 |

    13 | -------------------------------------------------------------------------------- /templates/admin/popup_response.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 3 | {% trans 'Popup closing...' %} 4 | 5 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /templates/admin/prepopulated_fields_js.html: -------------------------------------------------------------------------------- 1 | {% load l10n %} 2 | 29 | -------------------------------------------------------------------------------- /templates/admin/related_widget_wrapper.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_static %} 2 | 28 | -------------------------------------------------------------------------------- /templates/admin/search_form.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_static %} 2 | {% if cl.search_fields %} 3 |
    16 | 17 | {% endif %} 18 | -------------------------------------------------------------------------------- /templates/admin/submit_line.html: -------------------------------------------------------------------------------- 1 | {% load i18n admin_urls %} 2 |
    3 | {% if show_save %}{% endif %} 4 | {% if show_delete_link %} 5 | {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} 6 | 7 | {% endif %} 8 | {% if show_save_as_new %}{% endif %} 9 | {% if show_save_and_add_another %}{% endif %} 10 | {% if show_save_and_continue %}{% endif %} 11 |
    12 | -------------------------------------------------------------------------------- /templates/formlar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% for k in tumformlar %} 5 |
    6 | 7 | {{ forloop.counter }} 8 | {{ k.FormNo }} 9 | 10 | 11 | 12 | {% for l in k.urunler_set.all %} 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | {% for kk in l.Aksesuar.all %} 22 | 23 | {% endfor %} 24 | 25 | {% endfor %} 26 | 27 |
    28 | {% endfor %} 29 | 30 |
    31 | 32 | -------------------------------------------------------------------------------- /templates/gerekli.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | İzmir Teknik Servis, Servis Formu kontrol, durum öğrenme | izmirteknikservis.tk 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 52 | 53 | 54 | 55 | 56 |
    57 |
    58 | 59 |

    Ana Sayfa | Test

    60 | 61 |
    62 | 63 |
    64 | {% block orta %}{% endblock orta %} 65 |
    66 | 67 |
    Sabit Alt
    68 |
    69 | 70 | 71 | 72 | 73 | 74 | {% block jsozel %}{% endblock jsozel %} 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "gerekli.html" %} 2 | 3 | {% block orta %} 4 |
    5 |
    7 |
    8 |
    9 |
    10 |
    11 | 12 |
    13 |
    14 |
    15 |
    16 | {% endblock orta %} 17 | 18 | {% block jsozel %} 19 | 20 | 54 | 55 | {% endblock %} -------------------------------------------------------------------------------- /templates/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /admin/ 3 | -------------------------------------------------------------------------------- /templates/test.html: -------------------------------------------------------------------------------- 1 | {% extends "gerekli.html" %} 2 | 3 | {% block orta %} 4 |

    Etiketler

    5 | 6 |



    7 | 8 | "{{ string|wordwrap:5 }}" 9 | 10 | 11 | {% endblock orta %} -------------------------------------------------------------------------------- /templates/yazdir.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | İzmir Teknik Servis, Servis Formu kontrol, durum öğrenme | izmirteknikservis.tk 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
    30 | 31 |

    {{ formdurumu.FormNo }}

    32 | 33 |

    {{ formdurumu.Musteri.Unvan|title }} ({{ formdurumu.Musteri.Yetkili|title }}) - {{ formdurumu.KayitTarihi }}

    34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | {% for k in formbilgileri %} 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | {% endfor %} 55 | 56 | 57 | 58 |
    ÜrünSeri NoŞikayetAksesuarNot
    {{ k.Cins|upper }} | {{ k.Marka|upper }} | {{ k.Model|upper }}{{ k.SeriNo|upper }}{{ k.Sikayet|title }}{% for kk in k.Aksesuar.all %}{{ kk|title }} {% endfor %}{{ k.Not }}
    59 | 60 |
    61 | 62 |
    63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 |
    Servise Teslim EdenTeknisyenÜrünü Teslim Alan
    {{ formdurumu.TeslimEden|title }}{{ formdurumu.TeslimAlan|title }}
    75 |
    76 | 77 | 78 | 79 |
    80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
    Bakım ve onarım süresi 3 (üç) aydır.
    Servisimizde asla kaçak yazılım kullanılmamakta ve destek verilmemektedir.
    Tamire gelen cihazların harddisk, yazılım ve yedeklerinden tarafımız sorumlu değildir.
    Servise gelen ürünlerde önceden bildirilmeyen sorunlardan tarafımız sorumlu değildir.
    Servise teslim edilen ürünlerin emanet süresi 30 (otuz) gün olup, sonrasında firmamızın sorumluluğu yoktur.
    Servise gelen cihazların chip değişim ve kalıplanmasında oluşabilecek sorunlarda tarafımız sorumlu değildir.
    91 |
    92 | 93 | 94 | 95 | 96 | --------------------------------------------------------------------------------