Dockerize and switch to postgres

dwg-dir-list
Pete Ley 4 months ago
parent cd3e3d39cc
commit 737299c719

@ -0,0 +1,13 @@
FROM python:3.11.6-slim-bookworm
RUN useradd dwgstatus
EXPOSE 8000
ENV PYTHONUNBUFFERED=1 \
PORT=8000
RUN pip install "gunicorn"
COPY requirements.txt /
RUN pip install -r /requirements.txt
WORKDIR /app
RUN chown dwgstatus:dwgstatus /app
COPY --chown=dwgstatus:dwgstatus . .
USER dwgstatus
CMD set -xe; gunicorn --reload dwgstatus.wsgi:application

@ -0,0 +1,23 @@
services:
web:
build: .
volumes:
- .:/app
depends_on:
- db
restart: always
db:
image: "postgres"
restart: always
environment:
POSTGRES_PASSWORD: postpass
nginx:
image: "nginx"
restart: always
ports:
- 8000:80
volumes:
- ./nginx:/etc/nginx/conf.d
- ./static:/static
depends_on:
- web

@ -81,10 +81,20 @@ WSGI_APPLICATION = "dwgstatus.wsgi.application"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
"ENGINE": "django.db.backends.postgresql",
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postpass',
'HOST': 'db',
'PORT': 5432,
}
}
# DATABASES = {
# "default": {
# "ENGINE": "django.db.backends.sqlite3",
# "NAME": BASE_DIR / "db.sqlite3",
# }
# }
# Password validation

