This commit is contained in:
Андрей Дувакин 2024-10-04 14:38:55 +05:00
parent a2510f9401
commit f3e1ccb7c4
31 changed files with 562 additions and 1140 deletions

View File

@ -1,532 +1,617 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
<diagram name="Page-1" id="mP2IPReIOeFjsobHqe8U">
<mxGraphModel dx="598" dy="346" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2336" pageHeight="1654" math="0" shadow="0">
<mxGraphModel dx="819" dy="474" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2336" pageHeight="1654" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-1" value="accessories" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="793" y="557" width="180" height="210" as="geometry" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-23" value="city" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1343" y="557" width="180" height="120" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-2" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-24" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-23" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-3" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-2">
<mxCell id="vXrQV9W24_iiTXsCYrPu-25" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-24" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-4" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-2">
<mxCell id="vXrQV9W24_iiTXsCYrPu-26" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-24" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-5" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-27" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-23" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-6" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-5">
<mxCell id="vXrQV9W24_iiTXsCYrPu-28" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-27" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-7" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-5">
<mxCell id="vXrQV9W24_iiTXsCYrPu-29" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-27" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-8" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-30" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-23" vertex="1">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-9" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-8">
<mxCell id="vXrQV9W24_iiTXsCYrPu-31" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-30" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-10" value="width" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-8">
<mxCell id="vXrQV9W24_iiTXsCYrPu-32" value="federal_district_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-30" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-11" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-45" value="accessiories" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1083" y="557" width="180" height="210" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-46" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-45" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-47" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-46" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-48" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-46" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-49" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-45" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-50" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-49" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-51" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-49" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-61" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-45" vertex="1">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-62" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-61" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-63" value="volume" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-61" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-12" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-12" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-11">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-13" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-12">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-13" value="height" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-11">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-14" value="weight" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-12">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-14" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-55" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-45" vertex="1">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-15" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-14">
<mxCell id="vXrQV9W24_iiTXsCYrPu-56" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-55" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-16" value="length" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-14">
<mxCell id="vXrQV9W24_iiTXsCYrPu-57" value="weight" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-55" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-17" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-1">
<mxCell id="vXrQV9W24_iiTXsCYrPu-58" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-45" vertex="1">
<mxGeometry y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-18" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-17">
<mxCell id="vXrQV9W24_iiTXsCYrPu-59" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-58" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-19" value="weight" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-17">
<mxCell id="vXrQV9W24_iiTXsCYrPu-60" value="city_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-58" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-23" value="storages" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1343" y="557" width="180" height="150" as="geometry" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="vXrQV9W24_iiTXsCYrPu-24" target="vXrQV9W24_iiTXsCYrPu-58" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-24" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-23">
<mxCell id="vXrQV9W24_iiTXsCYrPu-100" value="total_orders" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1150" y="800" width="180" height="210" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-101" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-100" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-25" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-24">
<mxCell id="vXrQV9W24_iiTXsCYrPu-102" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-101" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-26" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-24">
<mxCell id="vXrQV9W24_iiTXsCYrPu-103" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-101" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-27" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-23">
<mxCell id="vXrQV9W24_iiTXsCYrPu-104" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-100" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-28" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-27">
<mxCell id="vXrQV9W24_iiTXsCYrPu-105" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-104" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-29" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-27">
<mxCell id="vXrQV9W24_iiTXsCYrPu-106" value="order_datetime" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-104" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-30" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-23">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-20" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-31" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-30">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-21" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-20">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-32" value="x_coordinate" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-30">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-22" value="count_robots" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-20">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-33" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-23">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-23" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-34" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-33">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-24" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-23">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-35" value="y_coordinate" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-33">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-25" value="deadline" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-23">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-45" value="storage_accessiories" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1083" y="557" width="180" height="180" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-46" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-47" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-46">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-48" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-46">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-49" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-50" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-49">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-51" value="current_count" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-49">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-61" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-62" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-61">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-63" value="change_datetime" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-61">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-58" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-59" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-58">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-60" value="storage_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-58">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-55" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-45">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-16" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-56" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-55">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-17" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-16">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-57" value="accessiories_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-55">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-18" value="status_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-16">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-24" target="vXrQV9W24_iiTXsCYrPu-58">
<mxGeometry relative="1" as="geometry" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-107" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-100" vertex="1">
<mxGeometry y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-2" target="vXrQV9W24_iiTXsCYrPu-55">
<mxGeometry relative="1" as="geometry" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-108" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-107" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-66" value="deliveries" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="563" y="827" width="180" height="150" as="geometry" />
<mxCell id="vXrQV9W24_iiTXsCYrPu-109" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;user_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-107" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-67" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-66">
<mxCell id="vXrQV9W24_iiTXsCYrPu-114" value="users" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1460" y="950" width="180" height="210" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-115" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-68" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-67">
<mxCell id="vXrQV9W24_iiTXsCYrPu-116" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-115" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-69" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-67">
<mxCell id="vXrQV9W24_iiTXsCYrPu-117" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-115" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-70" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-66">
<mxCell id="vXrQV9W24_iiTXsCYrPu-118" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-71" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-70">
<mxCell id="vXrQV9W24_iiTXsCYrPu-119" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-118" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-72" value="count" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-70">
<mxCell id="vXrQV9W24_iiTXsCYrPu-120" value="first_name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-118" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-76" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-66">
<mxCell id="vXrQV9W24_iiTXsCYrPu-121" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-77" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-76">
<mxCell id="vXrQV9W24_iiTXsCYrPu-122" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-121" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-78" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;storage_accessiories_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-76">
<mxCell id="vXrQV9W24_iiTXsCYrPu-123" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;last_name&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-121" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-79" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-66">
<mxCell id="vXrQV9W24_iiTXsCYrPu-124" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-80" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-79">
<mxCell id="vXrQV9W24_iiTXsCYrPu-125" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-124" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-81" value="step_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-79">
<mxCell id="vXrQV9W24_iiTXsCYrPu-126" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;login&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-124" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-82" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-46" target="vXrQV9W24_iiTXsCYrPu-76">
<mxCell id="vXrQV9W24_iiTXsCYrPu-127" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-128" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-127" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-129" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;password&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-127" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-130" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-114" vertex="1">
<mxGeometry y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-131" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-130" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-132" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;role_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-130" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-133" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="vXrQV9W24_iiTXsCYrPu-115" target="vXrQV9W24_iiTXsCYrPu-107" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-134" value="roles" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1720" y="940" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-135" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-134" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-136" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-135" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-137" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-135" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-138" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-134" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-139" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-138" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-140" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-138" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-153" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="vXrQV9W24_iiTXsCYrPu-135" target="vXrQV9W24_iiTXsCYrPu-130" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-154" value="statuses" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="1480" y="750" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-155" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="vXrQV9W24_iiTXsCYrPu-154" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-156" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-155" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-157" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-155" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-158" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="vXrQV9W24_iiTXsCYrPu-154" vertex="1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-159" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-158" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-160" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="vXrQV9W24_iiTXsCYrPu-158" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="MM7JYfGdxSZRdL4fy3-k-1" target="vXrQV9W24_iiTXsCYrPu-30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-1" value="&lt;span style=&quot;text-align: left; text-wrap: wrap;&quot;&gt;federal_district&lt;/span&gt;" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1600" y="557" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-2" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-3" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-2">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-4" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-2">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-5" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-6" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-5">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-7" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-5">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-155" target="MM7JYfGdxSZRdL4fy3-k-16">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-26" value="delivery_orders" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="810" y="790" width="180" height="210" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-27" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-28" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-27">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-29" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-27">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-30" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-31" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-30">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-32" value="order_datetime" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-30">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-33" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-34" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-33">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-35" value="count_robots" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-33">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-62" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-63" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-62">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-64" value="deadline" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-62">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-36" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-37" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-36">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-38" value="truck_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-36">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-39" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-26">
<mxGeometry y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-40" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-39">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-41" value="total_order_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-39">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-101" target="MM7JYfGdxSZRdL4fy3-k-39">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-46" value="trucks" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="960" width="180" height="150" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-47" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-46">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-48" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-47">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-49" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-47">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-50" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-46">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-51" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-50">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-52" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-50">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-53" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-46">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-54" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-53">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-55" value="capacity" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-53">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-56" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-46">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-57" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-56">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-58" value="volume" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-56">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="MM7JYfGdxSZRdL4fy3-k-47" target="MM7JYfGdxSZRdL4fy3-k-36">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-66" value="delivery_accessories" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="800" y="570" width="180" height="180" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-67" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-66">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-68" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-67">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-69" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-67">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-70" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-66">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-71" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-70">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-72" value="queue" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-70">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-73" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-66">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-74" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-73">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-75" value="count" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-73">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-79" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-66">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-80" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-79">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-81" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;accessiory_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-79">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-82" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-66">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-83" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-82">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-84" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;delivery_order&lt;/span&gt;_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="MM7JYfGdxSZRdL4fy3-k-82">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="MM7JYfGdxSZRdL4fy3-k-85" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="MM7JYfGdxSZRdL4fy3-k-27" target="MM7JYfGdxSZRdL4fy3-k-82">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1053" y="602" />
<mxPoint x="1053" y="497" />
<mxPoint x="463" y="497" />
<mxPoint x="463" y="932" />
<mxPoint x="750" y="835" />
<mxPoint x="750" y="735" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-83" value="steps" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="883" y="887" width="180" height="150" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-84" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-83">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-85" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-84">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-86" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-84">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-87" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-83">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-88" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-87">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-89" value="start_deadline" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-87">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-90" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-83">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-91" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-90">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-92" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;finish_deadline&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-90">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-93" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-83">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-94" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-93">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-95" value="order_id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-93">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-96" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-84" target="vXrQV9W24_iiTXsCYrPu-79">
<mxCell id="MM7JYfGdxSZRdL4fy3-k-86" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-46" target="MM7JYfGdxSZRdL4fy3-k-79">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-100" value="orders" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1173" y="842" width="180" height="120" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-101" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-102" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-101">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-103" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-101">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-104" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-105" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-104">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-106" value="order_datetime" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-104">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-107" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-100">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-108" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-107">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-109" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;user_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-107">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-113" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-101" target="vXrQV9W24_iiTXsCYrPu-93">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-114" value="users" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1433" y="947" width="180" height="210" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-115" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-116" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-115">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-117" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-115">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-118" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-119" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-118">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-120" value="first_name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-118">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-121" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="90" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-122" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-121">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-123" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;last_name&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-121">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-124" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="120" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-125" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-124">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-126" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;login&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-124">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-127" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-128" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-127">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-129" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;password&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-127">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-130" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-114">
<mxGeometry y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-131" value="FK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-130">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-132" value="&lt;span style=&quot;text-align: center; text-wrap: nowrap;&quot;&gt;role_id&lt;/span&gt;" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-130">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-133" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-115" target="vXrQV9W24_iiTXsCYrPu-107">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-134" value="roles" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1693" y="857" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-135" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-134">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-136" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-135">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-137" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-135">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-138" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-134">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-139" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-138">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-140" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-138">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-153" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="vXrQV9W24_iiTXsCYrPu-135" target="vXrQV9W24_iiTXsCYrPu-130">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-154" value="statuses" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="750" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-155" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-154">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-156" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-155">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-157" value="id" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-155">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-158" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-154">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-159" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-158">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="vXrQV9W24_iiTXsCYrPu-160" value="name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="vXrQV9W24_iiTXsCYrPu-158">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>

