1 line
35 KiB
JSON
1 line
35 KiB
JSON
{"title":"مدلها","markdown":{"yaml":{"title":"مدلها","author":"تیم توسعه","date":"2025-08-17","format":"html","lang":"fa"},"headingText":"فیلدهای موجود در دیتابیس","containsRefs":false,"markdown":"\n\n\nمدل *درخواست* کاربر که شامل رویههای واردات، صادرات، ترانزیت، تدارکات، تجهیزات، سوخترسانی، آبرسانی، عودت تجهیزات (ورود و خروج) میشود.\n\n```js\nconst mongoose = require('mongoose');\n\nconst REQUEST_STATUSES = {\n\tOPEN: 0, // باز\n\tIN_PROGRESS: 1, // در حال بررسی\n\tCLOSE: 2, // بسته شده\n\tEND: 3, // پایان عملیات\n};\n\nconst REQUEST_PERMISSIONS_STATUSES = {\n\tNOT_HAS: 0, // ندارد\n\tHAS: 1, // دارد\n\tCANCEL: 2, // لغو شده\n\tIN_PROGRESS: 3, // در حال بررسی\n};\n\n// ['صادرات', 'واردات', 'ترانزیت', 'آب رسانی', 'سوخت رسانی', 'تجهیزات', 'تدارکات'],\nconst OPERATION_TYPES = {\n\tEXPORT: 0,\n\tIMPORT: 1,\n\tTRANSIT: 2,\n\tWATER: 3,\n\tFUEL: 4,\n\tEQUIPMENT: 5,\n\tPROVISION: 6,\n};\n\n// یک تردد، چند تردد، شهری\nconst TRAFFIC_TYPES = {\n\tONE_DIRECTION: 0,\n\tMULTIPLE_DIRECTION: 1,\n\tCITY: 2,\n\tENTRANCE_PERMISSION: 3,\n\tEXIT_PERMISSION: 4,\n};\n\n// کانتینری، نفتی، عمومی\nconst TERMINAL_OPTIONS = {\n\tCONTAINER: 0,\n\tOIL: 1,\n\tGENERAL: 2,\n\tSERVICE: 3,\n};\n\n// تخلیه، بارگیری، تشریفات گمرکی\nconst ENTRANCE_TRAFFIC_TYPES = {\n\tLOAD: 0,\n\tUNLOAD: 1,\n\tCUSTOM: 2,\n\tSERVICE: 3,\n};\n\nconst requestSchema = new mongoose.Schema(\n\t{\n کسی که درخواست ثبت میکنه - واردات صادرات و ...\n\t\trequestBy: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'User',\n\t\t},\n\n به نمایندگی از ... درخواستها ثبت میشه. نماینده در واقع\n\t\trequestFor: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'User',\n\t\t\t},\n\t\t],\n\n // نوع عملیات درخواست مثل واردات صادرات و ...\n\t\toperationType: {\n\t\t\ttype: Number,\n\t\t\trequired: [true, 'نوع عملیات الزامی می باشد.'],\n\t\t\tenum: Object.values(OPERATION_TYPES),\n\t\t},\n\n // فیلدی حمل یکسره و عملیاتی در آن ذخیره میشود\n\t\toptions: {\n\t\t\ttype: String,\n\t\t},\n\n // فیلدی که جهت در آن ذخیره میشود. جهت تخلیه، بارگیری و تشریفات گمرکی و ...\n\t\tentranceTrafficType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(ENTRANCE_TRAFFIC_TYPES),\n\t\t},\n\n // حساسیت کالا در این فیلد ذخیره میشود\n\t\tdanger: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'dangerType',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // تاییده نهایی نوع تردد که توسط ادمین وارد میشود\n\t\ttraffic: {\n\t\t\t// تردد تایید شده توسط مجوز دهنده\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // اظهار نوع تردد که توسط کاربر ثبت میشود و نهایی نیست\n\t\ttrafficType: {\n\t\t\t// اظهار تردد\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // پایانهای که کالا برای آن ثبت میشود\n\t\tterminalOption: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TERMINAL_OPTIONS),\n\t\t},\n\n // آدرس فایل حواله سوخت و ...\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t},\n\n // نام محصول یا کالایی که کاربر وارد میکند\n\t\tname: {\n\t\t\t// نام بار\n\t\t\ttype: String,\n\t\t\ttrim: true,\n\t\t},\n\n // شماره سفر\n\t\tvoyageNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // کد قبض انبار اگر کالا عمومی و یا کانتینری باشد\n\t\treceiptNumber: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t\ttrim: true,\n\t\t\t},\n\t\t],\n\n // تناژ کالا\n\t\ttonaj: {\n\t\t\ttype: String,\n\t\t},\n\n // عددی که برای تناژ استفاده میشود\n\t\ttonajNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // واحد تناژ کالا\n\t\ttonajType: {\n\t\t\ttype: String,\n\t\t},\n\n // تعداد محصول یا بار\n\t\tpackageNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره پلاکهای ثبت شده برای درخواست کاربر\n\t\tplates: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'plates',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // بدون استفاده\n\t\ttruckNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // اسم شناور\n\t\tvesselName: String,\n\n // اسم کشتی رانی صاحب شناور\n\t\tshipping: {\n\t\t\ttype: String,\n\t\t},\n\n // منطقه عملیاتی\n\t\tstoreRoom: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'storeRoom',\n\t\t\trequired: false,\n\t\t},\n // نوع منطقه عملیاتی - که استفاده نمیشود\n\t\tstoreRoomType: {\n\t\t\ttype: String,\n\t\t},\n\n // دستگاه نظارت درخواست\n\t\tsupervisionDepartment: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'supervisionDepartment',\n\t\t\trequired: false,\n\t\t},\n\n // کاربری که برای درخواست مشاور است\n\t\tconsultingUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tconsultingUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tconsultingStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tcustomsStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tselectedStores: {\n\t\t\ttype: Array,\n\t\t},\n\n // مقصد کالا\n\t\tdestination: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\ttrim: true,\n\t\t\tref: 'city',\n\t\t},\n\n // مجوز یگان حفاظت \n\t\tpermissionGuard: {\n\t\t\t// مجوز یگان حفاظت\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_PERMISSIONS_STATUSES),\n\t\t\tdefault: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,\n\t\t},\n\n // مجوز پایانه اسکله برای حرکت کردن ناوگان حمل از پایانه کامیونی\n\t\tpermissionPier: {\n\t\t\t// مجوز اسکله\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_PERMISSIONS_STATUSES),\n\t\t\tdefault: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,\n\t\t},\n\n // اظهارات کوتاژ کاربر\n\t\tuserCottages: [\n\t\t\t//اظهار کوتاژ\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t\ttrim: true,\n\t\t\t},\n\t\t],\n\t\tdate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdateString: {\n\t\t\ttype: String,\n\t\t},\n\n // کامنت اسکله - بروز میشود\n\t\tpierComment: {\n\t\t\ttype: String,\n\t\t},\n\n // پایانه حمل\n\t\tterminalTruckName: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'terminals',\n\t\t\trequired: false,\n\t\t},\n\n // شماره حواله سوخت\n\t\tgasolineRequestNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره سفارش\n\t\torderNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // دروازهای که درخواست برای \n\t\tgateName: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'gate',\n\t\t\trequired: [true, 'نام دروازه الزامی می باشد.'],\n\t\t},\n\n // کد رهگیری تولید شده\n\t\trequestNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tterminalUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tterminalUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tpermissionPierDate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tpermissionPierDateString: {\n\t\t\ttype: String,\n\t\t},\n\n // وضعیت درخواست کاربر\n\t\tstatus: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_STATUSES),\n\t\t\tdefault: REQUEST_STATUSES.IN_PROGRESS,\n\t\t},\n\n // اظهارات کوتاژ کاربر تایید شده است یا نه\n\t\tcottageVerified: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tverfiedAt: {\n\t\t\ttype: Date,\n\t\t\trequired: false,\n\t\t},\n\t\tcottages: [\n\t\t\t// کوتاژهای تایید شده توسط سرویس استعلام گمرک\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'cottage',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // فیلدی برای کانتینر خالی\n\t\temptyContainer: {\n\t\t\ttype: Boolean,\n\t\t},\n\n // اگر کالا خطرناک باشد \n\t\tunNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // اگر کالا خطرناک باشد\n\t\tcasNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tprocess: {\n\t\t\t// شروع فرآیند\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'process',\n\t\t},\n\t\tcommodityList: [\n\t\t\t// لیست اقلام\n\t\t\t{\n\t\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\t\tref: 'equipements',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\t},\n\t{ timestamps: true }\n);\n\nconst Request = mongoose.model('request', requestSchema);\n\nmodule.exports = {\n\tRequest,\n\tREQUEST_STATUSES,\n\tREQUEST_PERMISSIONS_STATUSES,\n\tTERMINAL_OPTIONS,\n\tTRAFFIC_TYPES,\n\tOPERATION_TYPES,\n};\n\n```\n\n\n---\nمدل مربوط به شماره پلاک درخواستها که کاربر اطلاعات راننده را وارد میکند. \n\n```js\nconst mongoose = require('mongoose');\nconst { TRAFFIC_TYPES } = require('./request.model');\n\n// وضعیت فعلی پلاک که در چه مرحلهای است\nconst PLATE_STATES = {\n\tOUT_PORT: 0,\n\tIN_PORT: 1,\n\tCLOSED: 2,\n};\n\n// پلاک مجوز حرکت دارد یا ندارد\nconst PLATE_PERMISSIONS = {\n\tNOT_HAS: 0,\n\tHAS: 1,\n\tPENDING: 2,\n};\n\n// یگان حفاظت مجوز ورود و خروج پلاک را بصورت اتوماتیک توسط دوربین پلاکخوان ثبت کرده یا بصورت دستی\nconst GUARD_REGISTRATION_TYPES = {\n\tAUTO: 0,\n\tMANUAL: 1,\n};\n\n// مدل پلاک\nconst platesSchema = new mongoose.Schema(\n\t{\n // شماره پلاک\n\t\tplate: {\n\t\t\ttype: String,\n\t\t\ttrim: true,\n\t\t},\n\t\t//مجوز ورود به بندر که هم یگان حفاظت برای چند ترددی و شهری صادر می کند و هم پایانه کامیونی\n\t\tpermission: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(PLATE_PERMISSIONS),\n\t\t},\n\n // مجوز یگان حفاظت\n\t\tpermissionGuard: {\n\t\t\ttype: Number,\n\t\t},\n\t\tpermissionGuardDate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: Number,\n\t\t},\n\n // نوع ترددی که توسط ادمین ثبت شده است\n\t\ttraffic: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // زمان ورود ناوگان حمل به درون بندر\n\t\tentranceTime: [\n\t\t\t{\n\t\t\t\ttype: Date,\n\t\t\t},\n\t\t],\n\t\tentranceTimeString: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n // زمان خروج ناوگان حمل از بندر\n\t\texitTime: [\n\t\t\t{\n\t\t\t\ttype: Date,\n\t\t\t},\n\t\t],\n\t\texitTimeString: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n // مجوز پایانه راهداری\n\t\tdelfardTerminalTime: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdelfardTerminalTimeString: {\n\t\t\ttype: String,\n\t\t},\n\n // زمان مجوز گرفتن از پایانه کامیونی\n\t\ttruckTerminalTime: {\n\t\t\ttype: Date,\n\t\t},\n\t\ttruckTerminalTimeString: {\n\t\t\ttype: String,\n\t\t},\n\n // تخلف\n\t\tviolationType: {\n\t\t\ttype: String,\n\t\t},\n\t\tviolationComment: {\n\t\t\ttype: String,\n\t\t},\n\n // حساسیت کالایی که حمل میکند\n\t\tdangers: [\n\t\t\t{\n\t\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\t\tref: 'dangerType',\n\t\t\t},\n\t\t],\n\t\tdate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdateString: {\n\t\t\ttype: String,\n\t\t},\n\n // اگر درخواست از نوع کانتینری باشد شمارههای کانتینر هم باید وارد شود\n\t\tcontainerNumbers: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n\t\tcloseDate: {\n\t\t\ttype: Date,\n\t\t},\n\n // اسم راننده\n\t\tdriverName: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره پاسپورت برای خارجیها و کد ملی برای داخلیها\n\t\tdriverPersonalCode: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره موبایل راننده\n\t\tdriverMobile: {\n\t\t\ttype: String,\n\t\t},\n\n // ملیت راننده\n\t\tdriverNationality: {\n\t\t\ttype: String,\n\t\t},\n\n // نوع ناوگان حمل\n\t\ttruckType: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'trucks',\n\t\t},\n\n // کدی که اگر نوع ناوگان از نوع چادری یا یخچالی باشد\n\t\tTYnumber: {\n\t\t\ttype: String,\n\t\t},\n\n // درخواست کنسل شده است یا نه\n\t\tisCancel: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tbijakType: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakNumber: {\n\t\t\ttype: Number,\n\t\t},\n\t\tbijakTruckScaleNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakGCOMS: {\n\t\t\ttype: Array,\n\t\t},\n\n // درخواست برای بستن \n\t\trequestForClose: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\trequestForCloseFullName: {\n\t\t\ttype: String,\n\t\t},\n\n // نوع پلاک که ایرانی خارجی و منطقه آزاد باشد\n\t\tplateOption: {\n\t\t\ttype: String,\n\t\t},\n\t\tplateState: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(PLATE_STATES),\n\t\t\tdefault: PLATE_STATES.OUT_PORT,\n\t\t},\n\n // نوع ورود پلاک به بندر\n\t\tentranceGuardRegistrationType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(GUARD_REGISTRATION_TYPES),\n\t\t},\n\n // نوع خروج پلاک از بندر\n\t\texitGuardRegistrationType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(GUARD_REGISTRATION_TYPES),\n\t\t},\n\t\t// transportation\n\n // شرکت حمل اگر درخواست شهری ثبت شود\n\t\ttransportationCompany: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'terminals',\n\t\t\trequired: false,\n\t\t},\n\t},\n\t{ timestamps: true }\n);\n\nconst Plate = mongoose.model('plates', platesSchema);\n\nmodule.exports = { Plate, PLATE_STATES, PLATE_PERMISSIONS };\n```","srcMarkdownNoYaml":"\n\n# فیلدهای موجود در دیتابیس\n\nمدل *درخواست* کاربر که شامل رویههای واردات، صادرات، ترانزیت، تدارکات، تجهیزات، سوخترسانی، آبرسانی، عودت تجهیزات (ورود و خروج) میشود.\n\n```js\nconst mongoose = require('mongoose');\n\nconst REQUEST_STATUSES = {\n\tOPEN: 0, // باز\n\tIN_PROGRESS: 1, // در حال بررسی\n\tCLOSE: 2, // بسته شده\n\tEND: 3, // پایان عملیات\n};\n\nconst REQUEST_PERMISSIONS_STATUSES = {\n\tNOT_HAS: 0, // ندارد\n\tHAS: 1, // دارد\n\tCANCEL: 2, // لغو شده\n\tIN_PROGRESS: 3, // در حال بررسی\n};\n\n// ['صادرات', 'واردات', 'ترانزیت', 'آب رسانی', 'سوخت رسانی', 'تجهیزات', 'تدارکات'],\nconst OPERATION_TYPES = {\n\tEXPORT: 0,\n\tIMPORT: 1,\n\tTRANSIT: 2,\n\tWATER: 3,\n\tFUEL: 4,\n\tEQUIPMENT: 5,\n\tPROVISION: 6,\n};\n\n// یک تردد، چند تردد، شهری\nconst TRAFFIC_TYPES = {\n\tONE_DIRECTION: 0,\n\tMULTIPLE_DIRECTION: 1,\n\tCITY: 2,\n\tENTRANCE_PERMISSION: 3,\n\tEXIT_PERMISSION: 4,\n};\n\n// کانتینری، نفتی، عمومی\nconst TERMINAL_OPTIONS = {\n\tCONTAINER: 0,\n\tOIL: 1,\n\tGENERAL: 2,\n\tSERVICE: 3,\n};\n\n// تخلیه، بارگیری، تشریفات گمرکی\nconst ENTRANCE_TRAFFIC_TYPES = {\n\tLOAD: 0,\n\tUNLOAD: 1,\n\tCUSTOM: 2,\n\tSERVICE: 3,\n};\n\nconst requestSchema = new mongoose.Schema(\n\t{\n کسی که درخواست ثبت میکنه - واردات صادرات و ...\n\t\trequestBy: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'User',\n\t\t},\n\n به نمایندگی از ... درخواستها ثبت میشه. نماینده در واقع\n\t\trequestFor: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'User',\n\t\t\t},\n\t\t],\n\n // نوع عملیات درخواست مثل واردات صادرات و ...\n\t\toperationType: {\n\t\t\ttype: Number,\n\t\t\trequired: [true, 'نوع عملیات الزامی می باشد.'],\n\t\t\tenum: Object.values(OPERATION_TYPES),\n\t\t},\n\n // فیلدی حمل یکسره و عملیاتی در آن ذخیره میشود\n\t\toptions: {\n\t\t\ttype: String,\n\t\t},\n\n // فیلدی که جهت در آن ذخیره میشود. جهت تخلیه، بارگیری و تشریفات گمرکی و ...\n\t\tentranceTrafficType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(ENTRANCE_TRAFFIC_TYPES),\n\t\t},\n\n // حساسیت کالا در این فیلد ذخیره میشود\n\t\tdanger: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'dangerType',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // تاییده نهایی نوع تردد که توسط ادمین وارد میشود\n\t\ttraffic: {\n\t\t\t// تردد تایید شده توسط مجوز دهنده\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // اظهار نوع تردد که توسط کاربر ثبت میشود و نهایی نیست\n\t\ttrafficType: {\n\t\t\t// اظهار تردد\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // پایانهای که کالا برای آن ثبت میشود\n\t\tterminalOption: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TERMINAL_OPTIONS),\n\t\t},\n\n // آدرس فایل حواله سوخت و ...\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t},\n\n // نام محصول یا کالایی که کاربر وارد میکند\n\t\tname: {\n\t\t\t// نام بار\n\t\t\ttype: String,\n\t\t\ttrim: true,\n\t\t},\n\n // شماره سفر\n\t\tvoyageNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // کد قبض انبار اگر کالا عمومی و یا کانتینری باشد\n\t\treceiptNumber: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t\ttrim: true,\n\t\t\t},\n\t\t],\n\n // تناژ کالا\n\t\ttonaj: {\n\t\t\ttype: String,\n\t\t},\n\n // عددی که برای تناژ استفاده میشود\n\t\ttonajNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // واحد تناژ کالا\n\t\ttonajType: {\n\t\t\ttype: String,\n\t\t},\n\n // تعداد محصول یا بار\n\t\tpackageNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره پلاکهای ثبت شده برای درخواست کاربر\n\t\tplates: [\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'plates',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // بدون استفاده\n\t\ttruckNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // اسم شناور\n\t\tvesselName: String,\n\n // اسم کشتی رانی صاحب شناور\n\t\tshipping: {\n\t\t\ttype: String,\n\t\t},\n\n // منطقه عملیاتی\n\t\tstoreRoom: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'storeRoom',\n\t\t\trequired: false,\n\t\t},\n // نوع منطقه عملیاتی - که استفاده نمیشود\n\t\tstoreRoomType: {\n\t\t\ttype: String,\n\t\t},\n\n // دستگاه نظارت درخواست\n\t\tsupervisionDepartment: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'supervisionDepartment',\n\t\t\trequired: false,\n\t\t},\n\n // کاربری که برای درخواست مشاور است\n\t\tconsultingUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tconsultingUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tconsultingStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tcustomsStatus: {\n\t\t\ttype: String,\n\t\t},\n\t\tselectedStores: {\n\t\t\ttype: Array,\n\t\t},\n\n // مقصد کالا\n\t\tdestination: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\ttrim: true,\n\t\t\tref: 'city',\n\t\t},\n\n // مجوز یگان حفاظت \n\t\tpermissionGuard: {\n\t\t\t// مجوز یگان حفاظت\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_PERMISSIONS_STATUSES),\n\t\t\tdefault: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,\n\t\t},\n\n // مجوز پایانه اسکله برای حرکت کردن ناوگان حمل از پایانه کامیونی\n\t\tpermissionPier: {\n\t\t\t// مجوز اسکله\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_PERMISSIONS_STATUSES),\n\t\t\tdefault: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,\n\t\t},\n\n // اظهارات کوتاژ کاربر\n\t\tuserCottages: [\n\t\t\t//اظهار کوتاژ\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t\ttrim: true,\n\t\t\t},\n\t\t],\n\t\tdate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdateString: {\n\t\t\ttype: String,\n\t\t},\n\n // کامنت اسکله - بروز میشود\n\t\tpierComment: {\n\t\t\ttype: String,\n\t\t},\n\n // پایانه حمل\n\t\tterminalTruckName: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'terminals',\n\t\t\trequired: false,\n\t\t},\n\n // شماره حواله سوخت\n\t\tgasolineRequestNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره سفارش\n\t\torderNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // دروازهای که درخواست برای \n\t\tgateName: {\n\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\tref: 'gate',\n\t\t\trequired: [true, 'نام دروازه الزامی می باشد.'],\n\t\t},\n\n // کد رهگیری تولید شده\n\t\trequestNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tsupervisionUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tpropertyBossUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tHSEUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tportBossUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tterminalUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tterminalUsername: {\n\t\t\ttype: String,\n\t\t},\n\t\tpermissionPierDate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tpermissionPierDateString: {\n\t\t\ttype: String,\n\t\t},\n\n // وضعیت درخواست کاربر\n\t\tstatus: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(REQUEST_STATUSES),\n\t\t\tdefault: REQUEST_STATUSES.IN_PROGRESS,\n\t\t},\n\n // اظهارات کوتاژ کاربر تایید شده است یا نه\n\t\tcottageVerified: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tverfiedAt: {\n\t\t\ttype: Date,\n\t\t\trequired: false,\n\t\t},\n\t\tcottages: [\n\t\t\t// کوتاژهای تایید شده توسط سرویس استعلام گمرک\n\t\t\t{\n\t\t\t\ttype: mongoose.Types.ObjectId,\n\t\t\t\tref: 'cottage',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\n // فیلدی برای کانتینر خالی\n\t\temptyContainer: {\n\t\t\ttype: Boolean,\n\t\t},\n\n // اگر کالا خطرناک باشد \n\t\tunNumber: {\n\t\t\ttype: String,\n\t\t},\n\n // اگر کالا خطرناک باشد\n\t\tcasNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tprocess: {\n\t\t\t// شروع فرآیند\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'process',\n\t\t},\n\t\tcommodityList: [\n\t\t\t// لیست اقلام\n\t\t\t{\n\t\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\t\tref: 'equipements',\n\t\t\t\trequired: false,\n\t\t\t},\n\t\t],\n\t},\n\t{ timestamps: true }\n);\n\nconst Request = mongoose.model('request', requestSchema);\n\nmodule.exports = {\n\tRequest,\n\tREQUEST_STATUSES,\n\tREQUEST_PERMISSIONS_STATUSES,\n\tTERMINAL_OPTIONS,\n\tTRAFFIC_TYPES,\n\tOPERATION_TYPES,\n};\n\n```\n\n\n---\nمدل مربوط به شماره پلاک درخواستها که کاربر اطلاعات راننده را وارد میکند. \n\n```js\nconst mongoose = require('mongoose');\nconst { TRAFFIC_TYPES } = require('./request.model');\n\n// وضعیت فعلی پلاک که در چه مرحلهای است\nconst PLATE_STATES = {\n\tOUT_PORT: 0,\n\tIN_PORT: 1,\n\tCLOSED: 2,\n};\n\n// پلاک مجوز حرکت دارد یا ندارد\nconst PLATE_PERMISSIONS = {\n\tNOT_HAS: 0,\n\tHAS: 1,\n\tPENDING: 2,\n};\n\n// یگان حفاظت مجوز ورود و خروج پلاک را بصورت اتوماتیک توسط دوربین پلاکخوان ثبت کرده یا بصورت دستی\nconst GUARD_REGISTRATION_TYPES = {\n\tAUTO: 0,\n\tMANUAL: 1,\n};\n\n// مدل پلاک\nconst platesSchema = new mongoose.Schema(\n\t{\n // شماره پلاک\n\t\tplate: {\n\t\t\ttype: String,\n\t\t\ttrim: true,\n\t\t},\n\t\t//مجوز ورود به بندر که هم یگان حفاظت برای چند ترددی و شهری صادر می کند و هم پایانه کامیونی\n\t\tpermission: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(PLATE_PERMISSIONS),\n\t\t},\n\n // مجوز یگان حفاظت\n\t\tpermissionGuard: {\n\t\t\ttype: Number,\n\t\t},\n\t\tpermissionGuardDate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tstatus: {\n\t\t\ttype: Number,\n\t\t},\n\n // نوع ترددی که توسط ادمین ثبت شده است\n\t\ttraffic: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(TRAFFIC_TYPES),\n\t\t},\n\n // زمان ورود ناوگان حمل به درون بندر\n\t\tentranceTime: [\n\t\t\t{\n\t\t\t\ttype: Date,\n\t\t\t},\n\t\t],\n\t\tentranceTimeString: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n // زمان خروج ناوگان حمل از بندر\n\t\texitTime: [\n\t\t\t{\n\t\t\t\ttype: Date,\n\t\t\t},\n\t\t],\n\t\texitTimeString: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n // مجوز پایانه راهداری\n\t\tdelfardTerminalTime: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdelfardTerminalTimeString: {\n\t\t\ttype: String,\n\t\t},\n\n // زمان مجوز گرفتن از پایانه کامیونی\n\t\ttruckTerminalTime: {\n\t\t\ttype: Date,\n\t\t},\n\t\ttruckTerminalTimeString: {\n\t\t\ttype: String,\n\t\t},\n\n // تخلف\n\t\tviolationType: {\n\t\t\ttype: String,\n\t\t},\n\t\tviolationComment: {\n\t\t\ttype: String,\n\t\t},\n\n // حساسیت کالایی که حمل میکند\n\t\tdangers: [\n\t\t\t{\n\t\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\t\tref: 'dangerType',\n\t\t\t},\n\t\t],\n\t\tdate: {\n\t\t\ttype: Date,\n\t\t},\n\t\tdateString: {\n\t\t\ttype: String,\n\t\t},\n\n // اگر درخواست از نوع کانتینری باشد شمارههای کانتینر هم باید وارد شود\n\t\tcontainerNumbers: [\n\t\t\t{\n\t\t\t\ttype: String,\n\t\t\t},\n\t\t],\n\n\t\tcloseDate: {\n\t\t\ttype: Date,\n\t\t},\n\n // اسم راننده\n\t\tdriverName: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره پاسپورت برای خارجیها و کد ملی برای داخلیها\n\t\tdriverPersonalCode: {\n\t\t\ttype: String,\n\t\t},\n\n // شماره موبایل راننده\n\t\tdriverMobile: {\n\t\t\ttype: String,\n\t\t},\n\n // ملیت راننده\n\t\tdriverNationality: {\n\t\t\ttype: String,\n\t\t},\n\n // نوع ناوگان حمل\n\t\ttruckType: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'trucks',\n\t\t},\n\n // کدی که اگر نوع ناوگان از نوع چادری یا یخچالی باشد\n\t\tTYnumber: {\n\t\t\ttype: String,\n\t\t},\n\n // درخواست کنسل شده است یا نه\n\t\tisCancel: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tbijakType: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakNumber: {\n\t\t\ttype: Number,\n\t\t},\n\t\tbijakTruckScaleNumber: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakUser: {\n\t\t\ttype: String,\n\t\t},\n\t\tbijakGCOMS: {\n\t\t\ttype: Array,\n\t\t},\n\n // درخواست برای بستن \n\t\trequestForClose: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\trequestForCloseFullName: {\n\t\t\ttype: String,\n\t\t},\n\n // نوع پلاک که ایرانی خارجی و منطقه آزاد باشد\n\t\tplateOption: {\n\t\t\ttype: String,\n\t\t},\n\t\tplateState: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(PLATE_STATES),\n\t\t\tdefault: PLATE_STATES.OUT_PORT,\n\t\t},\n\n // نوع ورود پلاک به بندر\n\t\tentranceGuardRegistrationType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(GUARD_REGISTRATION_TYPES),\n\t\t},\n\n // نوع خروج پلاک از بندر\n\t\texitGuardRegistrationType: {\n\t\t\ttype: Number,\n\t\t\tenum: Object.values(GUARD_REGISTRATION_TYPES),\n\t\t},\n\t\t// transportation\n\n // شرکت حمل اگر درخواست شهری ثبت شود\n\t\ttransportationCompany: {\n\t\t\ttype: mongoose.SchemaTypes.ObjectId,\n\t\t\tref: 'terminals',\n\t\t\trequired: false,\n\t\t},\n\t},\n\t{ timestamps: true }\n);\n\nconst Plate = mongoose.model('plates', platesSchema);\n\nmodule.exports = { Plate, PLATE_STATES, PLATE_PERMISSIONS };\n```"},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","css":["../styles.css"],"output-file":"models.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"fa","fig-responsive":true,"quarto-version":"1.7.33","theme":"default","title":"مدلها","author":"تیم توسعه","date":"2025-08-17"},"extensions":{"book":{"multiFile":true}}}},"projectFormats":["html"]} |