@ -1,616 +1,234 @@
# Generated by Django 4.1.4 on 2023-03-14 17:16
# Generated by Django 4.2.4 on 2024-01-10 15:28
import django.contrib.auth.models
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
import phonenumber_field.modelfields
class Migration(migrations.Migration):
initial = True
dependencies = []
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name="Address",
name='Address',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(default="Jobsite", max_length=100)),
("street_address", models.CharField(max_length=100)),
("street_address2", models.CharField(blank=True, max_length=100)),
("city", models.CharField(max_length=100)),
(
"state",
models.CharField(
choices=[
("AL", "Alabama"),
("AK", "Alaska"),
("AS", "American Samoa"),
("AZ", "Arizona"),
("AR", "Arkansas"),
("AA", "Armed Forces Americas"),
("AE", "Armed Forces Europe"),
("AP", "Armed Forces Pacific"),
("CA", "California"),
("CO", "Colorado"),
("CT", "Connecticut"),
("DE", "Delaware"),
("DC", "District of Columbia"),
("FL", "Florida"),
("GA", "Georgia"),
("GU", "Guam"),
("HI", "Hawaii"),
("ID", "Idaho"),
("IL", "Illinois"),
("IN", "Indiana"),
("IA", "Iowa"),
("KS", "Kansas"),
("KY", "Kentucky"),
("LA", "Louisiana"),
("ME", "Maine"),
("MD", "Maryland"),
("MA", "Massachusetts"),
("MI", "Michigan"),
("MN", "Minnesota"),
("MS", "Mississippi"),
("MO", "Missouri"),
("MT", "Montana"),
("NE", "Nebraska"),
("NV", "Nevada"),
("NH", "New Hampshire"),
("NJ", "New Jersey"),
("NM", "New Mexico"),
("NY", "New York"),
("NC", "North Carolina"),
("ND", "North Dakota"),
("MP", "Northern Mariana Islands"),
("OH", "Ohio"),
("OK", "Oklahoma"),
("OR", "Oregon"),
("PA", "Pennsylvania"),
("PR", "Puerto Rico"),
("RI", "Rhode Island"),
("SC", "South Carolina"),
("SD", "South Dakota"),
("TN", "Tennessee"),
("TX", "Texas"),
("UT", "Utah"),
("VT", "Vermont"),
("VI", "Virgin Islands"),
("VA", "Virginia"),
("WA", "Washington"),
("WV", "West Virginia"),
("WI", "Wisconsin"),
("WY", "Wyoming"),
],
max_length=2,
),
),
("zip_code", models.CharField(max_length=5)),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(default='Jobsite', max_length=100)),
('street_address', models.CharField(max_length=100)),
('city', models.CharField(max_length=100)),
('state', models.CharField(choices=[('AK', 'Alaska'), ('AL', 'Alabama'), ('AR', 'Arkansas'), ('AZ', 'Arizona'), ('CA', 'California'), ('CO', 'Colorado'), ('CT', 'Connecticut'), ('DC', 'District of Columbia'), ('DE', 'Delaware'), ('FL', 'Florida'), ('GA', 'Georgia'), ('HI', 'Hawaii'), ('IA', 'Iowa'), ('ID', 'Idaho'), ('IL', 'Illinois'), ('IN', 'Indiana'), ('KS', 'Kansas'), ('KY', 'Kentucky'), ('LA', 'Louisiana'), ('MA', 'Massachusetts'), ('MD', 'Maryland'), ('ME', 'Maine'), ('MI', 'Michigan'), ('MN', 'Minnesota'), ('MO', 'Missouri'), ('MS', 'Mississippi'), ('MT', 'Montana'), ('NC', 'North Carolina'), ('ND', 'North Dakota'), ('NE', 'Nebraska'), ('NH', 'New Hampshire'), ('NJ', 'New Jersey'), ('NM', 'New Mexico'), ('NV', 'Nevada'), ('NY', 'New York'), ('OH', 'Ohio'), ('OK', 'Oklahoma'), ('OR', 'Oregon'), ('PA', 'Pennsylvania'), ('RI', 'Rhode Island'), ('SC', 'South Carolina'), ('SD', 'South Dakota'), ('TN', 'Tennessee'), ('TX', 'Texas'), ('UT', 'Utah'), ('VA', 'Virginia'), ('VT', 'Vermont'), ('WA', 'Washington'), ('WI', 'Wisconsin'), ('WV', 'West Virginia'), ('WY', 'Wyoming')], max_length=2)),
('zip_code', models.CharField(max_length=5)),
],
options={
"verbose_name_plural": "addresses",
"ordering": ["state", "zip_code", "street_address", "street_address2"],
"unique_together": {
("street_address", "street_address2", "city", "state", "zip_code")
},
'verbose_name_plural': 'addresses',
'ordering': ['state', 'zip_code', 'street_address'],
'unique_together': {('street_address', 'city', 'state', 'zip_code')},
},
),
migrations.CreateModel(
name="Company",
name='Company',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
],
options={
"verbose_name_plural": "companies",
"ordering": ["name"],
'verbose_name_plural': 'companies',
'ordering': ['name'],
},
),
migrations.CreateModel(
name="Contact",
name='Contact',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("email", models.EmailField(blank=True, max_length=254)),
(
"company",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="jobs.company"
),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('email', models.EmailField(blank=True, max_length=254)),
('phone', phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None)),
('job_title', models.CharField(blank=True, max_length=200, null=True)),
('company', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='jobs.company')),
],
options={
"ordering": ["name"],
"abstract": False,
'ordering': ['name'],
'abstract': False,
},
),
migrations.CreateModel(
name="Detailer",
name='Job',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("email", models.EmailField(blank=True, max_length=254)),
('number', models.IntegerField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=100)),
('award_date', models.DateField()),
('modeling', models.BooleanField(default=False, verbose_name='3D modeling included')),
('model_upload', models.CharField(blank=True, max_length=200, verbose_name='3D model upload link')),
('archived', models.BooleanField(default=False)),
('addresses', models.ManyToManyField(blank=True, to='jobs.address')),
('architect', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='architect_jobs', to='jobs.company')),
('contacts', models.ManyToManyField(blank=True, to='jobs.contact')),
('contractor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='contractor_jobs', to='jobs.company')),
('customer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='customer_jobs', to='jobs.company')),
('engineers', models.ManyToManyField(blank=True, related_name='engineer_jobs', to='jobs.company')),
('eor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='eor_jobs', to='jobs.company', verbose_name='engineer of record')),
('installers', models.ManyToManyField(blank=True, related_name='installer_jobs', to='jobs.company')),
],
options={
"ordering": ["name"],
"abstract": False,
'ordering': ['-number'],
},
),
migrations.CreateModel(
name="Job",
name='ProjectManager',
fields=[
("number", models.IntegerField(primary_key=True, serialize=False)),
("name", models.CharField(max_length=100)),
("award_date", models.DateField()),
("modeling", models.BooleanField(verbose_name="3D modeling included")),
(
"model_upload",
models.CharField(
blank=True, max_length=200, verbose_name="3D model upload link"
),
),
("addresses", models.ManyToManyField(blank=True, to="jobs.address")),
(
"architect",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="architect_jobs",
to="jobs.company",
),
),
("contacts", models.ManyToManyField(blank=True, to="jobs.contact")),
(
"contractor",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="contractor_jobs",
to="jobs.company",
),
),
(
"customer",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="customer_jobs",
to="jobs.company",
),
),
(
"engineers",
models.ManyToManyField(
blank=True, related_name="engineer_jobs", to="jobs.company"
),
),
(
"eor",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="eor_jobs",
to="jobs.company",
verbose_name="engineer of record",
),
),
(
"fab_detailers",
models.ManyToManyField(
blank=True, related_name="fab_jobs", to="jobs.detailer"
),
),
(
"installers",
models.ManyToManyField(
blank=True, related_name="installer_jobs", to="jobs.company"
),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('email', models.EmailField(blank=True, max_length=254)),
],
options={
"ordering": ["number"],
'ordering': ['name'],
'abstract': False,
},
),
migrations.CreateModel(
name="ProjectManager",
name='Stair',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("email", models.EmailField(blank=True, max_length=254)),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('alt_name', models.CharField(blank=True, max_length=100, null=True)),
('grid', models.CharField(blank=True, max_length=100)),
('levels', models.CharField(blank=True, max_length=100)),
('flights', models.IntegerField(default=0)),
('stringer_type', models.CharField(choices=[('C', 'C Channel'), ('MC', 'MC Channel'), ('PL', 'Plate'), ('CU', 'Custom')], default='PL', max_length=2)),
('stringer_custom', models.CharField(blank=True, max_length=50)),
('stair_con', models.CharField(choices=[('PF', 'Pan-filled'), ('CP', 'Checker'), ('PC', 'Precast'), ('GT', 'Grating'), ('CU', 'Custom'), ('BO', 'By other')], default='PF', max_length=2, verbose_name='stair construction')),
('stair_con_custom', models.CharField(blank=True, max_length=50, verbose_name='custom stair construction')),
('stair_qt', models.BooleanField(default=False, verbose_name='stair quiet tread')),
('landings', models.IntegerField(default=0)),
('land_con', models.CharField(choices=[('PF', 'Pan-filled'), ('CP', 'Checker'), ('PC', 'Precast'), ('GT', 'Grating'), ('CU', 'Custom'), ('BO', 'By other')], default='PF', max_length=2, verbose_name='landing construction')),
('land_con_custom', models.CharField(blank=True, max_length=50, verbose_name='custom landing construction')),
('land_qt', models.BooleanField(default=False, verbose_name='landing quiet tread')),
('rail_type', models.CharField(choices=[('1', '100 Pipe'), ('2', '200 Pipe'), ('3', '300 Rec Tube'), ('4', '400 Picket'), ('5', '500 Mesh'), ('6', '600 Cable'), ('7', '700 Rod'), ('8', '800 Glass'), ('W', 'Wall rail only'), ('C', 'Custom'), ('B', 'By other')], default='2', max_length=1)),
('rail_type_custom', models.CharField(blank=True, max_length=50)),
('stn', models.CharField(blank=True, max_length=50, verbose_name='STN')),
('stn_note', models.CharField(blank=True, max_length=200, null=True, verbose_name='STN note')),
('finish', models.CharField(choices=[('rodda red oxide', 'Rodda Red Oxide'), ('rodda black', 'Rodda Black'), ('rodda grey', 'Rodda Grey'), ('rodda high solids red oxide', 'Rodda High Solids Red Oxide'), ('rodda high solids black', 'Rodda High Solids Black'), ('rodda high solids grey', 'Rodda High Solids Grey'), ('galvanized', 'Galvanized'), ('custom', 'Custom')], default='rodda red oxide', max_length=50)),
('finish_custom', models.CharField(blank=True, max_length=50)),
('stair_fabs', models.DateField(blank=True, help_text='N/A when 0 flights or flights B/O', null=True, verbose_name='stair fabs done')),
('land_fabs', models.DateField(blank=True, help_text='N/A when 0 lands or lands B/O', null=True, verbose_name='land fabs done')),
('rail_fabs', models.DateField(blank=True, help_text='N/A when rails B/O', null=True, verbose_name='rail fabs done')),
('stairs_shop', models.DateField(blank=True, help_text='N/A when 0 flights or flights B/O', null=True, verbose_name='stairs to shop')),
('lands_shop', models.DateField(blank=True, help_text='N/A when 0 lands or lands B/O', null=True, verbose_name='lands to shop')),
('rails_shop', models.DateField(blank=True, help_text='N/A when rails B/O', null=True, verbose_name='rails to shop')),
('embeds_shop', models.DateField(blank=True, null=True, verbose_name='embeds to shop')),
('embeds_na', models.BooleanField(default=False, verbose_name='Embeds not applicable')),
('on_hold', models.BooleanField(default=False)),
('on_hold_note', models.CharField(blank=True, max_length=200, null=True)),
],
options={
"ordering": ["name"],
"abstract": False,
},
),
migrations.CreateModel(
name="Submittal",
name='Transmittal',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("number", models.IntegerField()),
(
"job",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.CharField(max_length=200)),
('to_engr', models.DateField(verbose_name='sent to engineer')),
('due_from_engr', models.DateField(blank=True, null=True, verbose_name='due from engineer')),
('rec_from_engr', models.DateField(blank=True, null=True, verbose_name='received from engineer')),
('submitted', models.DateField(blank=True, null=True, verbose_name='submitted')),
('rec_from_cust', models.DateField(blank=True, null=True, verbose_name='received from customer')),
('response', models.CharField(blank=True, choices=[('NC', 'Approved'), ('AN', 'Approved as noted'), ('RR', 'Revise and resubmit'), ('U', 'Update')], max_length=2)),
('for_record', models.BooleanField(default=False)),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
('stairs', models.ManyToManyField(to='jobs.stair')),
],
),
migrations.CreateModel(
name="PhoneNumber",
name='Detailer',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(default="Main", max_length=100)),
("number", models.CharField(max_length=25)),
(
"owner",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.contact"
),
),
],
options={
'ordering': ['first_name'],
'proxy': True,
'indexes': [],
'constraints': [],
},
bases=('auth.user',),
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name="JobNote",
name='TransmittalOverride',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("date", models.DateTimeField(auto_now=True)),
("note", models.TextField(max_length=1000)),
(
"job",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('response', models.CharField(choices=[('NC', 'Approved'), ('AN', 'Approved as noted'), ('RR', 'Revise and resubmit'), ('U', 'Update')], max_length=2)),
('stairs', models.ManyToManyField(to='jobs.stair')),
('transmittal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.transmittal')),
],
),
migrations.AddField(
model_name="job",
name="project_manager",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="jobs.projectmanager",
),
migrations.CreateModel(
name='Task',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.CharField(blank=True, max_length=100, null=True)),
('stage', models.CharField(choices=[('SUB', 'Submittal'), ('FAB', 'Fab')], max_length=3)),
('due', models.DateField(blank=True, null=True)),
('done', models.BooleanField(default=False)),
('detailer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='jobs.detailer')),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
('stairs', models.ManyToManyField(to='jobs.stair')),
],
options={
'ordering': ['done', 'due', '-id'],
},
),
migrations.AddField(
model_name="job",
name="sub_detailers",
field=models.ManyToManyField(
blank=True, related_name="sub_jobs", to="jobs.detailer"
),
migrations.CreateModel(
name='Submittal',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('number', models.IntegerField(default=1)),
('name', models.CharField(blank=True, max_length=100, null=True)),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
],
),
migrations.AddField(
model_name="job",
name="archived",
field=models.BooleanField(default=False),
),
migrations.AlterModelOptions(
name="job",
options={"ordering": ["-number"]},
model_name='stair',
name='submittal',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.submittal'),
),
migrations.AlterModelManagers(
name="job",
managers=[
("current", django.db.models.manager.Manager()),
migrations.CreateModel(
name='JobNote',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateTimeField(auto_now=True)),
('note', models.TextField(max_length=1000)),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
],
),
migrations.CreateModel(
name="SubRevision",
name='JobDate',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("number", models.PositiveIntegerField()),
(
"to_engr",
models.DateField(
blank=True, null=True, verbose_name="sent to engineer"
),
),
(
"due_from_engr",
models.DateField(
blank=True, null=True, verbose_name="due from engineer"
),
),
(
"rec_from_engr",
models.DateField(
blank=True, null=True, verbose_name="received from engineer"
),
),
("submitted", models.DateField(blank=True, null=True)),
(
"rec_from_cust",
models.DateField(
blank=True, null=True, verbose_name="received from customer"
),
),
(
"status",
models.CharField(
choices=[
("NS", "Not started"),
("IP", "In progress"),
("SU", "Submitted"),
("RT", "Returned"),
],
max_length=2,
),
),
(
"response",
models.CharField(
blank=True,
choices=[
("NC", "Approved"),
("AN", "Approved as noted"),
("RR", "Revise and resubmit"),
("U", "Update"),
],
max_length=2,
),
),
(
"sub",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="jobs.submittal"
),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('date', models.DateField()),
('description', models.CharField(max_length=200)),
('note', models.CharField(blank=True, max_length=200, null=True)),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
],
),
migrations.AddField(
model_name='job',
name='project_manager',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='jobs.projectmanager'),
),
migrations.CreateModel(
name="Stair",
name='Construction',
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100)),
("grid", models.CharField(blank=True, max_length=100)),
("levels", models.CharField(max_length=100)),
("flights", models.IntegerField()),
(
"stringer_type",
models.CharField(
choices=[
("C", "C Channel"),
("MC", "MC Channel"),
("PL", "Plate"),
("CU", "Custom"),
],
default="PL",
max_length=2,
),
),
("stringer_custom", models.CharField(blank=True, max_length=50)),
(
"stair_con",
models.CharField(
choices=[
("PF", "Pan-filled"),
("CP", "Checker"),
("PC", "Precast"),
("GT", "Grating"),
("CU", "Custom"),
("BO", "By other"),
],
default="PF",
max_length=2,
verbose_name="stair construction",
),
),
(
"stair_con_custom",
models.CharField(
blank=True,
max_length=50,
verbose_name="custom stair construction",
),
),
("stair_qt", models.BooleanField(verbose_name="stair quiet tread")),
("landings", models.IntegerField()),
(
"land_con",
models.CharField(
choices=[
("PF", "Pan-filled"),
("CP", "Checker"),
("PC", "Precast"),
("GT", "Grating"),
("CU", "Custom"),
("BO", "By other"),
],
default="PF",
max_length=2,
verbose_name="landing construction",
),
),
(
"land_con_custom",
models.CharField(
blank=True,
max_length=50,
verbose_name="custom landing construction",
),
),
("land_qt", models.BooleanField(verbose_name="landing quiet tread")),
(
"rail_type",
models.CharField(
choices=[
("1", "100 Pipe"),
("2", "200 Pipe"),
("3", "300 Rec Tube"),
("4", "400 Picket"),
("5", "500 Mesh"),
("6", "600 Cable"),
("7", "700 Rod"),
("8", "800 Glass"),
("C", "Custom"),
("B", "By other"),
],
default="2",
max_length=1,
),
),
("rail_type_custom", models.CharField(blank=True, max_length=50)),
(
"stn",
models.CharField(blank=True, max_length=50, verbose_name="STN"),
),
(
"submittal",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.submittal"
),
),
(
"finish",
models.IntegerField(
choices=[
(1, "Rodda Red Oxide"),
(2, "Rodda Black"),
(3, "Rodda Grey"),
(4, "Rodda High Solids Red Oxide"),
(5, "Rodda High Solids Black"),
(6, "Rodda High Solids Grey"),
(7, "Galvanized"),
(8, "Custom"),
],
default=1,
),
),
("finish_custom", models.CharField(blank=True, max_length=50)),
(
"embeds_shop",
models.DateField(
blank=True, null=True, verbose_name="embeds to shop"
),
),
(
"land_fabs",
models.DateField(
blank=True, null=True, verbose_name="land fabs done"
),
),
(
"lands_shop",
models.DateField(
blank=True, null=True, verbose_name="lands to shop"
),
),
(
"rail_fabs",
models.DateField(
blank=True, null=True, verbose_name="rail fabs done"
),
),
(
"rails_shop",
models.DateField(
blank=True, null=True, verbose_name="rails to shop"
),
),
(
"stair_fabs",
models.DateField(
blank=True, null=True, verbose_name="stair fabs done"
),
),
(
"stairs_shop",
models.DateField(
blank=True, null=True, verbose_name="stairs to shop"
),
),
(
"for_const",
models.DateField(blank=True, null=True, verbose_name="to customer"),
),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('style', models.CharField(choices=[('concrete', 'Concrete'), ('steel', 'Steel'), ('wood', 'Wood'), ('custom', 'Custom')], max_length=20)),
('style_custom', models.CharField(blank=True, max_length=100, null=True)),
('scope', models.CharField(blank=True, max_length=100, null=True)),
('job', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='jobs.job')),
],
),
]