View File

@ -1,12 +0,0 @@
from typing import Optional
from pydantic import BaseModel
class DeliveryEntity(BaseModel):
id: Optional[int] = None
count: int
storage_accessories_id: int
step_id: int
class Config:
from_attributes = True

View File

@ -1,14 +0,0 @@
from typing import Optional
from datetime import datetime
from pydantic import BaseModel
class StepEntity(BaseModel):
id: Optional[int] = None
start_deadline: datetime
finish_deadline: datetime
order_id: Optional[int] = None
status_id: Optional[int] = None
class Config:
from_attributes = True

View File

@ -1,13 +0,0 @@
from typing import Optional, List
from pydantic import BaseModel
class StorageEntity(BaseModel):
id: Optional[int] = None
name: str
x_coordinate: float
y_coordinate: float
storage_accessories: Optional[List[int]] = []
class Config:
from_attributes = True

View File

@ -1,14 +0,0 @@
from typing import Optional
from datetime import datetime
from pydantic import BaseModel
class StorageAccessoryEntity(BaseModel):
id: Optional[int] = None
current_count: int
change_datetime: Optional[datetime] = None
storage_id: Optional[int] = None
accessory_id: Optional[int] = None
class Config:
from_attributes = True

View File

@ -1,69 +0,0 @@
from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.delivery import DeliveryEntity
from app.infrastructure.database.models.deliveries import Delivery
from app.infrastructure.database.repository.delivery_repository import DeliveryRepository
class DeliveryService:
def __init__(self, db: Session):
self.repository = DeliveryRepository(db)
def get_all_deliveries(self) -> List[DeliveryEntity]:
deliveries = self.repository.get_all()
return [
DeliveryEntity(
id=d.id,
count=d.count,
storage_accessories_id=d.storage_accessories_id,
step_id=d.step_id,
)
for d in deliveries
]
def get_delivery_by_id(self, delivery_id: int) -> Optional[DeliveryEntity]:
delivery = self.repository.get_by_id(delivery_id)
if delivery:
return DeliveryEntity(
id=delivery.id,
count=delivery.count,
storage_accessories_id=delivery.storage_accessories_id,
step_id=delivery.step_id,
)
return None
def create_delivery(self, entity: DeliveryEntity) -> DeliveryEntity:
delivery_model = Delivery(
count=entity.count,
storage_accessories_id=entity.storage_accessories_id,
step_id=entity.step_id,
)
created_delivery = self.repository.create(delivery_model)
return DeliveryEntity(
id=created_delivery.id,
count=created_delivery.count,
storage_accessories_id=created_delivery.storage_accessories_id,
step_id=created_delivery.step_id,
)
def update_delivery(self, delivery_id: int, entity: DeliveryEntity) -> Optional[DeliveryEntity]:
delivery_model = self.repository.get_by_id(delivery_id)
if delivery_model:
delivery_model.count = entity.count
delivery_model.storage_accessories_id = entity.storage_accessories_id
delivery_model.step_id = entity.step_id
self.repository.update(delivery_model)
return DeliveryEntity(
id=delivery_model.id,
count=delivery_model.count,
storage_accessories_id=delivery_model.storage_accessories_id,
step_id=delivery_model.step_id,
)
return None
def delete_delivery(self, delivery_id: int) -> bool:
return self.repository.delete(delivery_id) is not None

