مدلها
فیلدهای موجود در دیتابیس
مدل درخواست کاربر که شامل رویههای واردات، صادرات، ترانزیت، تدارکات، تجهیزات، سوخترسانی، آبرسانی، عودت تجهیزات (ورود و خروج) میشود.
const mongoose = require('mongoose');
const REQUEST_STATUSES = {
OPEN: 0, // باز
IN_PROGRESS: 1, // در حال بررسی
CLOSE: 2, // بسته شده
END: 3, // پایان عملیات
};
const REQUEST_PERMISSIONS_STATUSES = {
NOT_HAS: 0, // ندارد
HAS: 1, // دارد
CANCEL: 2, // لغو شده
IN_PROGRESS: 3, // در حال بررسی
};
// ['صادرات', 'واردات', 'ترانزیت', 'آب رسانی', 'سوخت رسانی', 'تجهیزات', 'تدارکات'],
const OPERATION_TYPES = {
EXPORT: 0,
IMPORT: 1,
TRANSIT: 2,
WATER: 3,
FUEL: 4,
EQUIPMENT: 5,
PROVISION: 6,
};
// یک تردد، چند تردد، شهری
const TRAFFIC_TYPES = {
ONE_DIRECTION: 0,
MULTIPLE_DIRECTION: 1,
CITY: 2,
ENTRANCE_PERMISSION: 3,
EXIT_PERMISSION: 4,
};
// کانتینری، نفتی، عمومی
const TERMINAL_OPTIONS = {
CONTAINER: 0,
OIL: 1,
GENERAL: 2,
SERVICE: 3,
};
// تخلیه، بارگیری، تشریفات گمرکی
const ENTRANCE_TRAFFIC_TYPES = {
LOAD: 0,
UNLOAD: 1,
CUSTOM: 2,
SERVICE: 3,
};
const requestSchema = new mongoose.Schema(
{
کسی که درخواست ثبت میکنه - واردات صادرات و ...
requestBy: {
type: mongoose.Types.ObjectId,
ref: 'User',
},
به نمایندگی از ... درخواستها ثبت میشه. نماینده در واقع
requestFor: [
{
type: mongoose.Types.ObjectId,
ref: 'User',
},
],
// نوع عملیات درخواست مثل واردات صادرات و ...
operationType: {
type: Number,
required: [true, 'نوع عملیات الزامی می باشد.'],
enum: Object.values(OPERATION_TYPES),
},
// فیلدی حمل یکسره و عملیاتی در آن ذخیره میشود
options: {
type: String,
},
// فیلدی که جهت در آن ذخیره میشود. جهت تخلیه، بارگیری و تشریفات گمرکی و ...
entranceTrafficType: {
type: Number,
enum: Object.values(ENTRANCE_TRAFFIC_TYPES),
},
// حساسیت کالا در این فیلد ذخیره میشود
danger: [
{
type: mongoose.Types.ObjectId,
ref: 'dangerType',
required: false,
},
],
// تاییده نهایی نوع تردد که توسط ادمین وارد میشود
traffic: {
// تردد تایید شده توسط مجوز دهنده
type: Number,
enum: Object.values(TRAFFIC_TYPES),
},
// اظهار نوع تردد که توسط کاربر ثبت میشود و نهایی نیست
trafficType: {
// اظهار تردد
type: Number,
enum: Object.values(TRAFFIC_TYPES),
},
// پایانهای که کالا برای آن ثبت میشود
terminalOption: {
type: Number,
enum: Object.values(TERMINAL_OPTIONS),
},
// آدرس فایل حواله سوخت و ...
filename: {
type: String,
},
// نام محصول یا کالایی که کاربر وارد میکند
name: {
// نام بار
type: String,
trim: true,
},
// شماره سفر
voyageNumber: {
type: String,
},
// کد قبض انبار اگر کالا عمومی و یا کانتینری باشد
receiptNumber: [
{
type: String,
trim: true,
},
],
// تناژ کالا
tonaj: {
type: String,
},
// عددی که برای تناژ استفاده میشود
tonajNumber: {
type: String,
},
// واحد تناژ کالا
tonajType: {
type: String,
},
// تعداد محصول یا بار
packageNumber: {
type: String,
},
// شماره پلاکهای ثبت شده برای درخواست کاربر
plates: [
{
type: mongoose.Types.ObjectId,
ref: 'plates',
required: false,
},
],
// بدون استفاده
truckNumber: {
type: String,
},
// اسم شناور
vesselName: String,
// اسم کشتی رانی صاحب شناور
shipping: {
type: String,
},
// منطقه عملیاتی
storeRoom: {
type: mongoose.Types.ObjectId,
ref: 'storeRoom',
required: false,
},
// نوع منطقه عملیاتی - که استفاده نمیشود
storeRoomType: {
type: String,
},
// دستگاه نظارت درخواست
supervisionDepartment: {
type: mongoose.Types.ObjectId,
ref: 'supervisionDepartment',
required: false,
},
// کاربری که برای درخواست مشاور است
consultingUser: {
type: String,
},
consultingUsername: {
type: String,
},
consultingStatus: {
type: String,
},
supervisionStatus: {
type: String,
},
propertyBossStatus: {
type: String,
},
HSEStatus: {
type: String,
},
portBossStatus: {
type: String,
},
customsStatus: {
type: String,
},
selectedStores: {
type: Array,
},
// مقصد کالا
destination: {
type: mongoose.SchemaTypes.ObjectId,
trim: true,
ref: 'city',
},
// مجوز یگان حفاظت
permissionGuard: {
// مجوز یگان حفاظت
type: Number,
enum: Object.values(REQUEST_PERMISSIONS_STATUSES),
default: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,
},
// مجوز پایانه اسکله برای حرکت کردن ناوگان حمل از پایانه کامیونی
permissionPier: {
// مجوز اسکله
type: Number,
enum: Object.values(REQUEST_PERMISSIONS_STATUSES),
default: REQUEST_PERMISSIONS_STATUSES.IN_PROGRESS,
},
// اظهارات کوتاژ کاربر
userCottages: [
//اظهار کوتاژ
{
type: String,
trim: true,
},
],
date: {
type: Date,
},
dateString: {
type: String,
},
// کامنت اسکله - بروز میشود
pierComment: {
type: String,
},
// پایانه حمل
terminalTruckName: {
type: mongoose.Types.ObjectId,
ref: 'terminals',
required: false,
},
// شماره حواله سوخت
gasolineRequestNumber: {
type: String,
},
// شماره سفارش
orderNumber: {
type: String,
},
// دروازهای که درخواست برای
gateName: {
type: mongoose.Types.ObjectId,
ref: 'gate',
required: [true, 'نام دروازه الزامی می باشد.'],
},
// کد رهگیری تولید شده
requestNumber: {
type: String,
},
supervisionUser: {
type: String,
},
supervisionUsername: {
type: String,
},
propertyBossUser: {
type: String,
},
propertyBossUsername: {
type: String,
},
HSEUser: {
type: String,
},
HSEUsername: {
type: String,
},
portBossUser: {
type: String,
},
portBossUsername: {
type: String,
},
terminalUser: {
type: String,
},
terminalUsername: {
type: String,
},
permissionPierDate: {
type: Date,
},
permissionPierDateString: {
type: String,
},
// وضعیت درخواست کاربر
status: {
type: Number,
enum: Object.values(REQUEST_STATUSES),
default: REQUEST_STATUSES.IN_PROGRESS,
},
// اظهارات کوتاژ کاربر تایید شده است یا نه
cottageVerified: {
type: Boolean,
default: false,
},
verfiedAt: {
type: Date,
required: false,
},
cottages: [
// کوتاژهای تایید شده توسط سرویس استعلام گمرک
{
type: mongoose.Types.ObjectId,
ref: 'cottage',
required: false,
},
],
// فیلدی برای کانتینر خالی
emptyContainer: {
type: Boolean,
},
// اگر کالا خطرناک باشد
unNumber: {
type: String,
},
// اگر کالا خطرناک باشد
casNumber: {
type: String,
},
process: {
// شروع فرآیند
type: mongoose.SchemaTypes.ObjectId,
ref: 'process',
},
commodityList: [
// لیست اقلام
{
type: mongoose.SchemaTypes.ObjectId,
ref: 'equipements',
required: false,
},
],
},
{ timestamps: true }
);
const Request = mongoose.model('request', requestSchema);
module.exports = {
Request,
REQUEST_STATUSES,
REQUEST_PERMISSIONS_STATUSES,
TERMINAL_OPTIONS,
TRAFFIC_TYPES,
OPERATION_TYPES,
};مدل مربوط به شماره پلاک درخواستها که کاربر اطلاعات راننده را وارد میکند.
const mongoose = require('mongoose');
const { TRAFFIC_TYPES } = require('./request.model');
// وضعیت فعلی پلاک که در چه مرحلهای است
const PLATE_STATES = {
OUT_PORT: 0,
IN_PORT: 1,
CLOSED: 2,
};
// پلاک مجوز حرکت دارد یا ندارد
const PLATE_PERMISSIONS = {
NOT_HAS: 0,
HAS: 1,
PENDING: 2,
};
// یگان حفاظت مجوز ورود و خروج پلاک را بصورت اتوماتیک توسط دوربین پلاکخوان ثبت کرده یا بصورت دستی
const GUARD_REGISTRATION_TYPES = {
AUTO: 0,
MANUAL: 1,
};
// مدل پلاک
const platesSchema = new mongoose.Schema(
{
// شماره پلاک
plate: {
type: String,
trim: true,
},
//مجوز ورود به بندر که هم یگان حفاظت برای چند ترددی و شهری صادر می کند و هم پایانه کامیونی
permission: {
type: Number,
enum: Object.values(PLATE_PERMISSIONS),
},
// مجوز یگان حفاظت
permissionGuard: {
type: Number,
},
permissionGuardDate: {
type: Date,
},
status: {
type: Number,
},
// نوع ترددی که توسط ادمین ثبت شده است
traffic: {
type: Number,
enum: Object.values(TRAFFIC_TYPES),
},
// زمان ورود ناوگان حمل به درون بندر
entranceTime: [
{
type: Date,
},
],
entranceTimeString: [
{
type: String,
},
],
// زمان خروج ناوگان حمل از بندر
exitTime: [
{
type: Date,
},
],
exitTimeString: [
{
type: String,
},
],
// مجوز پایانه راهداری
delfardTerminalTime: {
type: Date,
},
delfardTerminalTimeString: {
type: String,
},
// زمان مجوز گرفتن از پایانه کامیونی
truckTerminalTime: {
type: Date,
},
truckTerminalTimeString: {
type: String,
},
// تخلف
violationType: {
type: String,
},
violationComment: {
type: String,
},
// حساسیت کالایی که حمل میکند
dangers: [
{
type: mongoose.SchemaTypes.ObjectId,
ref: 'dangerType',
},
],
date: {
type: Date,
},
dateString: {
type: String,
},
// اگر درخواست از نوع کانتینری باشد شمارههای کانتینر هم باید وارد شود
containerNumbers: [
{
type: String,
},
],
closeDate: {
type: Date,
},
// اسم راننده
driverName: {
type: String,
},
// شماره پاسپورت برای خارجیها و کد ملی برای داخلیها
driverPersonalCode: {
type: String,
},
// شماره موبایل راننده
driverMobile: {
type: String,
},
// ملیت راننده
driverNationality: {
type: String,
},
// نوع ناوگان حمل
truckType: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'trucks',
},
// کدی که اگر نوع ناوگان از نوع چادری یا یخچالی باشد
TYnumber: {
type: String,
},
// درخواست کنسل شده است یا نه
isCancel: {
type: Boolean,
},
bijakType: {
type: String,
},
bijakNumber: {
type: Number,
},
bijakTruckScaleNumber: {
type: String,
},
bijakUser: {
type: String,
},
bijakGCOMS: {
type: Array,
},
// درخواست برای بستن
requestForClose: {
type: Boolean,
},
requestForCloseFullName: {
type: String,
},
// نوع پلاک که ایرانی خارجی و منطقه آزاد باشد
plateOption: {
type: String,
},
plateState: {
type: Number,
enum: Object.values(PLATE_STATES),
default: PLATE_STATES.OUT_PORT,
},
// نوع ورود پلاک به بندر
entranceGuardRegistrationType: {
type: Number,
enum: Object.values(GUARD_REGISTRATION_TYPES),
},
// نوع خروج پلاک از بندر
exitGuardRegistrationType: {
type: Number,
enum: Object.values(GUARD_REGISTRATION_TYPES),
},
// transportation
// شرکت حمل اگر درخواست شهری ثبت شود
transportationCompany: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'terminals',
required: false,
},
},
{ timestamps: true }
);
const Plate = mongoose.model('plates', platesSchema);
module.exports = { Plate, PLATE_STATES, PLATE_PERMISSIONS };