@ -1,83 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-18 17:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0001_initial"),
]
operations = [
migrations.AlterModelManagers(
name="job",
managers=[],
),
migrations.AddField(
model_name="stair",
name="due_from_engr",
field=models.DateField(
blank=True, null=True, verbose_name="due from engineer"
),
),
migrations.AddField(
model_name="stair",
name="rec_from_cust",
field=models.DateField(
blank=True, null=True, verbose_name="received from customer"
),
),
migrations.AddField(
model_name="stair",
name="rec_from_engr",
field=models.DateField(
blank=True, null=True, verbose_name="received from engineer"
),
),
migrations.AddField(
model_name="stair",
name="response",
field=models.CharField(
blank=True,
choices=[
("NC", "Approved"),
("AN", "Approved as noted"),
("RR", "Revise and resubmit"),
("U", "Update"),
],
max_length=2,
),
),
migrations.AddField(
model_name="stair",
name="status",
field=models.CharField(
choices=[
("NS", "Not started"),
("IP", "In progress"),
("EN", "At engineering"),
("SU", "Submitted"),
("RT", "Returned"),
],
default="NS",
max_length=2,
),
preserve_default=False,
),
migrations.AddField(
model_name="stair",
name="submitted",
field=models.DateField(blank=True, null=True, verbose_name="submitted"),
),
migrations.AddField(
model_name="stair",
name="to_engr",
field=models.DateField(
blank=True, null=True, verbose_name="sent to engineer"
),
),
migrations.DeleteModel(
name="SubRevision",
),
]