View File

@ -3,7 +3,7 @@ from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.order import OrderEntity
from app.infrastructure.database.models.orders import Order
from app.infrastructure.database.models.total_orders import TotalOrder
from app.infrastructure.database.repository.order_repository import OrderRepository
@ -36,7 +36,7 @@ class OrderService:
return None
def create_order(self, entity: OrderEntity) -> OrderEntity:
order_model = Order(
order_model = TotalOrder(
order_datetime=entity.order_datetime,
user_id=entity.user_id,
status_id=entity.status_id,

View File

@ -1,74 +0,0 @@
from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.step import StepEntity
from app.infrastructure.database.models.steps import Step
from app.infrastructure.database.repository.step_repository import StepRepository
class StepService:
def __init__(self, db: Session):
self.repository = StepRepository(db)
def get_all_steps(self) -> List[StepEntity]:
steps = self.repository.get_all()
return [
StepEntity(
id=s.id,
start_deadline=s.start_deadline,
finish_deadline=s.finish_deadline,
order_id=s.order_id,
status_id=s.status_id,
) for s in steps
]
def get_step_by_id(self, step_id: int) -> Optional[StepEntity]:
step = self.repository.get_by_id(step_id)
if step:
return StepEntity(
id=step.id,
start_deadline=step.start_deadline,
finish_deadline=step.finish_deadline,
order_id=step.order_id,
status_id=step.status_id,
)
return None
def create_step(self, entity: StepEntity) -> StepEntity:
step_model = Step(
start_deadline=entity.start_deadline,
finish_deadline=entity.finish_deadline,
order_id=entity.order_id,
status_id=entity.status_id,
)
created_step = self.repository.create(step_model)
return StepEntity(
id=created_step.id,
start_deadline=created_step.start_deadline,
finish_deadline=created_step.finish_deadline,
order_id=created_step.order_id,
status_id=created_step.status_id,
)
def update_step(self, step_id: int, entity: StepEntity) -> Optional[StepEntity]:
step_model = self.repository.get_by_id(step_id)
if step_model:
step_model.start_deadline = entity.start_deadline
step_model.finish_deadline = entity.finish_deadline
step_model.order_id = entity.order_id
step_model.status_id = entity.status_id
self.repository.update(step_model)
return StepEntity(
id=step_model.id,
start_deadline=step_model.start_deadline,
finish_deadline=step_model.finish_deadline,
order_id=step_model.order_id,
status_id=step_model.status_id,
)
return None
def delete_step(self, step_id: int) -> bool:
return self.repository.delete(step_id) is not None

View File

@ -1,75 +0,0 @@
from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.storage_accessory import StorageAccessoryEntity
from app.infrastructure.database.models.storage_accessories import StorageAccessories
from app.infrastructure.database.repository.storage_accessory_repository import StorageAccessoryRepository
class StorageAccessoryService:
def __init__(self, db: Session):
self.repository = StorageAccessoryRepository(db)
def get_all_storage_accessories(self) -> List[StorageAccessoryEntity]:
storage_accessories = self.repository.get_all()
return [
StorageAccessoryEntity(
id=sa.id,
current_count=sa.current_count,
change_datetime=sa.change_datetime,
storage_id=sa.storage_id,
accessory_id=sa.accessory_id,
) for sa in storage_accessories
]
def get_storage_accessory_by_id(self, storage_accessories_id: int) -> Optional[StorageAccessoryEntity]:
storage_accessory = self.repository.get_by_id(storage_accessories_id)
if storage_accessory:
return StorageAccessoryEntity(
id=storage_accessory.id,
current_count=storage_accessory.current_count,
change_datetime=storage_accessory.change_datetime,
storage_id=storage_accessory.storage_id,
accessory_id=storage_accessory.accessory_id,
)
return None
def create_storage_accessory(self, entity: StorageAccessoryEntity) -> StorageAccessoryEntity:
storage_accessory_model = StorageAccessories(
current_count=entity.current_count,
change_datetime=entity.change_datetime,
storage_id=entity.storage_id,
accessory_id=entity.accessory_id,
)
created_storage_accessory = self.repository.create(storage_accessory_model)
return StorageAccessoryEntity(
id=created_storage_accessory.id,
current_count=created_storage_accessory.current_count,
change_datetime=created_storage_accessory.change_datetime,
storage_id=created_storage_accessory.storage_id,
accessory_id=created_storage_accessory.accessory_id,
)
def update_storage_accessory(self, storage_accessories_id: int, entity: StorageAccessoryEntity) -> Optional[
StorageAccessoryEntity]:
storage_accessory_model = self.repository.get_by_id(storage_accessories_id)
if storage_accessory_model:
storage_accessory_model.current_count = entity.current_count
storage_accessory_model.change_datetime = entity.change_datetime
storage_accessory_model.storage_id = entity.storage_id
storage_accessory_model.accessory_id = entity.accessory_id
self.repository.update(storage_accessory_model)
return StorageAccessoryEntity(
id=storage_accessory_model.id,
current_count=storage_accessory_model.current_count,
change_datetime=storage_accessory_model.change_datetime,
storage_id=storage_accessory_model.storage_id,
accessory_id=storage_accessory_model.accessory_id,
)
return None
def delete_storage_accessory(self, storage_accessories_id: int) -> bool:
return self.repository.delete(storage_accessories_id) is not None

View File

@ -1,74 +0,0 @@
from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.storage import StorageEntity
from app.infrastructure.database.models.storages import Storage
from app.infrastructure.database.repository.storage_repository import StorageRepository
class StorageService:
def __init__(self, db: Session):
self.repository = StorageRepository(db)
def get_all_storages(self) -> List[StorageEntity]:
storages = self.repository.get_all()
return [
StorageEntity(
id=s.id,
name=s.name,
x_coordinate=s.x_coordinate,
y_coordinate=s.y_coordinate,
storage_accessories=s.storage_accessories,
) for s in storages
]
def get_storage_by_id(self, storage_id: int) -> Optional[StorageEntity]:
storage = self.repository.get_by_id(storage_id)
if storage:
return StorageEntity(
id=storage.id,
name=storage.name,
x_coordinate=storage.x_coordinate,
y_coordinate=storage.y_coordinate,
storage_accessories=storage.storage_accessories,
)
return None
def create_storage(self, entity: StorageEntity) -> StorageEntity:
storage_model = Storage(
name=entity.name,
x_coordinate=entity.x_coordinate,
y_coordinate=entity.y_coordinate,
storage_accessories=entity.storage_accessories
)
created_storage = self.repository.create(storage_model)
return StorageEntity(
id=created_storage.id,
name=created_storage.name,
x_coordinate=created_storage.x_coordinate,
y_coordinate=created_storage.y_coordinate,
storage_accessories=created_storage.storage_accessories,
)
def update_storage(self, storage_id: int, entity: StorageEntity) -> Optional[StorageEntity]:
storage_model = self.repository.get_by_id(storage_id)
if storage_model:
storage_model.name = entity.name
storage_model.x_coordinate = entity.x_coordinate
storage_model.y_coordinate = entity.y_coordinate
storage_model.storage_accessories = entity.storage_accessories
self.repository.update(storage_model)
return StorageEntity(
id=storage_model.id,
name=storage_model.name,
x_coordinate=storage_model.x_coordinate,
y_coordinate=storage_model.y_coordinate,
storage_accessories=storage_model.storage_accessories,
)
return None
def delete_storage(self, storage_id: int) -> bool:
return self.repository.delete(storage_id) is not None

View File

@ -14,14 +14,15 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def init_db():
import app.infrastructure.database.models.accessory
import app.infrastructure.database.models.deliveries
import app.infrastructure.database.models.orders
import app.infrastructure.database.models.roles
import app.infrastructure.database.models.statuses
import app.infrastructure.database.models.steps
import app.infrastructure.database.models.storage_accessories
import app.infrastructure.database.models.storages
import app.infrastructure.database.models.users
import app.infrastructure.database.models.statuses
import app.infrastructure.database.models.federal_districts
import app.infrastructure.database.models.trucks
import app.infrastructure.database.models.cities
import app.infrastructure.database.models.accessory
import app.infrastructure.database.models.total_orders
import app.infrastructure.database.models.delivery_orders
import app.infrastructure.database.models.dilevery_accessiories
Base.metadata.create_all(bind=engine)

View File

@ -1,4 +1,4 @@
from sqlalchemy import Column, Integer, VARCHAR, Float
from sqlalchemy import Column, Integer, VARCHAR, Float, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
@ -9,9 +9,13 @@ class Accessory(Base):
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(VARCHAR(100), nullable=False)
width = Column(Float)
height = Column(Float)
length = Column(Float)
volume = Column(Float)
weight = Column(Float)
period = Column(Integer)
city_id = Column(ForeignKey('cities.id'))
city = relationship('City', back_populates='accessories')
delivery_accessories = relationship('DeliveryAccessory', back_populates='accessory')
storage_accessories = relationship('StorageAccessories', back_populates='accessory')

View File

@ -0,0 +1,17 @@
from sqlalchemy import Column, Integer, VARCHAR, Float, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class City(Base):
__tablename__ = 'cities'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(VARCHAR(100), nullable=False)
federal_district_id = Column(Integer, ForeignKey('federal_districts.id'))
federal_district = relationship('FederalDistrict', back_populates='cities')
accessories = relationship('City', back_populates='Accessory')

View File

@ -1,17 +0,0 @@
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class Delivery(Base):
__tablename__ = 'deliveries'
id = Column(Integer, primary_key=True, autoincrement=True)
count = Column(Integer, nullable=False)
storage_accessories_id = Column(Integer, ForeignKey('storage_accessories.id'))
step_id = Column(Integer, ForeignKey('steps.id'))
storage_accessory = relationship('StorageAccessories', back_populates='deliveries')
step = relationship('Step', back_populates='deliveries')

View File

@ -0,0 +1,21 @@
from sqlalchemy import Column, Integer, VARCHAR, Float, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class DeliveryOrder(Base):
__tablename__ = 'delivery_orders'
id = Column(Integer, primary_key=True, autoincrement=True)
order_datetime = Column(DateTime, nullable=False)
count_robots = Column(Integer, nullable=False)
deadline = Column(DateTime, nullable=False)
truck_id = Column(Integer, ForeignKey('trucks.id'))
total_order_id = Column(Integer, ForeignKey('total_orders.id'))
truck = relationship('Truck', back_populates='delivery_orders')
total_order = relationship('TotalOrder', back_populates='delivery_orders')
delivery_accessories = relationship('DeliveryAccessory', back_populates='delivery_order')

View File

@ -0,0 +1,18 @@
from sqlalchemy import Column, Integer, VARCHAR, Float, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class DeliveryAccessory(Base):
__tablename__ = 'delivery_accessories'
id = Column(Integer, primary_key=True, autoincrement=True)
queue = Column(Integer, nullable=False)
count = Column(Integer, nullable=False)
accessory_id = Column(Integer, ForeignKey('accessories.id'))
delivery_order_id = Column(Integer, ForeignKey('delivery_orders.id'))
accessory = relationship('Accessory', back_populates='delivery_accessories')
delivery_order = relationship('DeliveryOrder', back_populates='delivery_accessories')

View File

@ -0,0 +1,13 @@
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class FederalDistrict(Base):
__tablename__ = 'federal_districts'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(VARCHAR(100), nullable=False)
cities = relationship('City', back_populates='federal_district')

View File

@ -1,20 +0,0 @@
from sqlalchemy import Column, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class Step(Base):
__tablename__ = 'steps'
id = Column(Integer, primary_key=True, autoincrement=True)
start_deadline = Column(DateTime, nullable=False)
finish_deadline = Column(DateTime, nullable=False)
order_id = Column(Integer, ForeignKey('orders.id'))
status_id = Column(Integer, ForeignKey('statuses.id'))
order = relationship('Order', back_populates='steps')
status = relationship('Status', back_populates='steps')
deliveries = relationship('Delivery', back_populates='step')

View File

@ -1,21 +0,0 @@
from sqlalchemy import Column, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class StorageAccessories(Base):
__tablename__ = 'storage_accessories'
id = Column(Integer, primary_key=True, autoincrement=True)
current_count = Column(Integer, nullable=False)
change_datetime = Column(DateTime)
storage_id = Column(Integer, ForeignKey('storages.id'))
accessory_id = Column(Integer, ForeignKey('accessories.id'))
storage = relationship('Storage', back_populates='storage_accessories')
accessory = relationship('Accessory', back_populates='storage_accessories')
deliveries = relationship('Delivery', back_populates='storage_accessory')

View File

@ -4,11 +4,13 @@ from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class Order(Base):
__tablename__ = 'orders'
class TotalOrder(Base):
__tablename__ = 'total_orders'
id = Column(Integer, primary_key=True, autoincrement=True)
order_datetime = Column(DateTime, nullable=False)
count_robots = Column(Integer, nullable=False)
deadline = Column(DateTime)
user_id = Column(Integer, ForeignKey('users.id'))
status_id = Column(Integer, ForeignKey('statuses.id'))
@ -16,4 +18,4 @@ class Order(Base):
user = relationship('User', back_populates='orders')
status = relationship('Status', back_populates='orders')
steps = relationship('Step', back_populates='order')
delivery_orders = relationship('DeliveryOrder', back_populates='total_orders')

View File

@ -4,12 +4,13 @@ from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
class Storage(Base):
__tablename__ = 'storages'
class Truck(Base):
__tablename__ = 'trucks'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(VARCHAR(100), nullable=False)
x_coordinate = Column(Float, nullable=False)
y_coordinate = Column(Float, nullable=False)
capacity = Column(Float, nullable=False)
volume = Column(Float, nullable=False)
delivery_orders = relationship('DeliveryOrder', back_populates='truck')
storage_accessories = relationship('StorageAccessories', back_populates='storage')

View File

@ -1,31 +0,0 @@
from sqlalchemy.orm import Session
from app.infrastructure.database.models.deliveries import Delivery
class DeliveryRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(Delivery).all()
def get_by_id(self, delivery_id: int):
return self.db.query(Delivery).filter(Delivery.id == delivery_id).first()
def create(self, delivery: Delivery):
self.db.add(delivery)
self.db.commit()
self.db.refresh(delivery)
return delivery
def update(self, delivery: Delivery):
self.db.commit()
return delivery
def delete(self, delivery_id: int):
delivery = self.db.query(Delivery).filter(Delivery.id == delivery_id).first()
if delivery:
self.db.delete(delivery)
self.db.commit()
return delivery
return None

View File

@ -1,28 +1,28 @@
from sqlalchemy.orm import Session
from app.infrastructure.database.models.orders import Order
from app.infrastructure.database.models.total_orders import TotalOrder
class OrderRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(Order).all()
return self.db.query(TotalOrder).all()
def get_by_id(self, order_id: int):
return self.db.query(Order).filter(Order.id == order_id).first()
return self.db.query(TotalOrder).filter(TotalOrder.id == order_id).first()
def create(self, order: Order):
def create(self, order: TotalOrder):
self.db.add(order)
self.db.commit()
self.db.refresh(order)
return order
def update(self, order: Order):
def update(self, order: TotalOrder):
self.db.commit()
return order
def delete(self, order_id: int):
order = self.db.query(Order).filter(Order.id == order_id).first()
order = self.db.query(TotalOrder).filter(TotalOrder.id == order_id).first()
if order:
self.db.delete(order)
self.db.commit()

View File

@ -1,30 +0,0 @@
from sqlalchemy.orm import Session
from app.infrastructure.database.models.steps import Step
class StepRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(Step).all()
def get_by_id(self, step_id: int):
return self.db.query(Step).filter(Step.id == step_id).first()
def create(self, step: Step):
self.db.add(step)
self.db.commit()
self.db.refresh(step)
return step
def update(self, step: Step):
self.db.commit()
return step
def delete(self, step_id: int):
step = self.db.query(Step).filter(Step.id == step_id).first()
if step:
self.db.delete(step)
self.db.commit()
return step
return None

View File

@ -1,32 +0,0 @@
from sqlalchemy.orm import Session
from app.infrastructure.database.models.storage_accessories import StorageAccessories
class StorageAccessoryRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(StorageAccessories).all()
def get_by_id(self, storage_accessories_id: int):
return self.db.query(StorageAccessories).filter(StorageAccessories.id == storage_accessories_id).first()
def create(self, storage_accessories: StorageAccessories):
self.db.add(storage_accessories)
self.db.commit()
self.db.refresh(storage_accessories)
return storage_accessories
def update(self, storage_accessories: StorageAccessories):
self.db.commit()
return storage_accessories
def delete(self, storage_accessories_id: int):
storage_accessories = self.db.query(StorageAccessories).filter(
StorageAccessories.id == storage_accessories_id).first()
if storage_accessories:
self.db.delete(storage_accessories)
self.db.commit()
return storage_accessories
return None

View File

@ -1,31 +0,0 @@
from sqlalchemy.orm import Session
from app.infrastructure.database.models.storages import Storage
class StorageRepository:
def __init__(self, db: Session):
self.db = db
def get_all(self):
return self.db.query(Storage).all()
def get_by_id(self, storage_id: int):
return self.db.query(Storage).filter(Storage.id == storage_id).first()
def create(self, storage: Storage):
self.db.add(storage)
self.db.commit()
self.db.refresh(storage)
return storage
def update(self, storage: Storage):
self.db.commit()
return storage
def delete(self, storage_id: int):
storage = self.db.query(Storage).filter(Storage.id == storage_id).first()
if storage:
self.db.delete(storage)
self.db.commit()
return storage
return None

View File

@ -1,52 +0,0 @@
from typing import List
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from app.infrastructure.database.dependencies import get_db
from app.core.entities.delivery import DeliveryEntity
from app.core.usecases.delivery_service import DeliveryService
router = APIRouter()
@router.get("/deliveries", response_model=List[DeliveryEntity])
def read_deliveries(db: Session = Depends(get_db)):
service = DeliveryService(db)
return service.get_all_deliveries()
@router.get("/deliveries/{delivery_id}", response_model=DeliveryEntity)
def read_delivery(delivery_id: int, db: Session = Depends(get_db)):
service = DeliveryService(db)
delivery = service.get_delivery_by_id(delivery_id)
if delivery is None:
raise HTTPException(status_code=404, detail="Delivery not found")
return delivery
@router.post("/deliveries", response_model=DeliveryEntity)
def create_delivery(delivery: DeliveryEntity, db: Session = Depends(get_db)):
service = DeliveryService(db)
return service.create_delivery(delivery)
@router.put("/deliveries/{delivery_id}", response_model=DeliveryEntity)
def update_delivery(delivery_id: int, delivery: DeliveryEntity, db: Session = Depends(get_db)):
service = DeliveryService(db)
updated_delivery = service.update_delivery(delivery_id, delivery)
if updated_delivery is None:
raise HTTPException(status_code=404, detail="Delivery not found")
return updated_delivery
@router.delete("/deliveries/{delivery_id}", response_model=bool)
def delete_delivery(delivery_id: int, db: Session = Depends(get_db)):
service = DeliveryService(db)
success = service.delete_delivery(delivery_id)
if not success:
raise HTTPException(status_code=404, detail="Delivery not found")
return success

View File

@ -1,52 +0,0 @@
from typing import List
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from app.infrastructure.database.dependencies import get_db
from app.core.entities.step import StepEntity
from app.core.usecases.step_service import StepService
router = APIRouter()
@router.get("/steps", response_model=List[StepEntity])
def read_steps(db: Session = Depends(get_db)):
service = StepService(db)
return service.get_all_steps()
@router.get("/steps/{step_id}", response_model=StepEntity)
def read_step(step_id: int, db: Session = Depends(get_db)):
service = StepService(db)
step = service.get_step_by_id(step_id)
if step is None:
raise HTTPException(status_code=404, detail="Step not found")
return step
@router.post("/steps", response_model=StepEntity)
def create_step(step: StepEntity, db: Session = Depends(get_db)):
service = StepService(db)
return service.create_step(step)
@router.put("/steps/{step_id}", response_model=StepEntity)
def update_step(step_id: int, step: StepEntity, db: Session = Depends(get_db)):
service = StepService(db)
updated_step = service.update_step(step_id, step)
if updated_step is None:
raise HTTPException(status_code=404, detail="Step not found")
return updated_step
@router.delete("/steps/{step_id}", response_model=bool)
def delete_step(step_id: int, db: Session = Depends(get_db)):
service = StepService(db)
success = service.delete_step(step_id)
if not success:
raise HTTPException(status_code=404, detail="Step not found")
return success

View File

@ -1,53 +0,0 @@
from typing import List
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from app.infrastructure.database.dependencies import get_db
from app.core.entities.storage_accessory import StorageAccessoryEntity
from app.core.usecases.storage_accessory_service import StorageAccessoryService
router = APIRouter()
@router.get("/storage-accessories", response_model=List[StorageAccessoryEntity])
def read_storage_accessories(db: Session = Depends(get_db)):
service = StorageAccessoryService(db)
return service.get_all_storage_accessories()
@router.get("/storage-accessories/{storage_accessories_id}", response_model=StorageAccessoryEntity)
def read_storage_accessory(storage_accessories_id: int, db: Session = Depends(get_db)):
service = StorageAccessoryService(db)
storage_accessory = service.get_storage_accessory_by_id(storage_accessories_id)
if storage_accessory is None:
raise HTTPException(status_code=404, detail="Storage Accessory not found")
return storage_accessory
@router.post("/storage-accessories", response_model=StorageAccessoryEntity)
def create_storage_accessory(storage_accessory: StorageAccessoryEntity, db: Session = Depends(get_db)):
service = StorageAccessoryService(db)
return service.create_storage_accessory(storage_accessory)
@router.put("/storage-accessories/{storage_accessories_id}", response_model=StorageAccessoryEntity)
def update_storage_accessory(storage_accessories_id: int, storage_accessory: StorageAccessoryEntity,
db: Session = Depends(get_db)):
service = StorageAccessoryService(db)
updated_storage_accessory = service.update_storage_accessory(storage_accessories_id, storage_accessory)
if updated_storage_accessory is None:
raise HTTPException(status_code=404, detail="Storage Accessory not found")
return updated_storage_accessory
@router.delete("/storage-accessories/{storage_accessories_id}", response_model=bool)
def delete_storage_accessory(storage_accessories_id: int, db: Session = Depends(get_db)):
service = StorageAccessoryService(db)
success = service.delete_storage_accessory(storage_accessories_id)
if not success:
raise HTTPException(status_code=404, detail="Storage Accessory not found")
return success

View File

@ -1,52 +0,0 @@
from typing import List
from fastapi import APIRouter, HTTPException, Depends
from sqlalchemy.orm import Session
from app.infrastructure.database.dependencies import get_db
from app.core.entities.storage import StorageEntity
from app.core.usecases.storage_service import StorageService
router = APIRouter()
@router.get("/storages", response_model=List[StorageEntity])
def read_storages(db: Session = Depends(get_db)):
service = StorageService(db)
return service.get_all_storages()
@router.get("/storages/{storage_id}", response_model=StorageEntity)
def read_storage(storage_id: int, db: Session = Depends(get_db)):
service = StorageService(db)
storage = service.get_storage_by_id(storage_id)
if storage is None:
raise HTTPException(status_code=404, detail="Storage not found")
return storage
@router.post("/storages", response_model=StorageEntity)
def create_storage(storage: StorageEntity, db: Session = Depends(get_db)):
service = StorageService(db)
return service.create_storage(storage)
@router.put("/storages/{storage_id}", response_model=StorageEntity)
def update_storage(storage_id: int, storage: StorageEntity, db: Session = Depends(get_db)):
service = StorageService(db)
updated_storage = service.update_storage(storage_id, storage)
if updated_storage is None:
raise HTTPException(status_code=404, detail="Storage not found")
return updated_storage
@router.delete("/storages/{storage_id}", response_model=bool)
def delete_storage(storage_id: int, db: Session = Depends(get_db)):
service = StorageService(db)
success = service.delete_storage(storage_id)
if not success:
raise HTTPException(status_code=404, detail="Storage not found")
return success

View File

@ -1,25 +1,21 @@
from fastapi import FastAPI
from app.infrastructure.database.database import init_db
from app.infrastructure.fastapi.user_routes import router as user_router
from app.infrastructure.fastapi.storage_routes import router as storage_router
from app.infrastructure.fastapi.storage_accessory_routes import router as storage_accessory_router
from app.infrastructure.fastapi.step_routes import router as step_router
from app.infrastructure.fastapi.status_routes import router as status_router
from app.infrastructure.fastapi.role_routes import router as role_router
from app.infrastructure.fastapi.order_routes import router as order_router
from app.infrastructure.fastapi.delivery_routes import router as delivery_router
from app.infrastructure.fastapi.accessory_routes import router as accessory_router
app = FastAPI()
init_db()
app.include_router(user_router, prefix="/api/users", tags=["users"])
app.include_router(storage_router, prefix="/api/storages", tags=["storages"])
app.include_router(storage_accessory_router, prefix="/api/storage_accessories", tags=["storage_accessories"])
app.include_router(step_router, prefix="/api/steps", tags=["steps"])
app.include_router(status_router, prefix="/api/statuses", tags=["statuses"])
app.include_router(role_router, prefix="/api/roles", tags=["roles"])
app.include_router(order_router, prefix="/api/orders", tags=["orders"])
app.include_router(delivery_router, prefix="/api/deliveries", tags=["deliveries"])
app.include_router(accessory_router, prefix="/api/accessories", tags=["accessories"])
# app.include_router(user_router, prefix="/api/users", tags=["users"])
# app.include_router(storage_router, prefix="/api/storages", tags=["storages"])
# app.include_router(storage_accessory_router, prefix="/api/storage_accessories", tags=["storage_accessories"])
# app.include_router(step_router, prefix="/api/steps", tags=["steps"])
# app.include_router(status_router, prefix="/api/statuses", tags=["statuses"])
# app.include_router(role_router, prefix="/api/roles", tags=["roles"])
# app.include_router(order_router, prefix="/api/orders", tags=["orders"])
# app.include_router(delivery_router, prefix="/api/deliveries", tags=["deliveries"])
# app.include_router(accessory_router, prefix="/api/accessories", tags=["accessories"])