@ -1,104 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-21 23:08
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("jobs", "0002_alter_job_managers_stair_due_from_engr_and_more"),
]
operations = [
migrations.RemoveField(
model_name="stair",
name="due_from_engr",
),
migrations.RemoveField(
model_name="stair",
name="rec_from_cust",
),
migrations.RemoveField(
model_name="stair",
name="rec_from_engr",
),
migrations.RemoveField(
model_name="stair",
name="response",
),
migrations.RemoveField(
model_name="stair",
name="submitted",
),
migrations.RemoveField(
model_name="stair",
name="to_engr",
),
migrations.CreateModel(
name="Transmittal",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"description",
models.CharField(blank=True, max_length=250, null=True),
),
(
"to_engr",
models.DateField(
blank=True, null=True, verbose_name="sent to engineer"
),
),
(
"due_from_engr",
models.DateField(
blank=True, null=True, verbose_name="due from engineer"
),
),
(
"rec_from_engr",
models.DateField(
blank=True, null=True, verbose_name="received from engineer"
),
),
(
"submitted",
models.DateField(blank=True, null=True, verbose_name="submitted"),
),
(
"rec_from_cust",
models.DateField(
blank=True, null=True, verbose_name="received from customer"
),
),
(
"response",
models.CharField(
blank=True,
choices=[
("NC", "Approved"),
("AN", "Approved as noted"),
("RR", "Revise and resubmit"),
("U", "Update"),
],
max_length=2,
),
),
(
"job",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
("stairs", models.ManyToManyField(to="jobs.stair")),
],
),
]

@ -1,21 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-22 17:49
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("jobs", "0003_remove_stair_due_from_engr_and_more"),
]
operations = [
migrations.RemoveField(
model_name="stair",
name="for_const",
),
migrations.RemoveField(
model_name="transmittal",
name="description",
),
]

@ -1,48 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-22 18:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("jobs", "0004_remove_stair_for_const_and_more"),
]
operations = [
migrations.CreateModel(
name="TransmittalOverride",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"response",
models.CharField(
choices=[
("NC", "Approved"),
("AN", "Approved as noted"),
("RR", "Revise and resubmit"),
("U", "Update"),
],
max_length=2,
),
),
("stairs", models.ManyToManyField(to="jobs.stair")),
(
"transmittal",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="jobs.transmittal",
),
),
],
),
]

@ -1,36 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-22 21:44
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("jobs", "0005_transmittaloverride"),
]
operations = [
migrations.CreateModel(
name="JobDate",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("date", models.DateField()),
("desc", models.CharField(max_length=200)),
(
"job",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
],
),
]

@ -1,22 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-22 22:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0006_jobdate"),
]
operations = [
migrations.RemoveField(
model_name="transmittal",
name="due_from_engr",
),
migrations.AlterField(
model_name="transmittal",
name="to_engr",
field=models.DateField(verbose_name="sent to engineer"),
),
]

@ -1,103 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-23 18:38
import django.contrib.auth.models
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
("jobs", "0007_remove_transmittal_due_from_engr_and_more"),
]
operations = [
migrations.CreateModel(
name="Task",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("done", models.BooleanField()),
("notes", models.CharField(blank=True, max_length=100, null=True)),
(
"stage",
models.CharField(
choices=[("SUB", "Submittal"), ("FAB", "Fab")], max_length=3
),
),
],
),
migrations.RemoveField(
model_name="phonenumber",
name="owner",
),
migrations.RemoveField(
model_name="job",
name="fab_detailers",
),
migrations.RemoveField(
model_name="job",
name="sub_detailers",
),
migrations.AlterField(
model_name="stair",
name="status",
field=models.CharField(
choices=[
("NS", "Not started"),
("IP", "In progress"),
("EN", "Engineering"),
("SU", "Submitted"),
("RT", "Returned"),
],
max_length=2,
),
),
migrations.DeleteModel(
name="Detailer",
),
migrations.DeleteModel(
name="PhoneNumber",
),
migrations.AddField(
model_name="task",
name="job",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
migrations.AddField(
model_name="task",
name="stairs",
field=models.ManyToManyField(to="jobs.stair"),
),
migrations.CreateModel(
name="Detailer",
fields=[],
options={
"ordering": ["first_name"],
"proxy": True,
"indexes": [],
"constraints": [],
},
bases=("auth.user",),
managers=[
("objects", django.contrib.auth.models.UserManager()),
],
),
migrations.AddField(
model_name="task",
name="detailer",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="jobs.detailer"
),
),
]

@ -1,22 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-23 19:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0008_task_remove_phonenumber_owner_and_more"),
]
operations = [
migrations.AlterModelOptions(
name="task",
options={"ordering": ["-id"]},
),
migrations.AddField(
model_name="task",
name="due",
field=models.DateField(null=True),
),
]

@ -1,27 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-23 20:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0009_alter_task_options_task_due"),
]
operations = [
migrations.AlterModelOptions(
name="task",
options={"ordering": ["due", "-id"]},
),
migrations.RenameField(
model_name="task",
old_name="notes",
new_name="desc",
),
migrations.AlterField(
model_name="task",
name="due",
field=models.DateField(blank=True, null=True),
),
]

@ -1,22 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-23 20:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0010_alter_task_options_rename_notes_task_desc_and_more"),
]
operations = [
migrations.RemoveField(
model_name="task",
name="done",
),
migrations.AddField(
model_name="task",
name="completed",
field=models.DateField(blank=True, null=True),
),
]

@ -1,17 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-23 23:08
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("jobs", "0011_remove_task_done_task_completed"),
]
operations = [
migrations.AlterModelOptions(
name="task",
options={"ordering": ["completed", "due", "-id"]},
),
]

@ -1,36 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-24 15:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0012_alter_task_options"),
]
operations = [
migrations.AlterModelOptions(
name="task",
options={"ordering": ["priority", "-id"]},
),
migrations.RemoveField(
model_name="task",
name="completed",
),
migrations.RemoveField(
model_name="task",
name="due",
),
migrations.AddField(
model_name="task",
name="done",
field=models.BooleanField(default=False),
preserve_default=False,
),
migrations.AddField(
model_name="task",
name="priority",
field=models.IntegerField(blank=True, null=True),
),
]

@ -1,28 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-24 16:10
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("jobs", "0013_alter_task_options_remove_task_completed_and_more"),
]
operations = [
migrations.AlterModelOptions(
name="address",
options={
"ordering": ["state", "zip_code", "street_address"],
"verbose_name_plural": "addresses",
},
),
migrations.AlterUniqueTogether(
name="address",
unique_together={("street_address", "city", "state", "zip_code")},
),
migrations.RemoveField(
model_name="address",
name="street_address2",
),
]

@ -1,24 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-24 21:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0014_alter_address_options_alter_address_unique_together_and_more"),
]
operations = [
migrations.AddField(
model_name="stair",
name="on_hold",
field=models.BooleanField(default=False),
preserve_default=False,
),
migrations.AddField(
model_name="stair",
name="on_hold_note",
field=models.CharField(blank=True, max_length=200, null=True),
),
]

@ -1,18 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-24 21:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0015_stair_on_hold_stair_on_hold_note"),
]
operations = [
migrations.AddField(
model_name="stair",
name="alt_name",
field=models.CharField(blank=True, max_length=100, null=True),
),
]

@ -1,26 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-24 22:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0016_stair_alt_name"),
]
operations = [
migrations.AlterModelOptions(
name="task",
options={"ordering": ["-due", "-id"]},
),
migrations.RemoveField(
model_name="task",
name="priority",
),
migrations.AddField(
model_name="task",
name="due",
field=models.DateField(blank=True, null=True),
),
]

@ -1,38 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-25 02:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('jobs', '0017_alter_task_options_remove_task_priority_task_due'),
]
operations = [
migrations.AlterModelOptions(
name='task',
options={'ordering': ['done', 'due', '-id']},
),
migrations.RenameField(
model_name='jobdate',
old_name='desc',
new_name='description',
),
migrations.RenameField(
model_name='task',
old_name='desc',
new_name='description',
),
migrations.AddField(
model_name='transmittal',
name='description',
field=models.CharField(default='', max_length=200),
preserve_default=False,
),
migrations.AlterField(
model_name='address',
name='state',
field=models.CharField(choices=[('AK', 'Alaska'), ('AL', 'Alabama'), ('AR', 'Arkansas'), ('AZ', 'Arizona'), ('CA', 'California'), ('CO', 'Colorado'), ('CT', 'Connecticut'), ('DC', 'District of Columbia'), ('DE', 'Delaware'), ('FL', 'Florida'), ('GA', 'Georgia'), ('HI', 'Hawaii'), ('IA', 'Iowa'), ('ID', 'Idaho'), ('IL', 'Illinois'), ('IN', 'Indiana'), ('KS', 'Kansas'), ('KY', 'Kentucky'), ('LA', 'Louisiana'), ('MA', 'Massachusetts'), ('MD', 'Maryland'), ('ME', 'Maine'), ('MI', 'Michigan'), ('MN', 'Minnesota'), ('MO', 'Missouri'), ('MS', 'Mississippi'), ('MT', 'Montana'), ('NC', 'North Carolina'), ('ND', 'North Dakota'), ('NE', 'Nebraska'), ('NH', 'New Hampshire'), ('NJ', 'New Jersey'), ('NM', 'New Mexico'), ('NV', 'Nevada'), ('NY', 'New York'), ('OH', 'Ohio'), ('OK', 'Oklahoma'), ('OR', 'Oregon'), ('PA', 'Pennsylvania'), ('RI', 'Rhode Island'), ('SC', 'South Carolina'), ('SD', 'South Dakota'), ('TN', 'Tennessee'), ('TX', 'Texas'), ('UT', 'Utah'), ('VA', 'Virginia'), ('VT', 'Vermont'), ('WA', 'Washington'), ('WI', 'Wisconsin'), ('WV', 'West Virginia'), ('WY', 'Wyoming')], max_length=2),
),
]

@ -1,86 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-25 15:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0018_alter_task_options_rename_desc_jobdate_description_and_more"),
]
operations = [
migrations.AddField(
model_name="jobdate",
name="note",
field=models.CharField(blank=True, max_length=200, null=True),
),
migrations.AlterField(
model_name="address",
name="state",
field=models.CharField(
choices=[
("AL", "Alabama"),
("AK", "Alaska"),
("AS", "American Samoa"),
("AZ", "Arizona"),
("AR", "Arkansas"),
("AA", "Armed Forces Americas"),
("AE", "Armed Forces Europe"),
("AP", "Armed Forces Pacific"),
("CA", "California"),
("CO", "Colorado"),
("CT", "Connecticut"),
("DE", "Delaware"),
("DC", "District of Columbia"),
("FL", "Florida"),
("GA", "Georgia"),
("GU", "Guam"),
("HI", "Hawaii"),
("ID", "Idaho"),
("IL", "Illinois"),
("IN", "Indiana"),
("IA", "Iowa"),
("KS", "Kansas"),
("KY", "Kentucky"),
("LA", "Louisiana"),
("ME", "Maine"),
("MD", "Maryland"),
("MA", "Massachusetts"),
("MI", "Michigan"),
("MN", "Minnesota"),
("MS", "Mississippi"),
("MO", "Missouri"),
("MT", "Montana"),
("NE", "Nebraska"),
("NV", "Nevada"),
("NH", "New Hampshire"),
("NJ", "New Jersey"),
("NM", "New Mexico"),
("NY", "New York"),
("NC", "North Carolina"),
("ND", "North Dakota"),
("MP", "Northern Mariana Islands"),
("OH", "Ohio"),
("OK", "Oklahoma"),
("OR", "Oregon"),
("PA", "Pennsylvania"),
("PR", "Puerto Rico"),
("RI", "Rhode Island"),
("SC", "South Carolina"),
("SD", "South Dakota"),
("TN", "Tennessee"),
("TX", "Texas"),
("UT", "Utah"),
("VT", "Vermont"),
("VI", "Virgin Islands"),
("VA", "Virginia"),
("WA", "Washington"),
("WV", "West Virginia"),
("WI", "Wisconsin"),
("WY", "Wyoming"),
],
max_length=2,
),
),
]

@ -1,51 +0,0 @@
# Generated by Django 4.1.4 on 2023-08-25 19:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("jobs", "0019_jobdate_note_alter_address_state"),
]
operations = [
migrations.CreateModel(
name="Construction",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"style",
models.CharField(
choices=[
("CONC", "Concrete"),
("STL", "Steel"),
("WOOD", "Wood"),
("CU", "Custom"),
],
max_length=4,
),
),
(
"style_custom",
models.CharField(blank=True, max_length=100, null=True),
),
("scope", models.CharField(blank=True, max_length=100, null=True)),
(
"job",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="jobs.job"
),
),
],
),
]

@ -1,73 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-28 18:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0020_construction"),
]
operations = [
migrations.AlterField(
model_name="address",
name="state",
field=models.CharField(
choices=[
("AK", "Alaska"),
("AL", "Alabama"),
("AR", "Arkansas"),
("AZ", "Arizona"),
("CA", "California"),
("CO", "Colorado"),
("CT", "Connecticut"),
("DC", "District of Columbia"),
("DE", "Delaware"),
("FL", "Florida"),
("GA", "Georgia"),
("HI", "Hawaii"),
("IA", "Iowa"),
("ID", "Idaho"),
("IL", "Illinois"),
("IN", "Indiana"),
("KS", "Kansas"),
("KY", "Kentucky"),
("LA", "Louisiana"),
("MA", "Massachusetts"),
("MD", "Maryland"),
("ME", "Maine"),
("MI", "Michigan"),
("MN", "Minnesota"),
("MO", "Missouri"),
("MS", "Mississippi"),
("MT", "Montana"),
("NC", "North Carolina"),
("ND", "North Dakota"),
("NE", "Nebraska"),
("NH", "New Hampshire"),
("NJ", "New Jersey"),
("NM", "New Mexico"),
("NV", "Nevada"),
("NY", "New York"),
("OH", "Ohio"),
("OK", "Oklahoma"),
("OR", "Oregon"),
("PA", "Pennsylvania"),
("RI", "Rhode Island"),
("SC", "South Carolina"),
("SD", "South Dakota"),
("TN", "Tennessee"),
("TX", "Texas"),
("UT", "Utah"),
("VA", "Virginia"),
("VT", "Vermont"),
("WA", "Washington"),
("WI", "Wisconsin"),
("WV", "West Virginia"),
("WY", "Wyoming"),
],
max_length=2,
),
),
]

@ -1,39 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 15:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0021_alter_address_state"),
]
operations = [
migrations.AddField(
model_name="submittal",
name="name",
field=models.CharField(blank=True, max_length=100, null=True),
),
migrations.AlterField(
model_name="stair",
name="rail_type",
field=models.CharField(
choices=[
("1", "100 Pipe"),
("2", "200 Pipe"),
("3", "300 Rec Tube"),
("4", "400 Picket"),
("5", "500 Mesh"),
("6", "600 Cable"),
("7", "700 Rod"),
("8", "800 Glass"),
("W", "Wall rail only"),
("C", "Custom"),
("B", "By other"),
],
default="2",
max_length=1,
),
),
]

@ -1,19 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 15:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0022_submittal_name_alter_stair_rail_type"),
]
operations = [
migrations.AddField(
model_name="transmittal",
name="for_record",
field=models.BooleanField(default=False),
preserve_default=False,
),
]

@ -1,20 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 17:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0023_transmittal_for_record"),
]
operations = [
migrations.AddField(
model_name="stair",
name="stn_note",
field=models.CharField(
blank=True, max_length=200, null=True, verbose_name="STN note"
),
),
]

@ -1,52 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 21:22
from django.db import migrations, models
from jobs.models import Construction
class Migration(migrations.Migration):
dependencies = [
("jobs", "0024_stair_stn_note"),
]
def up(apps, schema_editor):
for c in Construction.objects.all():
if c.style == 'CONC':
c.style = 'concrete'
elif c.style == 'STL':
c.style = 'steel'
elif c.style == 'WOOD':
c.style = 'wood'
elif c.style == 'CU':
c.style = 'custom'
c.save()
def dn(apps, schema_editor):
for c in Construction.objects.all():
if c.style == 'concrete':
c.style = 'CONC'
elif c.style == 'steel':
c.style = 'STL'
elif c.style == 'wood':
c.style = 'WOOD'
elif c.style == 'custom':
c.style = 'CU'
c.save()
operations = [
migrations.AlterField(
model_name="construction",
name="style",
field=models.CharField(
choices=[
("concrete", "Concrete"),
("steel", "Steel"),
("wood", "Wood"),
("custom", "Custom"),
],
max_length=20,
),
),
migrations.RunPython(up, dn),
]

@ -1,79 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 21:40
from django.db import migrations, models
from jobs.models import Stair
class Migration(migrations.Migration):
dependencies = [
("jobs", "0025_alter_construction_style"),
]
def collect_stairs(_apps, _schema):
Migration.stairs = [(s.pk, s.finish) for s in Stair.objects.all()]
def int_to_char(_apps, _schema):
for (pk, finish) in Migration.stairs:
s = Stair.objects.get(pk=pk)
if finish == 1:
s.finish = 'rodda red oxide'
elif finish == 2:
s.finish = 'rodda black'
elif finish == 3:
s.finish = 'rodda grey'
elif finish == 4:
s.finish = 'rodda high solids red oxide'
elif finish == 5:
s.finish = 'rodda high solids black'
elif finish == 6:
s.finish = 'rodda high solids grey'
elif finish == 7:
s.finish = 'galvanized'
elif finish == 8:
s.finish = 'custom'
s.save()
def char_to_int(_apps, _schema):
for (pk, finish) in Migration.stairs:
s = Stair.objects.get(pk=pk)
if finish == 'rodda red oxide':
s.finish = 1
elif finish == 'rodda black':
s.finish = 2
elif finish == 'rodda grey':
s.finish = 3
elif finish == 'rodda high solids red oxide':
s.finish = 4
elif finish == 'rodda high solids black':
s.finish = 5
elif finish == 'rodda high solids grey':
s.finish = 6
elif finish == 'galvanized':
s.finish = 7
elif finish == 'custom':
s.finish = 8
s.save()
operations = [
migrations.RunPython(collect_stairs),
migrations.AlterField(
model_name="stair",
name="finish",
field=models.CharField(
choices=[
("rodda red oxide", "Rodda Red Oxide"),
("rodda black", "Rodda Black"),
("rodda grey", "Rodda Grey"),
("rodda high solids red oxide", "Rodda High Solids Red Oxide"),
("rodda high solids black", "Rodda High Solids Black"),
("rodda high solids grey", "Rodda High Solids Grey"),
("galvanized", "Galvanized"),
("custom", "Custom"),
],
default="rodda red oxide",
max_length=50,
),
),
migrations.RunPython(int_to_char, char_to_int),
]

@ -1,17 +0,0 @@
# Generated by Django 4.2.4 on 2023-08-29 22:11
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("jobs", "0026_alter_stair_finish"),
]
operations = [
migrations.RemoveField(
model_name="stair",
name="status",
),
]

@ -1,20 +0,0 @@
# Generated by Django 4.2.4 on 2023-09-14 21:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0027_remove_stair_status"),
]
operations = [
migrations.AddField(
model_name="transmittal",
name="due_from_engr",
field=models.DateField(
blank=True, null=True, verbose_name="due from engineer"
),
),
]

@ -1,21 +0,0 @@
# Generated by Django 4.2.4 on 2023-10-03 15:35
from django.db import migrations
import phonenumber_field.modelfields
class Migration(migrations.Migration):
dependencies = [
("jobs", "0028_transmittal_due_from_engr"),
]
operations = [
migrations.AddField(
model_name="contact",
name="phone",
field=phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, null=True, region=None
),
),
]

@ -1,18 +0,0 @@
# Generated by Django 4.2.4 on 2023-10-05 15:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0029_contact_phone"),
]
operations = [
migrations.AddField(
model_name="contact",
name="job_title",
field=models.CharField(blank=True, max_length=200, null=True),
),
]

@ -1,47 +0,0 @@
# Generated by Django 4.2.4 on 2023-11-28 15:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0030_contact_job_title"),
]
operations = [
migrations.AlterField(
model_name="job",
name="modeling",
field=models.BooleanField(
default=False, verbose_name="3D modeling included"
),
),
migrations.AlterField(
model_name="stair",
name="land_qt",
field=models.BooleanField(
default=False, verbose_name="landing quiet tread"
),
),
migrations.AlterField(
model_name="stair",
name="on_hold",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="stair",
name="stair_qt",
field=models.BooleanField(default=False, verbose_name="stair quiet tread"),
),
migrations.AlterField(
model_name="task",
name="done",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="transmittal",
name="for_record",
field=models.BooleanField(default=False),
),
]

@ -1,28 +0,0 @@
# Generated by Django 4.2.4 on 2023-11-28 15:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0031_alter_job_modeling_alter_stair_land_qt_and_more"),
]
operations = [
migrations.AlterField(
model_name="stair",
name="flights",
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name="stair",
name="landings",
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name="submittal",
name="number",
field=models.IntegerField(default=1),
),
]

@ -1,18 +0,0 @@
# Generated by Django 4.2.4 on 2023-11-28 15:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0032_alter_stair_flights_alter_stair_landings_and_more"),
]
operations = [
migrations.AlterField(
model_name="stair",
name="levels",
field=models.CharField(blank=True, max_length=100),
),
]

@ -1,18 +0,0 @@
# Generated by Django 4.2.4 on 2024-01-04 15:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("jobs", "0033_alter_stair_levels"),
]
operations = [
migrations.AddField(
model_name="stair",
name="embeds_na",
field=models.BooleanField(default=False),
),
]

@ -1,22 +0,0 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location /p/ {
root /mnt;
autoindex on;
autoindex_format xml;
xslt_stylesheet /var/www/autoindex.xslt;
}
location /static/ {
root /home/dwgstatus/dwgstatus;
}
location / {
uwsgi_pass unix:///tmp/dwgstatus.sock;
include uwsgi_params;
}
}

@ -0,0 +1,43 @@
upstream gunicorn {
server web:8000;
}
server {
listen 80;
server_name _;
location /static/ {
root /;
}
location / {
# everything is passed to Gunicorn
proxy_pass http://gunicorn;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
# server {
# listen 80 default_server;
# listen [::]:80 default_server;
# server_name _;
# location /p/ {
# root /mnt;
# autoindex on;
# autoindex_format xml;
# xslt_stylesheet /var/www/autoindex.xslt;
# }
# location /static/ {
# root /home/dwgstatus/dwgstatus;
# }
# location / {
# uwsgi_pass unix:///tmp/dwgstatus.sock;
# include uwsgi_params;
# }
# }

@ -5,6 +5,9 @@ django-extensions==3.2.3
django-phonenumber-field==7.1.0
localflavor==1.9
phonenumberslite==8.13.22
postgres==4.0
psycopg2-binary==2.9.9
psycopg2-pool==1.1
pymemcache==4.0.0
six==1.16.0
sqlparse==0.4.4

Loading…
Cancel
Save