forked from ebhomengo/niki
				
			feat(service): get kind_box_req ready to deliver.
This commit is contained in:
		
							parent
							
								
									47649e9952
								
							
						
					
					
						commit
						0d54a3765b
					
				| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
package adminkindboxreqhandler
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
 | 
			
		||||
	echo "github.com/labstack/echo/v4"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (h Handler) Deliver(c echo.Context) error {
 | 
			
		||||
	var req param.DeliverKindBoxReqRequest
 | 
			
		||||
 | 
			
		||||
	id, cErr := strconv.ParseUint(c.Param("id"), 10, 64)
 | 
			
		||||
 | 
			
		||||
	if cErr != nil {
 | 
			
		||||
		return c.JSON(http.StatusBadRequest, errmsg.ErrorMsgInvalidInput)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	req.KindBoxReqID = uint(id)
 | 
			
		||||
 | 
			
		||||
	if fieldErrors, err := h.adminKindBoxReqVld.ValidateDeliver(req); err != nil {
 | 
			
		||||
		msg, code := httpmsg.Error(err)
 | 
			
		||||
 | 
			
		||||
		return c.JSON(code, echo.Map{
 | 
			
		||||
			"message": msg,
 | 
			
		||||
			"errors":  fieldErrors,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp, sErr := h.adminKindBoxReqSvc.Deliver(c.Request().Context(), req)
 | 
			
		||||
 | 
			
		||||
	if sErr != nil {
 | 
			
		||||
		msg, code := httpmsg.Error(sErr)
 | 
			
		||||
 | 
			
		||||
		return echo.NewHTTPError(code, msg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(http.StatusOK, resp)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -11,5 +11,6 @@ func (h Handler) SetRoutes(e *echo.Echo) {
 | 
			
		|||
	// todo - add acl
 | 
			
		||||
	r.PATCH("/accept-kind-box-req/:id", h.Accept)
 | 
			
		||||
	r.PATCH("/reject-kind-box-req/:id", h.Reject)
 | 
			
		||||
	r.PATCH("/deliver-kind-box-req/:id", h.Deliver)
 | 
			
		||||
	r.GET("/", h.GetAll, middleware.Auth(h.authSvc, h.authConfig))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,9 @@ type Address struct {
 | 
			
		|||
	ID           uint
 | 
			
		||||
	PostalCode   string
 | 
			
		||||
	Address      string
 | 
			
		||||
	Lat          float32
 | 
			
		||||
	Lon          float32
 | 
			
		||||
	Lat          float64
 | 
			
		||||
	Lon          float64
 | 
			
		||||
	IsMain       bool
 | 
			
		||||
	CityID       uint
 | 
			
		||||
	ProvinceID   uint
 | 
			
		||||
	BenefactorID uint
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@ type Admin struct {
 | 
			
		|||
	ID          uint
 | 
			
		||||
	FirstName   string
 | 
			
		||||
	LastName    string
 | 
			
		||||
	password    string
 | 
			
		||||
	Password    string
 | 
			
		||||
	PhoneNumber string
 | 
			
		||||
	Role        AdminRole
 | 
			
		||||
	Description string
 | 
			
		||||
| 
						 | 
				
			
			@ -12,11 +12,3 @@ type Admin struct {
 | 
			
		|||
	Gender      Gender
 | 
			
		||||
	Status      AdminStatus
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *Admin) GetPassword() string {
 | 
			
		||||
	return a.password
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *Admin) SetPassword(password string) {
 | 
			
		||||
	a.password = password
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
type AdminAccessControl struct {
 | 
			
		||||
	ID         uint
 | 
			
		||||
	ActorID    uint
 | 
			
		||||
	ActorType  AdminActorType
 | 
			
		||||
	Permission AdminPermission
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AdminActorType string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	AdminRoleActorType  = AdminActorType("role")
 | 
			
		||||
	AdminAdminActorType = AdminActorType("admin")
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
type AdminPermission string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	AdminAdminRegisterPermission    = AdminPermission("admin-register")
 | 
			
		||||
	AdminKindBoxReqAcceptPermission = AdminPermission("kindboxreq-accept")
 | 
			
		||||
	AdminKindBoxReqRejectPermission = AdminPermission("kindboxreq-reject")
 | 
			
		||||
	AdminKindBoxReqGetAllPermission = AdminPermission("kindboxreq-getall")
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -3,13 +3,15 @@ package entity
 | 
			
		|||
type AdminRole uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	AdminAdminRole AdminRole = iota + 1
 | 
			
		||||
	AdminSuperAdminRole
 | 
			
		||||
	AdminSuperAdminRole AdminRole = iota + 1
 | 
			
		||||
	AdminAdminRole
 | 
			
		||||
	AdminAgentRole
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var AdminRoleStrings = map[AdminRole]string{
 | 
			
		||||
	AdminAdminRole:      "admin",
 | 
			
		||||
	AdminSuperAdminRole: "super-admin",
 | 
			
		||||
	AdminAdminRole:      "admin",
 | 
			
		||||
	AdminAgentRole:      "agent",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s AdminRole) String() string {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,12 +4,12 @@ type AdminStatus uint
 | 
			
		|||
 | 
			
		||||
const (
 | 
			
		||||
	AdminActiveStatus AdminStatus = iota + 1
 | 
			
		||||
	AdminDeactiveStatus
 | 
			
		||||
	AdminInactiveStatus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var AdminStatusStrings = map[AdminStatus]string{
 | 
			
		||||
	AdminActiveStatus:   "active",
 | 
			
		||||
	AdminDeactiveStatus: "deactive",
 | 
			
		||||
	AdminInactiveStatus: "inactive",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s AdminStatus) String() string {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,12 +7,9 @@ type Benefactor struct {
 | 
			
		|||
	FirstName   string
 | 
			
		||||
	LastName    string
 | 
			
		||||
	PhoneNumber string
 | 
			
		||||
	Address     string
 | 
			
		||||
	Description string
 | 
			
		||||
	Email       string
 | 
			
		||||
	City        string
 | 
			
		||||
	Gender      Gender
 | 
			
		||||
	Status      BenefactorStatus
 | 
			
		||||
	Birthdate   time.Time
 | 
			
		||||
	BirthDate   time.Time
 | 
			
		||||
	Role        UserRole
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,38 +0,0 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
type BenefactorStatus uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	BenefactorActiveStatus BenefactorStatus = iota + 1
 | 
			
		||||
	BenefactorDeactiveStatus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var BenefactorStatusStrings = map[BenefactorStatus]string{
 | 
			
		||||
	BenefactorActiveStatus:   "active",
 | 
			
		||||
	BenefactorDeactiveStatus: "deactive",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s BenefactorStatus) String() string {
 | 
			
		||||
	return BenefactorStatusStrings[s]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AllBenefactorStatus returns a slice containing all string values of BenefactorStatus.
 | 
			
		||||
func AllBenefactorStatus() []string {
 | 
			
		||||
	statusStrings := make([]string, len(BenefactorStatusStrings))
 | 
			
		||||
	for status, str := range BenefactorStatusStrings {
 | 
			
		||||
		statusStrings[int(status)-1] = str
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return statusStrings
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MapToBenefactorStatus converts a string to the corresponding BenefactorStatus value.
 | 
			
		||||
func MapToBenefactorStatus(statusStr string) BenefactorStatus {
 | 
			
		||||
	for status, str := range BenefactorStatusStrings {
 | 
			
		||||
		if str == statusStr {
 | 
			
		||||
			return status
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return BenefactorStatus(0)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -7,10 +7,15 @@ type KindBox struct {
 | 
			
		|||
	KindBoxReqID     uint
 | 
			
		||||
	BenefactorID     uint
 | 
			
		||||
	Type             KindBoxType
 | 
			
		||||
	TotalAmount     uint
 | 
			
		||||
	Amount           uint
 | 
			
		||||
	SerialNumber     string
 | 
			
		||||
	Status           KindBoxStatus
 | 
			
		||||
	SenderID        uint
 | 
			
		||||
	ReceiverID      uint
 | 
			
		||||
	StatusChangedAt time.Time
 | 
			
		||||
	DeliverReferDate time.Time
 | 
			
		||||
	DeliverAddressID uint
 | 
			
		||||
	SenderAgentID    uint
 | 
			
		||||
	DeliveredAt      time.Time
 | 
			
		||||
	ReturnReferDate  time.Time
 | 
			
		||||
	ReturnAddressID  uint
 | 
			
		||||
	ReceiverAgentID  uint
 | 
			
		||||
	ReturnedAt       time.Time
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,13 +4,14 @@ import "time"
 | 
			
		|||
 | 
			
		||||
type KindBoxReq struct {
 | 
			
		||||
	ID               uint
 | 
			
		||||
	BenefactorID     uint
 | 
			
		||||
	KindBoxType      KindBoxType
 | 
			
		||||
	CountRequested   uint
 | 
			
		||||
	CountAccepted    uint
 | 
			
		||||
	BenefactorID   uint
 | 
			
		||||
	Status         KindBoxReqStatus
 | 
			
		||||
	Description      string
 | 
			
		||||
	ReferDate      time.Time
 | 
			
		||||
	AddressID      uint
 | 
			
		||||
	CreatedAt      time.Time
 | 
			
		||||
	Status           KindBoxReqStatus
 | 
			
		||||
	DeliverReferDate time.Time
 | 
			
		||||
	DeliverAddressID uint
 | 
			
		||||
	SenderAgentID    uint
 | 
			
		||||
	DeliveredAt      time.Time
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,13 +5,17 @@ type KindBoxReqStatus uint
 | 
			
		|||
const (
 | 
			
		||||
	KindBoxReqPendingStatus KindBoxReqStatus = iota + 1
 | 
			
		||||
	KindBoxReqAcceptedStatus
 | 
			
		||||
	KindBoxReqAssignedSenderAgentStatus
 | 
			
		||||
	KindBoxReqRejectedStatus
 | 
			
		||||
	KindBoxReqDeliveredStatus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var kindBoxReqStatusStrings = map[KindBoxReqStatus]string{
 | 
			
		||||
	KindBoxReqPendingStatus:             "pending",
 | 
			
		||||
	KindBoxReqAcceptedStatus:            "accepted",
 | 
			
		||||
	KindBoxReqAssignedSenderAgentStatus: "assigned-sender-agent",
 | 
			
		||||
	KindBoxReqRejectedStatus:            "rejected",
 | 
			
		||||
	KindBoxReqDeliveredStatus:           "delivered",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s KindBoxReqStatus) String() string {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,18 +3,18 @@ package entity
 | 
			
		|||
type KindBoxStatus uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	KindBoxPendingSendStatus KindBoxStatus = iota + 1
 | 
			
		||||
	KindBoxSentStatus
 | 
			
		||||
	KindBoxPendingReceivedStatus
 | 
			
		||||
	KindBoxReceivedStatus
 | 
			
		||||
	KindBoxDeliveredStatus KindBoxStatus = iota + 1
 | 
			
		||||
	KindBoxReadyToReturnStatus
 | 
			
		||||
	KindBoxAssignedReceiverAgentStatus
 | 
			
		||||
	KindBoxReturnedStatus
 | 
			
		||||
	KindBoxEnumeratedStatus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var kindBoxStatusStrings = map[KindBoxStatus]string{
 | 
			
		||||
	KindBoxPendingSendStatus:     "pending-send",
 | 
			
		||||
	KindBoxSentStatus:            "sent",
 | 
			
		||||
	KindBoxPendingReceivedStatus: "pending-received",
 | 
			
		||||
	KindBoxReceivedStatus:        "received",
 | 
			
		||||
	KindBoxDeliveredStatus:             "delivered",
 | 
			
		||||
	KindBoxReadyToReturnStatus:         "ready-to-return",
 | 
			
		||||
	KindBoxAssignedReceiverAgentStatus: "assigned-receiver-agent",
 | 
			
		||||
	KindBoxReturnedStatus:              "returned",
 | 
			
		||||
	KindBoxEnumeratedStatus:            "enumerated",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
// TODO - use config file instead of const.
 | 
			
		||||
type KindBoxType uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
import "time"
 | 
			
		||||
 | 
			
		||||
type Staff struct {
 | 
			
		||||
	ID              uint
 | 
			
		||||
	FirstName       string
 | 
			
		||||
	LastName        string
 | 
			
		||||
	PhoneNumber     string
 | 
			
		||||
	Address         string
 | 
			
		||||
	Description     string
 | 
			
		||||
	Email           string
 | 
			
		||||
	City            string
 | 
			
		||||
	Gender          Gender
 | 
			
		||||
	Status          StaffStatus
 | 
			
		||||
	Birthday        time.Time
 | 
			
		||||
	StatusChangedAt time.Time
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,38 +0,0 @@
 | 
			
		|||
package entity
 | 
			
		||||
 | 
			
		||||
type StaffStatus uint
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	StaffActiveStatus StaffStatus = iota + 1
 | 
			
		||||
	StaffDeactiveStatus
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var StaffStatusStrings = map[StaffStatus]string{
 | 
			
		||||
	StaffActiveStatus:   "active",
 | 
			
		||||
	StaffDeactiveStatus: "deactive",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s StaffStatus) String() string {
 | 
			
		||||
	return StaffStatusStrings[s]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AllStaffStatus returns a slice containing all string values of StaffStatus.
 | 
			
		||||
func AllStaffStatus() []string {
 | 
			
		||||
	statusStrings := make([]string, len(StaffStatusStrings))
 | 
			
		||||
	for status, str := range StaffStatusStrings {
 | 
			
		||||
		statusStrings[int(status)-1] = str
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return statusStrings
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MapToStaffStatus converts a string to the corresponding StaffStatus value.
 | 
			
		||||
func MapToStaffStatus(statusStr string) StaffStatus {
 | 
			
		||||
	for status, str := range StaffStatusStrings {
 | 
			
		||||
		if str == statusStr {
 | 
			
		||||
			return status
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return StaffStatus(0)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										1
									
								
								go.mod
								
								
								
								
							| 
						 | 
				
			
			@ -12,7 +12,6 @@ require (
 | 
			
		|||
	github.com/knadh/koanf v1.5.0
 | 
			
		||||
	github.com/labstack/echo-jwt/v4 v4.2.0
 | 
			
		||||
	github.com/labstack/echo/v4 v4.11.4
 | 
			
		||||
	github.com/oklog/ulid/v2 v2.1.0
 | 
			
		||||
	github.com/redis/go-redis/v9 v9.4.0
 | 
			
		||||
	github.com/rubenv/sql-migrate v1.6.0
 | 
			
		||||
	github.com/stretchr/testify v1.8.4
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,19 @@
 | 
			
		|||
package adminkindboxparam
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AddKindBoxRequest struct {
 | 
			
		||||
	KindBoxReqID     uint
 | 
			
		||||
	BenefactorID     uint
 | 
			
		||||
	Type             entity.KindBoxType
 | 
			
		||||
	DeliverReferDate time.Time
 | 
			
		||||
	DeliverAddressID uint
 | 
			
		||||
	SenderAgentID    uint
 | 
			
		||||
	DeliveredAt      time.Time
 | 
			
		||||
	CountAccepted    uint
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AddKindBoxResponse struct{}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,9 +5,9 @@ import entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		|||
type KindBoxUpdateRequest struct {
 | 
			
		||||
	BenefactorID    uint
 | 
			
		||||
	KindBoxID       uint
 | 
			
		||||
	TotalAmount  uint
 | 
			
		||||
	ReceiverID   uint
 | 
			
		||||
	SenderID     uint
 | 
			
		||||
	Amount          uint
 | 
			
		||||
	ReceiverAgentID uint
 | 
			
		||||
	SenderAgentID   uint
 | 
			
		||||
	SerialNumber    string
 | 
			
		||||
	Status          entity.KindBoxStatus
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,6 @@ type KindBoxReqAcceptResponse struct {
 | 
			
		|||
	KindBoxReqStatus entity.KindBoxReqStatus `json:"kind_box_req_status"`
 | 
			
		||||
	CountRequested   uint                    `json:"count_requested"`
 | 
			
		||||
	CountAccepted    uint                    `json:"count_accepted"`
 | 
			
		||||
	ReferDate        time.Time               `json:"refer_date"`
 | 
			
		||||
	AddressID        uint                    `json:"address_id"`
 | 
			
		||||
	DeliverReferDate time.Time               `json:"deliver_refer_date"`
 | 
			
		||||
	DeliverAddressID uint                    `json:"deliver_address_id"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
package adminkindboxreqparam
 | 
			
		||||
 | 
			
		||||
type DeliverKindBoxReqRequest struct {
 | 
			
		||||
	KindBoxReqID uint `json:"kind_box_req_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type DeliverKindBoxReqResponse struct{}
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +18,6 @@ type KindBoxReqRejectResponse struct {
 | 
			
		|||
	BenefactorID     uint                    `json:"benefactor_id"`
 | 
			
		||||
	Status           entity.KindBoxReqStatus `json:"status"`
 | 
			
		||||
	Description      string                  `json:"description"`
 | 
			
		||||
	ReferDate      time.Time               `json:"refer_date"`
 | 
			
		||||
	AddressID      uint                    `json:"address_id"`
 | 
			
		||||
	DeliverReferDate time.Time               `json:"deliver_refer_date"`
 | 
			
		||||
	DeliverAddressID uint                    `json:"deliver_address_id"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,8 +5,8 @@ import "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		|||
type BenefactorAddAddressRequest struct {
 | 
			
		||||
	PostalCode   string  `json:"postal_code"`
 | 
			
		||||
	Address      string  `json:"address"`
 | 
			
		||||
	Lat          float32 `json:"lat"`
 | 
			
		||||
	Lon          float32 `json:"lon"`
 | 
			
		||||
	Lat          float64 `json:"lat"`
 | 
			
		||||
	Lon          float64 `json:"lon"`
 | 
			
		||||
	CityID       uint    `json:"city_id"`
 | 
			
		||||
	ProvinceID   uint    `json:"province_id"`
 | 
			
		||||
	BenefactorID uint    `json:"benefactor_id"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,14 @@
 | 
			
		|||
package benefactorkindboxreqparam
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type KindBoxReqAddRequest struct {
 | 
			
		||||
	BenefactorID     uint               `json:"benefactor_id"`
 | 
			
		||||
	TypeID           entity.KindBoxType `json:"type_id"`
 | 
			
		||||
	AddressID      uint               `json:"address_id"`
 | 
			
		||||
	ReferDate      time.Time          `json:"refer_date"`
 | 
			
		||||
	DeliverAddressID uint               `json:"deliver_address_id"`
 | 
			
		||||
	DeliverReferDate string             `json:"deliver_refer_date"`
 | 
			
		||||
	CountRequested   uint               `json:"count_requested"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,4 +17,5 @@ const (
 | 
			
		|||
	ErrBadRequest                        = "Bad request"
 | 
			
		||||
	ErrorMsgAcceptKindBoxReqStatus       = "only pending requests will have the ability to be confirmed"
 | 
			
		||||
	ErrorMsgRejectKindBoxReqStatus       = "only pending requests will have the ability to be rejected"
 | 
			
		||||
	ErrorMsgDeliverKindBoxReqStatus      = "only assigned requests will have the ability to be delivered"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ func (d DB) AddAdmin(ctx context.Context, admin entity.Admin) (entity.Admin, err
 | 
			
		|||
 | 
			
		||||
	res, err := d.conn.Conn().ExecContext(ctx, `insert into admins(first_name,last_name,password,phone_number,
 | 
			
		||||
                   role,description,email,gender,status) values (?,?,?,?,?,?,?,?,?)`,
 | 
			
		||||
		admin.FirstName, admin.LastName, admin.GetPassword(), admin.PhoneNumber, admin.Role.String(), admin.Description, admin.Email,
 | 
			
		||||
		admin.FirstName, admin.LastName, admin.Password, admin.PhoneNumber, admin.Role.String(), admin.Description, admin.Email,
 | 
			
		||||
		admin.Gender.String(), admin.Status.String())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return entity.Admin{}, richerror.New(op).WithErr(err).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ func scanAdmin(scanner mysql.Scanner) (entity.Admin, error) {
 | 
			
		|||
 | 
			
		||||
	admin.Role = entity.MapToAdminRole(roleStr)
 | 
			
		||||
	admin.Status = entity.MapToAdminStatus(statusStr)
 | 
			
		||||
	admin.SetPassword(password)
 | 
			
		||||
	admin.Password = password
 | 
			
		||||
	mapNotNullToAdmin(adminNullableFields, &admin)
 | 
			
		||||
 | 
			
		||||
	return admin, err
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,8 +11,8 @@ import (
 | 
			
		|||
func (d DB) CreateBenefactor(ctx context.Context, benefactor entity.Benefactor) (entity.Benefactor, error) {
 | 
			
		||||
	const op = "mysqlbenefactor.CreateBenefactor"
 | 
			
		||||
 | 
			
		||||
	res, err := d.conn.Conn().ExecContext(ctx, `insert into benefactors(phone_number, status, role) values(?, ?, ?)`,
 | 
			
		||||
		benefactor.PhoneNumber, benefactor.Status.String(), benefactor.Role.String())
 | 
			
		||||
	res, err := d.conn.Conn().ExecContext(ctx, `insert into benefactors(phone_number) values(?)`,
 | 
			
		||||
		benefactor.PhoneNumber)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return entity.Benefactor{}, richerror.New(op).WithErr(err).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,6 @@ import (
 | 
			
		|||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
| 
						 | 
				
			
			@ -57,9 +55,8 @@ func (d *DB) IsExistBenefactorByID(ctx context.Context, id uint) (bool, error) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func scanBenefactor(scanner mysql.Scanner) (entity.Benefactor, error) {
 | 
			
		||||
	var createdAt time.Time
 | 
			
		||||
 | 
			
		||||
	var benefactor entity.Benefactor
 | 
			
		||||
	var roleStr, statusStr string
 | 
			
		||||
	// TODO - use db model and mapper between entity and db model OR use this approach
 | 
			
		||||
 | 
			
		||||
	var benefactorNullableFields nullableFields
 | 
			
		||||
| 
						 | 
				
			
			@ -68,11 +65,8 @@ func scanBenefactor(scanner mysql.Scanner) (entity.Benefactor, error) {
 | 
			
		|||
		&benefactorNullableFields.lastName, &benefactor.PhoneNumber,
 | 
			
		||||
		&benefactorNullableFields.address, &benefactorNullableFields.description,
 | 
			
		||||
		&benefactorNullableFields.email, &benefactorNullableFields.city, &benefactorNullableFields.genderStr,
 | 
			
		||||
		&statusStr, &benefactorNullableFields.birthdate, &roleStr,
 | 
			
		||||
		&createdAt)
 | 
			
		||||
		&benefactorNullableFields.birthdate)
 | 
			
		||||
 | 
			
		||||
	benefactor.Role = entity.MapToUserRole(roleStr)
 | 
			
		||||
	benefactor.Status = entity.MapToBenefactorStatus(statusStr)
 | 
			
		||||
	mapNotNullToBenefactor(benefactorNullableFields, &benefactor)
 | 
			
		||||
 | 
			
		||||
	return benefactor, err
 | 
			
		||||
| 
						 | 
				
			
			@ -97,22 +91,22 @@ func mapNotNullToBenefactor(data nullableFields, benefactor *entity.Benefactor)
 | 
			
		|||
	if data.lastName.Valid {
 | 
			
		||||
		benefactor.LastName = data.lastName.String
 | 
			
		||||
	}
 | 
			
		||||
	if data.address.Valid {
 | 
			
		||||
		benefactor.Address = data.address.String
 | 
			
		||||
	}
 | 
			
		||||
	//if data.address.Valid {
 | 
			
		||||
	//	benefactor.Address = data.address.String
 | 
			
		||||
	//}
 | 
			
		||||
	if data.description.Valid {
 | 
			
		||||
		benefactor.Description = data.description.String
 | 
			
		||||
	}
 | 
			
		||||
	if data.email.Valid {
 | 
			
		||||
		benefactor.Email = data.email.String
 | 
			
		||||
	}
 | 
			
		||||
	if data.city.Valid {
 | 
			
		||||
		benefactor.City = data.city.String
 | 
			
		||||
	}
 | 
			
		||||
	//if data.city.Valid {
 | 
			
		||||
	//	benefactor.City = data.city.String
 | 
			
		||||
	//}
 | 
			
		||||
	if data.genderStr.Valid {
 | 
			
		||||
		benefactor.Gender = entity.MapToGender(data.genderStr.String)
 | 
			
		||||
	}
 | 
			
		||||
	if data.birthdate.Valid {
 | 
			
		||||
		benefactor.Birthdate = data.birthdate.Time
 | 
			
		||||
		benefactor.BirthDate = data.birthdate.Time
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,15 +8,28 @@ import (
 | 
			
		|||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (d DB) AddKindBox(ctx context.Context, kindBox entity.KindBox) error {
 | 
			
		||||
	const op = "mysqlkindbox.AddKindBox"
 | 
			
		||||
 | 
			
		||||
	_, err := d.conn.Conn().ExecContext(ctx, `insert into kind_boxes(kind_box_req_id,benefactor_id,type,status,sender_agent_id) values (?,?,?,?,?)`,
 | 
			
		||||
		kindBox.KindBoxReqID, kindBox.BenefactorID, kindBox.Type, entity.KindBoxDeliveredStatus.String(), kindBox.SenderAgentID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return richerror.New(op).WithErr(err).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d DB) AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error {
 | 
			
		||||
	const op = "mysqlkindbox.AddBatchKindBoxConcurrentlyRollback"
 | 
			
		||||
 | 
			
		||||
	queryStr := "INSERT INTO kind_boxes (kind_box_req_id, benefactor_id, type, serial_number, status) VALUES "
 | 
			
		||||
	queryStr := "INSERT INTO kind_boxes (kind_box_req_id, benefactor_id, type, status ,deliver_refer_date,deliver_address_id,sender_agent_id,delivered_at) VALUES "
 | 
			
		||||
	values := []any{}
 | 
			
		||||
 | 
			
		||||
	for _, kb := range kindBoxes {
 | 
			
		||||
		queryStr += "(?, ?, ?, ?, ?),"
 | 
			
		||||
		values = append(values, kb.KindBoxReqID, kb.BenefactorID, kb.Type, kb.SerialNumber, kb.Status.String())
 | 
			
		||||
		queryStr += "(?, ?, ?, ?, ?, ?, ?, ?),"
 | 
			
		||||
		values = append(values, kb.KindBoxReqID, kb.BenefactorID, kb.Type, kb.Status.String(), kb.DeliverReferDate, kb.DeliverAddressID, kb.SenderAgentID, kb.DeliveredAt)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// trim the last ,
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
package mysqlkindboxreq
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (d DB) DeliverKindBoxReq(ctx context.Context, kindBoxReqID uint) error {
 | 
			
		||||
	const op = "mysqlkindboxreq.DeliverKindBoxReq"
 | 
			
		||||
 | 
			
		||||
	_, err := d.conn.Conn().ExecContext(ctx, `update kind_box_reqs set  status = ?, delivered_at = ?, updated_at = ?,  where id = ?`,
 | 
			
		||||
		entity.KindBoxReqDeliveredStatus.String(), time.Now(), time.Now(), kindBoxReqID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return richerror.New(op).WithErr(err).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ func (d DB) AddKindBoxReq(ctx context.Context, kindBoxReq entity.KindBoxReq) (en
 | 
			
		|||
	const op = "mysqlkindboxreq.AddKindBoxReq"
 | 
			
		||||
 | 
			
		||||
	res, err := d.conn.Conn().ExecContext(ctx, `insert into kind_box_reqs(benefactor_id,kind_box_type,address_id,count_requested,refer_date,status) values (?,?,?,?,?,?)`,
 | 
			
		||||
		kindBoxReq.BenefactorID, kindBoxReq.KindBoxType.String(), kindBoxReq.AddressID, kindBoxReq.CountRequested, kindBoxReq.ReferDate, kindBoxReq.Status.String())
 | 
			
		||||
		kindBoxReq.BenefactorID, kindBoxReq.KindBoxType.String(), kindBoxReq.DeliverAddressID, kindBoxReq.CountRequested, kindBoxReq.DeliverReferDate, kindBoxReq.Status.String())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return entity.KindBoxReq{}, richerror.New(op).WithErr(err).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgNotFound).WithKind(richerror.KindUnexpected)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,9 +13,9 @@ func scanKindBoxReq(scanner mysql.Scanner) (entity.KindBoxReq, error) {
 | 
			
		|||
	var kindBoxType string
 | 
			
		||||
	var countAccept sql.NullInt64
 | 
			
		||||
	var desc sql.NullString
 | 
			
		||||
	err := scanner.Scan(&kindBoxReq.ID, &kindBoxReq.BenefactorID, &kindBoxType, &kindBoxReq.AddressID, &kindBoxReq.CountRequested, &countAccept,
 | 
			
		||||
	err := scanner.Scan(&kindBoxReq.ID, &kindBoxReq.BenefactorID, &kindBoxType, &kindBoxReq.DeliverAddressID, &kindBoxReq.CountRequested, &countAccept,
 | 
			
		||||
		&desc,
 | 
			
		||||
		&kindBoxReq.ReferDate, &kindBoxStatus, &kindBoxReq.CreatedAt)
 | 
			
		||||
		&kindBoxReq.DeliverReferDate, &kindBoxStatus)
 | 
			
		||||
 | 
			
		||||
	if countAccept.Valid {
 | 
			
		||||
		kindBoxReq.CountAccepted = uint(countAccept.Int64)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
-- please read this article to understand why we use VARCHAR(191)
 | 
			
		||||
-- https://www.grouparoo.com/blog/varchar-191#why-varchar-and-not-text
 | 
			
		||||
CREATE TABLE `benefactors` (
 | 
			
		||||
                         `id` INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                         `first_name` VARCHAR(191) ,
 | 
			
		||||
                         `last_name` VARCHAR(191) ,
 | 
			
		||||
                         `phone_number` VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
                         `address` TEXT,
 | 
			
		||||
                         `description` TEXT,
 | 
			
		||||
                         `email` VARCHAR(191),
 | 
			
		||||
                         `city` VARCHAR(191),
 | 
			
		||||
                         `gender` VARCHAR(191),
 | 
			
		||||
                         `status` VARCHAR(191),
 | 
			
		||||
                         `birthdate` TIMESTAMP,
 | 
			
		||||
                         `role` ENUM('benefactor') NOT NULL,
 | 
			
		||||
                         `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `benefactors`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,20 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
-- please read this article to understand why we use VARCHAR(191)
 | 
			
		||||
-- https://www.grouparoo.com/blog/varchar-191#why-varchar-and-not-text
 | 
			
		||||
CREATE TABLE `benefactors` (
 | 
			
		||||
                            `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                            `first_name`    VARCHAR(191),
 | 
			
		||||
                            `last_name`     VARCHAR(191),
 | 
			
		||||
                            `phone_number`  VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
                            `description`   TEXT,
 | 
			
		||||
                            `email`         VARCHAR(191),
 | 
			
		||||
                            `gender`        ENUM('male','female'),
 | 
			
		||||
                            `birth_date`    TIMESTAMP,
 | 
			
		||||
 | 
			
		||||
                            `created_at`    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                            `updated_at`    TIMESTAMP
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `benefactors`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `admins` (
 | 
			
		||||
                        `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                        `first_name`    VARCHAR(191),
 | 
			
		||||
                        `last_name`     VARCHAR(191),
 | 
			
		||||
                        `password`      VARCHAR(191) NOT NULL,
 | 
			
		||||
                        `phone_number`  VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
                        `role`          ENUM('super-admin','admin','agent') NOT NULL, -- default?
 | 
			
		||||
                        `description`   TEXT,
 | 
			
		||||
                        `email`         VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
                        `gender`        ENUM('male','female'),
 | 
			
		||||
                        `status`        ENUM('active','inactive') NOT NULL DEFAULT 'active',
 | 
			
		||||
 | 
			
		||||
                        `created_at`    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                        `updated_at`    TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `admins`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `admin_access_controls` (
 | 
			
		||||
                                        `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                                        `actor_id`      INT NOT NULL,
 | 
			
		||||
                                        `actor_type`    ENUM('role', 'admin') NOT NULL, -- default?
 | 
			
		||||
                                        `permission`    ENUM('') NOT NULL,
 | 
			
		||||
 | 
			
		||||
                                        `created_at`    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                                        `updated_at`    TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE admin_access_controls;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `provinces` (
 | 
			
		||||
                               `id` INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                               `name` VARCHAR(191) NOT NULL ,
 | 
			
		||||
                               `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `provinces`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `provinces` (
 | 
			
		||||
                            `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                            `name`          VARCHAR(191) NOT NULL,
 | 
			
		||||
 | 
			
		||||
                            `created_at`    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                            `updated_at`    TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `provinces`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `cities` (
 | 
			
		||||
                             `id` INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                             `province_id` INT NOT NULL,
 | 
			
		||||
                             `name` VARCHAR(191) NOT NULL,
 | 
			
		||||
                             `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                             FOREIGN KEY (`province_id`) REFERENCES `provinces`(`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `cities`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `cities` (
 | 
			
		||||
                         `id`           INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                         `name`         VARCHAR(191) NOT NULL,
 | 
			
		||||
                         `province_id`  INT NOT NULL,
 | 
			
		||||
 | 
			
		||||
                         `created_at`   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                         `updated_at`   TIMESTAMP,
 | 
			
		||||
                         FOREIGN KEY (`province_id`) REFERENCES `provinces`(`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `cities`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `addresses`
 | 
			
		||||
(
 | 
			
		||||
    `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
    `postal_code`   VARCHAR(191) NOT NULL,
 | 
			
		||||
    `address`       TEXT         NOT NULL,
 | 
			
		||||
    `lat`           FLOAT        NOT NULL,
 | 
			
		||||
    `lon`           FLOAT        NOT NULL,
 | 
			
		||||
    `province_id`   INT          NOT NULL,
 | 
			
		||||
    `city_id`       INT          NOT NULL,
 | 
			
		||||
    `benefactor_id` INT          NOT NULL,
 | 
			
		||||
    `created_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    FOREIGN KEY (`province_id`) REFERENCES `provinces` (`id`),
 | 
			
		||||
    FOREIGN KEY (`city_id`) REFERENCES `cities` (`id`),
 | 
			
		||||
    FOREIGN KEY (`benefactor_id`) REFERENCES `benefactors` (`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `addresses`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `addresses` (
 | 
			
		||||
                            `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                            `postal_code`   VARCHAR(191) NOT NULL,
 | 
			
		||||
                            `address`       TEXT         NOT NULL,
 | 
			
		||||
                            `lat`           FLOAT,
 | 
			
		||||
                            `lon`           FLOAT,
 | 
			
		||||
                            `is_main`       BOOL         NOT NULL DEFAULT FALSE,
 | 
			
		||||
                            `city_id`       INT          NOT NULL,
 | 
			
		||||
                            `province_id`   INT          NOT NULL,
 | 
			
		||||
                            `benefactor_id` INT          NOT NULL,
 | 
			
		||||
 | 
			
		||||
                            `created_at`    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                            `updated_at`    TIMESTAMP,
 | 
			
		||||
                            FOREIGN KEY (`province_id`)     REFERENCES `provinces` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`city_id`)         REFERENCES `cities` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`benefactor_id`)   REFERENCES `benefactors` (`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `addresses`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `kind_box_reqs`
 | 
			
		||||
(
 | 
			
		||||
    `id`              INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
    `benefactor_id`   INT      NOT NULL,
 | 
			
		||||
    `kind_box_type`   ENUM('on-table','cylindrical','stand-up') NOT NULL,
 | 
			
		||||
    `address_id`      INT      NOT NULL,
 | 
			
		||||
    `count_requested` INT UNSIGNED NOT NULL,
 | 
			
		||||
    `count_accepted`  INT,
 | 
			
		||||
    `description`     TEXT,
 | 
			
		||||
    `refer_date`      DATETIME NOT NULL,
 | 
			
		||||
    `status`          varchar(191),
 | 
			
		||||
    `created_at`      TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    FOREIGN KEY (`address_id`) REFERENCES `addresses` (`id`),
 | 
			
		||||
    FOREIGN KEY (`benefactor_id`) REFERENCES `benefactors` (`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `kind_box_reqs`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `kind_box_reqs` (
 | 
			
		||||
                                `id`                    INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                                `benefactor_id`         INT NOT NULL,
 | 
			
		||||
                                `kind_box_type`         ENUM('on-table','cylindrical','stand-up') NOT NULL, -- default?
 | 
			
		||||
                                `count_requested`       INT UNSIGNED NOT NULL,
 | 
			
		||||
                                `count_accepted`        INT UNSIGNED,
 | 
			
		||||
                                `description`           TEXT,
 | 
			
		||||
                                `status`                ENUM('pending','accepted','assigned-sender-agent','rejected','delivered') NOT NULL DEFAULT 'pending',
 | 
			
		||||
                                `deliver_refer_date`    DATETIME NOT NULL,
 | 
			
		||||
                                `deliver_address_id`    INT NOT NULL,
 | 
			
		||||
                                `sender_agent_id`       INT,
 | 
			
		||||
                                `delivered_at`          DATETIME,
 | 
			
		||||
 | 
			
		||||
                                `created_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                                `updated_at`            TIMESTAMP,
 | 
			
		||||
                                FOREIGN KEY (`benefactor_id`)       REFERENCES `benefactors` (`id`),
 | 
			
		||||
                                FOREIGN KEY (`deliver_address_id`)  REFERENCES `addresses` (`id`),
 | 
			
		||||
                                FOREIGN KEY (`sender_agent_id`)     REFERENCES `admins` (`id`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `kind_box_reqs`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,35 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (1, 'آذربایجان شرقی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (2, 'آذربایجان غربی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (3, 'اردبیل');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (4, 'اصفهان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (5, 'البرز');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (6, 'ایلام');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (7, 'بوشهر');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (8, 'تهران');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (9, 'چهارمحال و بختیاری');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (10, 'خراسان جنوبی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (11, 'خراسان رضوی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (12, 'خراسان شمالی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (13, 'خوزستان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (14, 'زنجان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (15, 'سمنان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (16, 'سیستان و بلوچستان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (17, 'فارس');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (18, 'قزوین');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (19, 'قم');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (20, 'كردستان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (21, 'كرمان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (22, 'كرمانشاه');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (23, 'کهگیلویه و بویراحمد');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (24, 'گلستان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (25, 'گیلان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (26, 'لرستان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (27, 'مازندران');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (28, 'مركزی');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (29, 'هرمزگان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (30, 'همدان');
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`) VALUES (31, 'یزد');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE FROM `provinces` WHERE id BETWEEN '1' AND '31';
 | 
			
		||||
| 
						 | 
				
			
			@ -1,944 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (1, 1, 'آذرشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (2, 1, 'اسکو');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (3, 1, 'اهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (4, 1, 'بستان آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (5, 1, 'بناب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (6, 1, 'تبریز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (7, 1, ' جلفا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (8, 1, ' چار اویماق');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (9, 1, ' سراب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (10, 1, ' شبستر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (11, 1, ' عجبشیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (12, 1, ' کلیبر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (13, 1, ' مراغه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (14, 1, ' مرند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (15, 1, ' ملکان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (16, 1, ' میانه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (17, 1, ' ورزقان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (18, 1, ' هریس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (19, 1, 'هشترود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (20, 2, ' ارومیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (21, 2, ' اشنویه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (22, 2, ' بوکان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (23, 2, ' پیرانشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (24, 2, ' تکاب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (25, 2, ' چالدران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (26, 2, ' خوی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (27, 2, ' سردشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (28, 2, ' سلماس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (29, 2, ' شاهین دژ');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (30, 2, ' ماکو');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (31, 2, ' مهاباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (32, 2, ' میاندوآب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (33, 2, ' نقده');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (34, 3, ' اردبیل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (35, 3, ' بیله سوار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (36, 3, ' پارس آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (37, 3, ' خلخال');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (38, 3, ' کوثر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (39, 3, ' گرمی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (40, 3, ' مشگین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (41, 3, ' نمین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (42, 3, ' نیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (43, 4, ' آران و بیدگل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (44, 4, ' اردستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (45, 4, ' اصفهان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (46, 4, ' برخوار و میمه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (47, 4, ' تیران و کرون');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (48, 4, ' چادگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (49, 4, ' خمینی شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (50, 4, ' خوانسار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (51, 4, ' سمیرم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (52, 4, ' شاهین شهر و میمه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (53, 4, ' شهر رضا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (54, 4, 'دهاقان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (55, 4, ' فریدن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (56, 4, ' فریدون شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (57, 4, ' فلاورجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (58, 4, ' کاشان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (59, 4, ' گلپایگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (60, 4, ' لنجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (61, 4, ' مبارکه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (62, 4, ' نائین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (63, 4, ' نجف آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (64, 4, ' نطنز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (65, 5, ' ساوجبلاق');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (66, 5, ' کرج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (67, 5, ' نظرآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (68, 5, 'طالقان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (69, 6, ' آبدانان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (70, 6, ' ایلام');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (71, 6, ' ایوان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (72, 6, ' دره شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (73, 6, ' دهلران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (74, 6, ' شیران و چرداول');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (75, 6, ' مهران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (76, 7, ' بوشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (77, 7, ' تنگستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (78, 7, ' جم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (79, 7, ' دشتستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (80, 7, ' دشتی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (81, 7, ' دیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (82, 7, ' دیلم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (83, 7, ' کنگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (84, 7, ' گناوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (85, 8, ' اسلام شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (86, 8, ' پاکدشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (87, 8, ' تهران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (88, 8, ' دماوند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (89, 8, ' رباط کریم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (90, 8, ' ری');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (91, 8, ' شمیرانات');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (92, 8, ' شهریار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (93, 8, ' فیروزکوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (94, 8, ' ورامین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (95, 9, ' اردل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (96, 9, ' بروجن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (97, 9, ' شهرکرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (98, 9, ' فارسان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (99, 9, ' کوهرنگ');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (100, 9, ' لردگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (101, 10, ' بیرجند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (102, 10, ' درمیان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (103, 10, ' سرایان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (104, 10, ' سر بیشه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (105, 10, ' فردوس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (106, 10, ' قائن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (107, 10, ' نهبندان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (108, 11, ' برد سکن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (109, 11, ' بجستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (110, 11, ' تایباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (111, 11, ' تحت جلگه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (112, 11, ' تربت جام');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (113, 11, ' تربت حیدریه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (114, 11, ' چناران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (115, 11, ' جغتای');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (116, 11, ' جوین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (117, 11, ' خلیل آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (118, 11, ' خواف');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (119, 11, ' درگز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (120, 11, ' رشتخوار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (121, 11, ' زاوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (122, 11, ' سبزوار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (123, 11, ' سرخس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (124, 11, ' فریمان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (125, 11, ' قوچان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (126, 11, 'طرقبه شاندیز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (127, 11, ' کاشمر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (128, 11, ' کلات');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (129, 11, ' گناباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (130, 11, ' مشهد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (131, 11, ' مه ولات');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (132, 11, ' نیشابور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (133, 12, ' اسفراین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (134, 12, ' بجنورد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (135, 12, ' جاجرم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (136, 12, ' شیروان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (137, 12, ' فاروج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (138, 12, ' مانه و سملقان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (139, 13, ' آبادان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (140, 13, ' امیدیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (141, 13, ' اندیمشک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (142, 13, ' اهواز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (143, 13, ' ایذه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (144, 13, ' باغ ملک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (145, 13, ' بندرماهشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (146, 13, ' بهبهان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (147, 13, ' خرمشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (148, 13, ' دزفول');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (149, 13, ' دشت آزادگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (150, 13, ' رامشیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (151, 13, ' رامهرمز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (152, 13, ' شادگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (153, 13, ' شوش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (154, 13, ' شوشتر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (155, 13, ' گتوند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (156, 13, ' لالی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (157, 13, ' مسجد سلیمان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (158, 13, ' هندیجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (159, 14, ' ابهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (160, 14, ' ایجرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (161, 14, ' خدابنده');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (162, 14, ' خرمدره');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (163, 14, ' زنجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (164, 14, ' طارم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (165, 14, ' ماه نشان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (166, 15, ' دامغان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (167, 15, ' سمنان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (168, 15, ' شاهرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (169, 15, ' گرمسار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (170, 15, ' مهدی شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (171, 16, ' ایرانشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (172, 16, ' چابهار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (173, 16, ' خاش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (174, 16, ' دلگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (175, 16, ' زابل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (176, 16, ' زاهدان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (177, 16, ' زهک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (178, 16, ' سراوان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (179, 16, ' سرباز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (180, 16, ' کنارک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (181, 16, ' نیکشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (182, 17, ' آباده');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (183, 17, ' ارسنجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (184, 17, ' استهبان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (185, 17, ' اقلید');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (186, 17, ' بوانات');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (187, 17, ' پاسارگاد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (188, 17, ' جهرم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (189, 17, ' خرم بید');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (190, 17, ' خنج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (191, 17, ' داراب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (192, 17, ' زرین دشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (193, 17, ' سپیدان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (194, 17, ' شیراز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (195, 17, ' فراشبند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (196, 17, ' فسا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (197, 17, ' فیروزآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (198, 17, ' قیر و کارزین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (199, 17, ' کازرون');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (200, 17, ' لارستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (201, 17, ' لامرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (202, 17, ' مرودشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (203, 17, ' ممسنی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (204, 17, ' مهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (205, 17, ' نی ریز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (206, 18, ' آبیک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (207, 18, ' البرز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (208, 18, ' بوئین زهرا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (209, 18, ' تاکستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (210, 18, ' قزوین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (211, 19, ' قم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (212, 20, ' بانه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (213, 20, ' بیجار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (214, 20, ' دیواندره');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (215, 20, ' سروآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (216, 20, ' سقز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (217, 20, ' سنندج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (218, 20, ' قروه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (219, 20, ' کامیاران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (220, 20, ' مریوان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (221, 21, ' بافت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (222, 21, ' بردسیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (223, 21, ' بم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (224, 21, ' جیرفت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (225, 21, ' راور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (226, 21, ' رفسنجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (227, 21, ' رودبار جنوب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (228, 21, ' زرند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (229, 21, ' سیرجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (230, 21, ' شهر بابک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (231, 21, ' عنبرآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (232, 21, ' قلعه گنج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (233, 21, ' کرمان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (234, 21, ' کوهبنان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (235, 21, ' کهنوج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (236, 21, ' منوجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (237, 22, ' اسلام آباد غرب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (238, 22, ' پاوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (239, 22, ' ثلاث باباجانی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (240, 22, ' جوانرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (241, 22, ' دالاهو');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (242, 22, ' روانسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (243, 22, ' سرپل ذهاب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (244, 22, ' سنقر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (245, 22, ' صحنه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (246, 22, ' قصر شیرین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (247, 22, ' کرمانشاه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (248, 22, ' کنگاور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (249, 22, ' گیلان غرب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (250, 22, ' هرسین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (251, 23, ' بویر احمد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (252, 23, ' بهمئی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (253, 23, ' دنا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (254, 23, ' کهگیلویه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (255, 23, ' گچساران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (256, 24, ' آزادشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (257, 24, ' آق قلا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (258, 24, ' بندر گز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (259, 24, ' بندر ترکمن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (260, 24, ' رامیان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (261, 24, ' علی آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (262, 24, ' کرد کوی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (263, 24, ' کلاله');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (264, 24, ' گرگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (265, 24, ' گنبد کاووس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (266, 24, ' مینو دشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (267, 25, ' آستارا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (268, 25, ' آستانه اشرفیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (269, 25, ' املش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (270, 25, ' بندر انزلی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (271, 25, ' رشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (272, 25, ' رضوانشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (273, 25, ' رودبار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (274, 25, ' رودسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (275, 25, ' سیاهکل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (276, 25, ' شفت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (277, 25, ' صومعه سرا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (278, 25, ' طوالش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (279, 25, ' فومن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (280, 25, ' لاهیجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (281, 25, ' لنگرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (282, 25, ' ماسال');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (283, 26, ' ازنا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (284, 26, ' الیگودرز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (285, 26, ' بروجرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (286, 26, ' پلدختر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (287, 26, ' خرم آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (288, 26, ' دورود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (289, 17, ' لامرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (290, 17, ' مرودشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (291, 17, ' ممسنی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (292, 17, ' مهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (293, 17, ' نی ریز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (294, 18, ' آبیک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (295, 18, ' البرز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (296, 18, ' بوئین زهرا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (297, 18, ' تاکستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (298, 18, ' قزوین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (299, 19, ' قم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (300, 20, ' بانه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (301, 20, ' بیجار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (302, 20, ' دیواندره');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (303, 20, ' سروآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (304, 20, ' سقز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (305, 20, ' سنندج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (306, 20, ' قروه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (307, 20, ' کامیاران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (308, 20, ' مریوان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (309, 21, ' بافت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (310, 21, ' بردسیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (311, 21, ' بم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (312, 21, ' جیرفت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (313, 21, ' راور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (314, 21, ' رفسنجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (315, 21, ' رودبار جنوب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (316, 21, ' زرند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (317, 21, ' سیرجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (318, 21, ' شهر بابک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (319, 21, ' عنبرآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (320, 21, ' قلعه گنج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (321, 21, ' کرمان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (322, 21, ' کوهبنان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (323, 21, ' کهنوج');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (324, 21, ' منوجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (325, 22, ' اسلام آباد غرب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (326, 22, ' پاوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (327, 22, ' ثلاث باباجانی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (328, 22, ' جوانرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (329, 22, ' دالاهو');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (330, 22, ' روانسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (332, 22, ' سنقر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (333, 22, ' صحنه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (334, 22, ' قصر شیرین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (335, 22, ' کرمانشاه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (336, 22, ' کنگاور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (337, 22, ' گیلان غرب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (338, 22, ' هرسین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (339, 23, ' بویر احمد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (341, 23, ' دنا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (343, 23, ' گچساران');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (344, 24, ' آزادشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (345, 24, ' آق قلا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (346, 24, ' بندر گز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (347, 24, ' بندر ترکمن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (348, 24, ' رامیان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (349, 24, ' علی آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (350, 24, ' کرد کوی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (351, 24, ' کلاله');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (352, 24, ' گرگان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (353, 24, ' گنبد کاووس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (354, 24, ' مینو دشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (355, 25, ' آستارا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (356, 25, ' آستانه اشرفیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (357, 25, ' املش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (358, 25, ' بندر انزلی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (359, 25, ' رشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (360, 25, ' رضوانشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (361, 25, ' رودبار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (362, 25, ' رودسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (363, 25, ' سیاهکل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (364, 25, ' شفت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (365, 25, ' صومعه سرا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (366, 25, ' طوالش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (367, 25, ' فومن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (368, 25, ' لاهیجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (369, 25, ' لنگرود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (370, 25, ' ماسال');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (371, 26, ' ازنا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (372, 26, ' الیگودرز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (373, 26, ' بروجرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (374, 26, ' پلدختر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (375, 26, ' خرم آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (376, 26, ' دورود');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (377, 26, ' دلفان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (378, 26, ' سلسله');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (379, 26, ' کوهدشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (380, 26, ' الشتر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (381, 26, ' نورآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (382, 27, ' آمل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (383, 27, ' بابل');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (384, 27, ' بابلسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (385, 27, ' بهشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (386, 27, ' تنکابن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (387, 27, ' جویبار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (388, 27, ' چالوس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (389, 27, ' رامسر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (390, 27, ' ساری');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (391, 27, ' سوادکوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (392, 27, ' قائم شهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (393, 27, ' گلوگاه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (394, 27, ' محمود آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (395, 27, ' نکا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (396, 27, ' نور');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (397, 27, ' نوشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (398, 27, ' فریدونکنار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (399, 28, ' آشتیان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (400, 28, ' اراک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (401, 28, ' تفرش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (402, 28, ' خمین');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (403, 28, ' دلیجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (404, 28, ' زرندیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (405, 28, ' ساوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (406, 28, ' شازند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (407, 28, ' کمیجان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (408, 28, ' محلات');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (409, 29, ' بندرعباس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (410, 29, ' میناب');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (411, 29, ' بندر لنگه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (412, 29, ' رودان-دهبارز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (413, 29, ' جاسک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (414, 29, ' قشم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (415, 29, ' حاجی آباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (416, 29, ' ابوموسی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (417, 29, ' بستک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (418, 29, ' گاوبندی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (419, 29, ' خمیر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (420, 30, ' اسدآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (421, 30, ' بهار');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (422, 30, ' تویسرکان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (423, 30, ' رزن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (424, 30, ' کبودر آهنگ');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (425, 30, ' ملایر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (426, 30, ' نهاوند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (427, 30, ' همدان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (428, 31, ' ابرکوه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (429, 31, ' اردکان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (430, 31, ' بافق');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (431, 31, ' تفت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (432, 31, ' خاتم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (433, 31, ' صدوق');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (434, 31, ' طبس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (435, 31, ' مهریز');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (436, 31, ' میبد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (437, 31, ' یزد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (438, 8, 'قرچک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (439, 8, 'گلستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (440, 8, 'قدس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (441, 8, 'ملارد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (442, 8, 'نسیمشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (443, 8, 'اندیشه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (444, 8, 'صالحآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (445, 8, 'باقرشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (446, 8, 'باغستان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (447, 8, 'بومهن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (448, 8, 'چهاردانگه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (449, 8, 'پیشوا');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (450, 8, 'پردیس');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (451, 8, 'وحیدیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (452, 8, 'نصیرآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (453, 8, 'فردوسیه');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (454, 8, 'حسنآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (455, 8, 'رودهن');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (456, 8, 'شاهدشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (457, 8, 'صباشهر');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (458, 8, 'صفادشت');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (459, 8, 'لواسان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (460, 8, 'آبسرد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (461, 8, 'شریفآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (462, 8, 'کهریزک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (463, 8, 'فشم');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (464, 8, 'جوادآباد');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (465, 8, 'کیلان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (466, 8, 'آبعلی');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (467, 8, 'ارجمند');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (468, 29, 'کیش');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (469, 29, 'لاوان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (470, 29, 'پارسیان');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (471, 29, 'سیریک');
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
VALUES (472, 29, 'بشاگرد');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE
 | 
			
		||||
FROM `cities`
 | 
			
		||||
WHERE id BETWEEN '1' AND '472';
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `admins`
 | 
			
		||||
(
 | 
			
		||||
    `id`            INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
    `first_name`    VARCHAR(191),
 | 
			
		||||
    `last_name`     VARCHAR(191),
 | 
			
		||||
    `password`      TEXT NOT NULL,
 | 
			
		||||
    `phone_number`  VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
    `role`          ENUM('super-admin','admin') NOT NULL,
 | 
			
		||||
    `description`   TEXT,
 | 
			
		||||
    `email`         VARCHAR(191) NOT NULL UNIQUE,
 | 
			
		||||
    `gender`        VARCHAR(191),
 | 
			
		||||
    `status`        VARCHAR(191),
 | 
			
		||||
    `created_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `admins`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `kind_boxes`
 | 
			
		||||
(
 | 
			
		||||
    `id`                INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
    `kind_box_req_id`   INT                                        NOT NULL,
 | 
			
		||||
    `benefactor_id`     INT                                        NOT NULL,
 | 
			
		||||
    `type`              ENUM ('on-table','cylindrical','stand-up') NOT NULL,
 | 
			
		||||
    `total_amount`      INT UNSIGNED                               NULL NULL,
 | 
			
		||||
    `serial_number`     varchar(255),
 | 
			
		||||
    `status`            varchar(255),
 | 
			
		||||
    `sender_id`         INT                                        NULL,
 | 
			
		||||
    `receiver_id`       INT                                        NULL,
 | 
			
		||||
    `status_changed_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    `created_at`        TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    FOREIGN KEY (`kind_box_req_id`) REFERENCES `kind_box_reqs` (`id`),
 | 
			
		||||
    FOREIGN KEY (`benefactor_id`) REFERENCES `benefactors` (`id`),
 | 
			
		||||
    FOREIGN KEY (`sender_id`) REFERENCES `admins` (`id`),
 | 
			
		||||
    FOREIGN KEY (`receiver_id`) REFERENCES `admins` (`id`),
 | 
			
		||||
    index `index_serial_number` (`serial_number`)
 | 
			
		||||
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `kind_boxes`;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
CREATE TABLE `kind_boxes` (
 | 
			
		||||
                            `id`                    INT PRIMARY KEY AUTO_INCREMENT,
 | 
			
		||||
                            `kind_box_req_id`       INT NOT NULL,
 | 
			
		||||
                            `benefactor_id`         INT NOT NULL,
 | 
			
		||||
                            `type`                  ENUM('on-table','cylindrical','stand-up') NOT NULL,
 | 
			
		||||
                            `amount`                INT UNSIGNED,
 | 
			
		||||
                            `serial_number`         varchar(191),
 | 
			
		||||
                            `status`                ENUM('delivered','ready-to-return','assigned-receiver-agent','returned','enumerated') NOT NULL,
 | 
			
		||||
                            `deliver_refer_date`    DATETIME NOT NULL,
 | 
			
		||||
                            `deliver_address_id`    INT NOT NULL,
 | 
			
		||||
                            `sender_agent_id`       INT NOT NULL,
 | 
			
		||||
                            `delivered_at`          DATETIME NOT NULL,
 | 
			
		||||
                            `return_refer_date`     DATETIME,
 | 
			
		||||
                            `return_address_id`     INT,
 | 
			
		||||
                            `receiver_agent_id`     INT,
 | 
			
		||||
                            `returned_at`           DATETIME,
 | 
			
		||||
 | 
			
		||||
                            `created_at`            TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
                            FOREIGN KEY (`kind_box_req_id`)     REFERENCES `kind_box_reqs` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`benefactor_id`)       REFERENCES `benefactors` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`deliver_address_id`)  REFERENCES `addresses` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`sender_agent_id`)     REFERENCES `admins` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`return_address_id`)   REFERENCES `addresses` (`id`),
 | 
			
		||||
                            FOREIGN KEY (`receiver_agent_id`)   REFERENCES `admins` (`id`),
 | 
			
		||||
                            INDEX `index_serial_number` (`serial_number`)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DROP TABLE `kind_boxes`;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,10 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
-- what can we do for password?
 | 
			
		||||
INSERT INTO `admins` (`id`, `phone_number`, `email`,`password`,`role`,`status`)
 | 
			
		||||
VALUES (1, '09122702856', 'keshvari@gmail.com','Abc123456','super-admin','active');
 | 
			
		||||
    VALUES
 | 
			
		||||
        (1, '09122702856', 'keshvari@gmail.com','Abc123456','super-admin','active');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE
 | 
			
		||||
    FROM `admins`
 | 
			
		||||
WHERE id '1' ;
 | 
			
		||||
        WHERE id = 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
ALTER TABLE `admin_access_controls` MODIFY COLUMN `permission`
 | 
			
		||||
    enum (
 | 
			
		||||
        'admin-register',
 | 
			
		||||
        'kindboxreq-accept',
 | 
			
		||||
        'kindboxreq-reject',
 | 
			
		||||
        'kindboxreq-getall'
 | 
			
		||||
    ) NOT NULL;
 | 
			
		||||
    
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
INSERT INTO `admin_access_controls` (`id`, `actor_id`, `actor_type`,`permission`)
 | 
			
		||||
    VALUES 
 | 
			
		||||
        (1, 1 , 'role','admin-register'),
 | 
			
		||||
        (2, 1 , 'role','kindboxreq-accept'),
 | 
			
		||||
        (3, 1 , 'role','kindboxreq-reject'),
 | 
			
		||||
        (4, 1 , 'role','kindboxreq-getall'),
 | 
			
		||||
        (5, 2 , 'role','kindboxreq-accept'),
 | 
			
		||||
        (6, 2 , 'role','kindboxreq-reject'),
 | 
			
		||||
        (7, 2 , 'role','kindboxreq-getall');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE
 | 
			
		||||
    FROM `admin_access_controls`
 | 
			
		||||
        WHERE id BETWEEN 1 AND 7;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
INSERT INTO `provinces` (`id`, `name`)
 | 
			
		||||
    VALUES
 | 
			
		||||
        (1, 'آذربایجان شرقی'),
 | 
			
		||||
        (2, 'آذربایجان غربی'),
 | 
			
		||||
        (3, 'اردبیل'),
 | 
			
		||||
        (4, 'اصفهان'),
 | 
			
		||||
        (5, 'البرز'),
 | 
			
		||||
        (6, 'ایلام'),
 | 
			
		||||
        (7, 'بوشهر'),
 | 
			
		||||
        (8, 'تهران'),
 | 
			
		||||
        (9, 'چهارمحال و بختیاری'),
 | 
			
		||||
        (10, 'خراسان جنوبی'),
 | 
			
		||||
        (11, 'خراسان رضوی'),
 | 
			
		||||
        (12, 'خراسان شمالی'),
 | 
			
		||||
        (13, 'خوزستان'),
 | 
			
		||||
        (14, 'زنجان'),
 | 
			
		||||
        (15, 'سمنان'),
 | 
			
		||||
        (16, 'سیستان و بلوچستان'),
 | 
			
		||||
        (17, 'فارس'),
 | 
			
		||||
        (18, 'قزوین'),
 | 
			
		||||
        (19, 'قم'),
 | 
			
		||||
        (20, 'كردستان'),
 | 
			
		||||
        (21, 'كرمان'),
 | 
			
		||||
        (22, 'كرمانشاه'),
 | 
			
		||||
        (23, 'کهگیلویه و بویراحمد'),
 | 
			
		||||
        (24, 'گلستان'),
 | 
			
		||||
        (25, 'گیلان'),
 | 
			
		||||
        (26, 'لرستان'),
 | 
			
		||||
        (27, 'مازندران'),
 | 
			
		||||
        (28, 'مركزی'),
 | 
			
		||||
        (29, 'هرمزگان'),
 | 
			
		||||
        (30, 'همدان'),
 | 
			
		||||
        (31, 'یزد');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE
 | 
			
		||||
    FROM `provinces`
 | 
			
		||||
       WHERE id BETWEEN 1 AND 31;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,477 @@
 | 
			
		|||
-- +migrate Up
 | 
			
		||||
INSERT INTO `cities` (`id`, `province_id`, `name`)
 | 
			
		||||
    VALUES
 | 
			
		||||
        (1, 1, 'آذرشهر'),
 | 
			
		||||
        (2, 1, 'اسکو'),
 | 
			
		||||
        (3, 1, 'اهر'),
 | 
			
		||||
        (4, 1, 'بستان آباد'),
 | 
			
		||||
        (5, 1, 'بناب'),
 | 
			
		||||
        (6, 1, 'تبریز'),
 | 
			
		||||
        (7, 1, ' جلفا'),
 | 
			
		||||
        (8, 1, ' چار اویماق'),
 | 
			
		||||
        (9, 1, ' سراب'),
 | 
			
		||||
        (10, 1, ' شبستر'),
 | 
			
		||||
        (11, 1, ' عجبشیر'),
 | 
			
		||||
        (12, 1, ' کلیبر'),
 | 
			
		||||
        (13, 1, ' مراغه'),
 | 
			
		||||
        (14, 1, ' مرند'),
 | 
			
		||||
        (15, 1, ' ملکان'),
 | 
			
		||||
        (16, 1, ' میانه'),
 | 
			
		||||
        (17, 1, ' ورزقان'),
 | 
			
		||||
        (18, 1, ' هریس'),
 | 
			
		||||
        (19, 1, 'هشترود'),
 | 
			
		||||
        (20, 2, ' ارومیه'),
 | 
			
		||||
        (21, 2, ' اشنویه'),
 | 
			
		||||
        (22, 2, ' بوکان'),
 | 
			
		||||
        (23, 2, ' پیرانشهر'),
 | 
			
		||||
        (24, 2, ' تکاب'),
 | 
			
		||||
        (25, 2, ' چالدران'),
 | 
			
		||||
        (26, 2, ' خوی'),
 | 
			
		||||
        (27, 2, ' سردشت'),
 | 
			
		||||
        (28, 2, ' سلماس'),
 | 
			
		||||
        (29, 2, ' شاهین دژ'),
 | 
			
		||||
        (30, 2, ' ماکو'),
 | 
			
		||||
        (31, 2, ' مهاباد'),
 | 
			
		||||
        (32, 2, ' میاندوآب'),
 | 
			
		||||
        (33, 2, ' نقده'),
 | 
			
		||||
        (34, 3, ' اردبیل'),
 | 
			
		||||
        (35, 3, ' بیله سوار'),
 | 
			
		||||
        (36, 3, ' پارس آباد'),
 | 
			
		||||
        (37, 3, ' خلخال'),
 | 
			
		||||
        (38, 3, ' کوثر'),
 | 
			
		||||
        (39, 3, ' گرمی'),
 | 
			
		||||
        (40, 3, ' مشگین'),
 | 
			
		||||
        (41, 3, ' نمین'),
 | 
			
		||||
        (42, 3, ' نیر'),
 | 
			
		||||
        (43, 4, ' آران و بیدگل'),
 | 
			
		||||
        (44, 4, ' اردستان'),
 | 
			
		||||
        (45, 4, ' اصفهان'),
 | 
			
		||||
        (46, 4, ' برخوار و میمه'),
 | 
			
		||||
        (47, 4, ' تیران و کرون'),
 | 
			
		||||
        (48, 4, ' چادگان'),
 | 
			
		||||
        (49, 4, ' خمینی شهر'),
 | 
			
		||||
        (50, 4, ' خوانسار'),
 | 
			
		||||
        (51, 4, ' سمیرم'),
 | 
			
		||||
        (52, 4, ' شاهین شهر و میمه'),
 | 
			
		||||
        (53, 4, ' شهر رضا'),
 | 
			
		||||
        (54, 4, 'دهاقان'),
 | 
			
		||||
        (55, 4, ' فریدن'),
 | 
			
		||||
        (56, 4, ' فریدون شهر'),
 | 
			
		||||
        (57, 4, ' فلاورجان'),
 | 
			
		||||
        (58, 4, ' کاشان'),
 | 
			
		||||
        (59, 4, ' گلپایگان'),
 | 
			
		||||
        (60, 4, ' لنجان'),
 | 
			
		||||
        (61, 4, ' مبارکه'),
 | 
			
		||||
        (62, 4, ' نائین'),
 | 
			
		||||
        (63, 4, ' نجف آباد'),
 | 
			
		||||
        (64, 4, ' نطنز'),
 | 
			
		||||
        (65, 5, ' ساوجبلاق'),
 | 
			
		||||
        (66, 5, ' کرج'),
 | 
			
		||||
        (67, 5, ' نظرآباد'),
 | 
			
		||||
        (68, 5, 'طالقان'),
 | 
			
		||||
        (69, 6, ' آبدانان'),
 | 
			
		||||
        (70, 6, ' ایلام'),
 | 
			
		||||
        (71, 6, ' ایوان'),
 | 
			
		||||
        (72, 6, ' دره شهر'),
 | 
			
		||||
        (73, 6, ' دهلران'),
 | 
			
		||||
        (74, 6, ' شیران و چرداول'),
 | 
			
		||||
        (75, 6, ' مهران'),
 | 
			
		||||
        (76, 7, ' بوشهر'),
 | 
			
		||||
        (77, 7, ' تنگستان'),
 | 
			
		||||
        (78, 7, ' جم'),
 | 
			
		||||
        (79, 7, ' دشتستان'),
 | 
			
		||||
        (80, 7, ' دشتی'),
 | 
			
		||||
        (81, 7, ' دیر'),
 | 
			
		||||
        (82, 7, ' دیلم'),
 | 
			
		||||
        (83, 7, ' کنگان'),
 | 
			
		||||
        (84, 7, ' گناوه'),
 | 
			
		||||
        (85, 8, ' اسلام شهر'),
 | 
			
		||||
        (86, 8, ' پاکدشت'),
 | 
			
		||||
        (87, 8, ' تهران'),
 | 
			
		||||
        (88, 8, ' دماوند'),
 | 
			
		||||
        (89, 8, ' رباط کریم'),
 | 
			
		||||
        (90, 8, ' ری'),
 | 
			
		||||
        (91, 8, ' شمیرانات'),
 | 
			
		||||
        (92, 8, ' شهریار'),
 | 
			
		||||
        (93, 8, ' فیروزکوه'),
 | 
			
		||||
        (94, 8, ' ورامین'),
 | 
			
		||||
        (95, 9, ' اردل'),
 | 
			
		||||
        (96, 9, ' بروجن'),
 | 
			
		||||
        (97, 9, ' شهرکرد'),
 | 
			
		||||
        (98, 9, ' فارسان'),
 | 
			
		||||
        (99, 9, ' کوهرنگ'),
 | 
			
		||||
        (100, 9, ' لردگان'),
 | 
			
		||||
        (101, 10, ' بیرجند'),
 | 
			
		||||
        (102, 10, ' درمیان'),
 | 
			
		||||
        (103, 10, ' سرایان'),
 | 
			
		||||
        (104, 10, ' سر بیشه'),
 | 
			
		||||
        (105, 10, ' فردوس'),
 | 
			
		||||
        (106, 10, ' قائن'),
 | 
			
		||||
        (107, 10, ' نهبندان'),
 | 
			
		||||
        (108, 11, ' برد سکن'),
 | 
			
		||||
        (109, 11, ' بجستان'),
 | 
			
		||||
        (110, 11, ' تایباد'),
 | 
			
		||||
        (111, 11, ' تحت جلگه'),
 | 
			
		||||
        (112, 11, ' تربت جام'),
 | 
			
		||||
        (113, 11, ' تربت حیدریه'),
 | 
			
		||||
        (114, 11, ' چناران'),
 | 
			
		||||
        (115, 11, ' جغتای'),
 | 
			
		||||
        (116, 11, ' جوین'),
 | 
			
		||||
        (117, 11, ' خلیل آباد'),
 | 
			
		||||
        (118, 11, ' خواف'),
 | 
			
		||||
        (119, 11, ' درگز'),
 | 
			
		||||
        (120, 11, ' رشتخوار'),
 | 
			
		||||
        (121, 11, ' زاوه'),
 | 
			
		||||
        (122, 11, ' سبزوار'),
 | 
			
		||||
        (123, 11, ' سرخس'),
 | 
			
		||||
        (124, 11, ' فریمان'),
 | 
			
		||||
        (125, 11, ' قوچان'),
 | 
			
		||||
        (126, 11, 'طرقبه شاندیز'),
 | 
			
		||||
        (127, 11, ' کاشمر'),
 | 
			
		||||
        (128, 11, ' کلات'),
 | 
			
		||||
        (129, 11, ' گناباد'),
 | 
			
		||||
        (130, 11, ' مشهد'),
 | 
			
		||||
        (131, 11, ' مه ولات'),
 | 
			
		||||
        (132, 11, ' نیشابور'),
 | 
			
		||||
        (133, 12, ' اسفراین'),
 | 
			
		||||
        (134, 12, ' بجنورد'),
 | 
			
		||||
        (135, 12, ' جاجرم'),
 | 
			
		||||
        (136, 12, ' شیروان'),
 | 
			
		||||
        (137, 12, ' فاروج'),
 | 
			
		||||
        (138, 12, ' مانه و سملقان'),
 | 
			
		||||
        (139, 13, ' آبادان'),
 | 
			
		||||
        (140, 13, ' امیدیه'),
 | 
			
		||||
        (141, 13, ' اندیمشک'),
 | 
			
		||||
        (142, 13, ' اهواز'),
 | 
			
		||||
        (143, 13, ' ایذه'),
 | 
			
		||||
        (144, 13, ' باغ ملک'),
 | 
			
		||||
        (145, 13, ' بندرماهشهر'),
 | 
			
		||||
        (146, 13, ' بهبهان'),
 | 
			
		||||
        (147, 13, ' خرمشهر'),
 | 
			
		||||
        (148, 13, ' دزفول'),
 | 
			
		||||
        (149, 13, ' دشت آزادگان'),
 | 
			
		||||
        (150, 13, ' رامشیر'),
 | 
			
		||||
        (151, 13, ' رامهرمز'),
 | 
			
		||||
        (152, 13, ' شادگان'),
 | 
			
		||||
        (153, 13, ' شوش'),
 | 
			
		||||
        (154, 13, ' شوشتر'),
 | 
			
		||||
        (155, 13, ' گتوند'),
 | 
			
		||||
        (156, 13, ' لالی'),
 | 
			
		||||
        (157, 13, ' مسجد سلیمان'),
 | 
			
		||||
        (158, 13, ' هندیجان'),
 | 
			
		||||
        (159, 14, ' ابهر'),
 | 
			
		||||
        (160, 14, ' ایجرود'),
 | 
			
		||||
        (161, 14, ' خدابنده'),
 | 
			
		||||
        (162, 14, ' خرمدره'),
 | 
			
		||||
        (163, 14, ' زنجان'),
 | 
			
		||||
        (164, 14, ' طارم'),
 | 
			
		||||
        (165, 14, ' ماه نشان'),
 | 
			
		||||
        (166, 15, ' دامغان'),
 | 
			
		||||
        (167, 15, ' سمنان'),
 | 
			
		||||
        (168, 15, ' شاهرود'),
 | 
			
		||||
        (169, 15, ' گرمسار'),
 | 
			
		||||
        (170, 15, ' مهدی شهر'),
 | 
			
		||||
        (171, 16, ' ایرانشهر'),
 | 
			
		||||
        (172, 16, ' چابهار'),
 | 
			
		||||
        (173, 16, ' خاش'),
 | 
			
		||||
        (174, 16, ' دلگان'),
 | 
			
		||||
        (175, 16, ' زابل'),
 | 
			
		||||
        (176, 16, ' زاهدان'),
 | 
			
		||||
        (177, 16, ' زهک'),
 | 
			
		||||
        (178, 16, ' سراوان'),
 | 
			
		||||
        (179, 16, ' سرباز'),
 | 
			
		||||
        (180, 16, ' کنارک'),
 | 
			
		||||
        (181, 16, ' نیکشهر'),
 | 
			
		||||
        (182, 17, ' آباده'),
 | 
			
		||||
        (183, 17, ' ارسنجان'),
 | 
			
		||||
        (184, 17, ' استهبان'),
 | 
			
		||||
        (185, 17, ' اقلید'),
 | 
			
		||||
        (186, 17, ' بوانات'),
 | 
			
		||||
        (187, 17, ' پاسارگاد'),
 | 
			
		||||
        (188, 17, ' جهرم'),
 | 
			
		||||
        (189, 17, ' خرم بید'),
 | 
			
		||||
        (190, 17, ' خنج'),
 | 
			
		||||
        (191, 17, ' داراب'),
 | 
			
		||||
        (192, 17, ' زرین دشت'),
 | 
			
		||||
        (193, 17, ' سپیدان'),
 | 
			
		||||
        (194, 17, ' شیراز'),
 | 
			
		||||
        (195, 17, ' فراشبند'),
 | 
			
		||||
        (196, 17, ' فسا'),
 | 
			
		||||
        (197, 17, ' فیروزآباد'),
 | 
			
		||||
        (198, 17, ' قیر و کارزین'),
 | 
			
		||||
        (199, 17, ' کازرون'),
 | 
			
		||||
        (200, 17, ' لارستان'),
 | 
			
		||||
        (201, 17, ' لامرد'),
 | 
			
		||||
        (202, 17, ' مرودشت'),
 | 
			
		||||
        (203, 17, ' ممسنی'),
 | 
			
		||||
        (204, 17, ' مهر'),
 | 
			
		||||
        (205, 17, ' نی ریز'),
 | 
			
		||||
        (206, 18, ' آبیک'),
 | 
			
		||||
        (207, 18, ' البرز'),
 | 
			
		||||
        (208, 18, ' بوئین زهرا'),
 | 
			
		||||
        (209, 18, ' تاکستان'),
 | 
			
		||||
        (210, 18, ' قزوین'),
 | 
			
		||||
        (211, 19, ' قم'),
 | 
			
		||||
        (212, 20, ' بانه'),
 | 
			
		||||
        (213, 20, ' بیجار'),
 | 
			
		||||
        (214, 20, ' دیواندره'),
 | 
			
		||||
        (215, 20, ' سروآباد'),
 | 
			
		||||
        (216, 20, ' سقز'),
 | 
			
		||||
        (217, 20, ' سنندج'),
 | 
			
		||||
        (218, 20, ' قروه'),
 | 
			
		||||
        (219, 20, ' کامیاران'),
 | 
			
		||||
        (220, 20, ' مریوان'),
 | 
			
		||||
        (221, 21, ' بافت'),
 | 
			
		||||
        (222, 21, ' بردسیر'),
 | 
			
		||||
        (223, 21, ' بم'),
 | 
			
		||||
        (224, 21, ' جیرفت'),
 | 
			
		||||
        (225, 21, ' راور'),
 | 
			
		||||
        (226, 21, ' رفسنجان'),
 | 
			
		||||
        (227, 21, ' رودبار جنوب'),
 | 
			
		||||
        (228, 21, ' زرند'),
 | 
			
		||||
        (229, 21, ' سیرجان'),
 | 
			
		||||
        (230, 21, ' شهر بابک'),
 | 
			
		||||
        (231, 21, ' عنبرآباد'),
 | 
			
		||||
        (232, 21, ' قلعه گنج'),
 | 
			
		||||
        (233, 21, ' کرمان'),
 | 
			
		||||
        (234, 21, ' کوهبنان'),
 | 
			
		||||
        (235, 21, ' کهنوج'),
 | 
			
		||||
        (236, 21, ' منوجان'),
 | 
			
		||||
        (237, 22, ' اسلام آباد غرب'),
 | 
			
		||||
        (238, 22, ' پاوه'),
 | 
			
		||||
        (239, 22, ' ثلاث باباجانی'),
 | 
			
		||||
        (240, 22, ' جوانرود'),
 | 
			
		||||
        (241, 22, ' دالاهو'),
 | 
			
		||||
        (242, 22, ' روانسر'),
 | 
			
		||||
        (243, 22, ' سرپل ذهاب'),
 | 
			
		||||
        (244, 22, ' سنقر'),
 | 
			
		||||
        (245, 22, ' صحنه'),
 | 
			
		||||
        (246, 22, ' قصر شیرین'),
 | 
			
		||||
        (247, 22, ' کرمانشاه'),
 | 
			
		||||
        (248, 22, ' کنگاور'),
 | 
			
		||||
        (249, 22, ' گیلان غرب'),
 | 
			
		||||
        (250, 22, ' هرسین'),
 | 
			
		||||
        (251, 23, ' بویر احمد'),
 | 
			
		||||
        (252, 23, ' بهمئی'),
 | 
			
		||||
        (253, 23, ' دنا'),
 | 
			
		||||
        (254, 23, ' کهگیلویه'),
 | 
			
		||||
        (255, 23, ' گچساران'),
 | 
			
		||||
        (256, 24, ' آزادشهر'),
 | 
			
		||||
        (257, 24, ' آق قلا'),
 | 
			
		||||
        (258, 24, ' بندر گز'),
 | 
			
		||||
        (259, 24, ' بندر ترکمن'),
 | 
			
		||||
        (260, 24, ' رامیان'),
 | 
			
		||||
        (261, 24, ' علی آباد'),
 | 
			
		||||
        (262, 24, ' کرد کوی'),
 | 
			
		||||
        (263, 24, ' کلاله'),
 | 
			
		||||
        (264, 24, ' گرگان'),
 | 
			
		||||
        (265, 24, ' گنبد کاووس'),
 | 
			
		||||
        (266, 24, ' مینو دشت'),
 | 
			
		||||
        (267, 25, ' آستارا'),
 | 
			
		||||
        (268, 25, ' آستانه اشرفیه'),
 | 
			
		||||
        (269, 25, ' املش'),
 | 
			
		||||
        (270, 25, ' بندر انزلی'),
 | 
			
		||||
        (271, 25, ' رشت'),
 | 
			
		||||
        (272, 25, ' رضوانشهر'),
 | 
			
		||||
        (273, 25, ' رودبار'),
 | 
			
		||||
        (274, 25, ' رودسر'),
 | 
			
		||||
        (275, 25, ' سیاهکل'),
 | 
			
		||||
        (276, 25, ' شفت'),
 | 
			
		||||
        (277, 25, ' صومعه سرا'),
 | 
			
		||||
        (278, 25, ' طوالش'),
 | 
			
		||||
        (279, 25, ' فومن'),
 | 
			
		||||
        (280, 25, ' لاهیجان'),
 | 
			
		||||
        (281, 25, ' لنگرود'),
 | 
			
		||||
        (282, 25, ' ماسال'),
 | 
			
		||||
        (283, 26, ' ازنا'),
 | 
			
		||||
        (284, 26, ' الیگودرز'),
 | 
			
		||||
        (285, 26, ' بروجرد'),
 | 
			
		||||
        (286, 26, ' پلدختر'),
 | 
			
		||||
        (287, 26, ' خرم آباد'),
 | 
			
		||||
        (288, 26, ' دورود'),
 | 
			
		||||
        (289, 17, ' لامرد'),
 | 
			
		||||
        (290, 17, ' مرودشت'),
 | 
			
		||||
        (291, 17, ' ممسنی'),
 | 
			
		||||
        (292, 17, ' مهر'),
 | 
			
		||||
        (293, 17, ' نی ریز'),
 | 
			
		||||
        (294, 18, ' آبیک'),
 | 
			
		||||
        (295, 18, ' البرز'),
 | 
			
		||||
        (296, 18, ' بوئین زهرا'),
 | 
			
		||||
        (297, 18, ' تاکستان'),
 | 
			
		||||
        (298, 18, ' قزوین'),
 | 
			
		||||
        (299, 19, ' قم'),
 | 
			
		||||
        (300, 20, ' بانه'),
 | 
			
		||||
        (301, 20, ' بیجار'),
 | 
			
		||||
        (302, 20, ' دیواندره'),
 | 
			
		||||
        (303, 20, ' سروآباد'),
 | 
			
		||||
        (304, 20, ' سقز'),
 | 
			
		||||
        (305, 20, ' سنندج'),
 | 
			
		||||
        (306, 20, ' قروه'),
 | 
			
		||||
        (307, 20, ' کامیاران'),
 | 
			
		||||
        (308, 20, ' مریوان'),
 | 
			
		||||
        (309, 21, ' بافت'),
 | 
			
		||||
        (310, 21, ' بردسیر'),
 | 
			
		||||
        (311, 21, ' بم'),
 | 
			
		||||
        (312, 21, ' جیرفت'),
 | 
			
		||||
        (313, 21, ' راور'),
 | 
			
		||||
        (314, 21, ' رفسنجان'),
 | 
			
		||||
        (315, 21, ' رودبار جنوب'),
 | 
			
		||||
        (316, 21, ' زرند'),
 | 
			
		||||
        (317, 21, ' سیرجان'),
 | 
			
		||||
        (318, 21, ' شهر بابک'),
 | 
			
		||||
        (319, 21, ' عنبرآباد'),
 | 
			
		||||
        (320, 21, ' قلعه گنج'),
 | 
			
		||||
        (321, 21, ' کرمان'),
 | 
			
		||||
        (322, 21, ' کوهبنان'),
 | 
			
		||||
        (323, 21, ' کهنوج'),
 | 
			
		||||
        (324, 21, ' منوجان'),
 | 
			
		||||
        (325, 22, ' اسلام آباد غرب'),
 | 
			
		||||
        (326, 22, ' پاوه'),
 | 
			
		||||
        (327, 22, ' ثلاث باباجانی'),
 | 
			
		||||
        (328, 22, ' جوانرود'),
 | 
			
		||||
        (329, 22, ' دالاهو'),
 | 
			
		||||
        (330, 22, ' روانسر'),
 | 
			
		||||
        (332, 22, ' سنقر'),
 | 
			
		||||
        (333, 22, ' صحنه'),
 | 
			
		||||
        (334, 22, ' قصر شیرین'),
 | 
			
		||||
        (335, 22, ' کرمانشاه'),
 | 
			
		||||
        (336, 22, ' کنگاور'),
 | 
			
		||||
        (337, 22, ' گیلان غرب'),
 | 
			
		||||
        (338, 22, ' هرسین'),
 | 
			
		||||
        (339, 23, ' بویر احمد'),
 | 
			
		||||
        (341, 23, ' دنا'),
 | 
			
		||||
        (343, 23, ' گچساران'),
 | 
			
		||||
        (344, 24, ' آزادشهر'),
 | 
			
		||||
        (345, 24, ' آق قلا'),
 | 
			
		||||
        (346, 24, ' بندر گز'),
 | 
			
		||||
        (347, 24, ' بندر ترکمن'),
 | 
			
		||||
        (348, 24, ' رامیان'),
 | 
			
		||||
        (349, 24, ' علی آباد'),
 | 
			
		||||
        (350, 24, ' کرد کوی'),
 | 
			
		||||
        (351, 24, ' کلاله'),
 | 
			
		||||
        (352, 24, ' گرگان'),
 | 
			
		||||
        (353, 24, ' گنبد کاووس'),
 | 
			
		||||
        (354, 24, ' مینو دشت'),
 | 
			
		||||
        (355, 25, ' آستارا'),
 | 
			
		||||
        (356, 25, ' آستانه اشرفیه'),
 | 
			
		||||
        (357, 25, ' املش'),
 | 
			
		||||
        (358, 25, ' بندر انزلی'),
 | 
			
		||||
        (359, 25, ' رشت'),
 | 
			
		||||
        (360, 25, ' رضوانشهر'),
 | 
			
		||||
        (361, 25, ' رودبار'),
 | 
			
		||||
        (362, 25, ' رودسر'),
 | 
			
		||||
        (363, 25, ' سیاهکل'),
 | 
			
		||||
        (364, 25, ' شفت'),
 | 
			
		||||
        (365, 25, ' صومعه سرا'),
 | 
			
		||||
        (366, 25, ' طوالش'),
 | 
			
		||||
        (367, 25, ' فومن'),
 | 
			
		||||
        (368, 25, ' لاهیجان'),
 | 
			
		||||
        (369, 25, ' لنگرود'),
 | 
			
		||||
        (370, 25, ' ماسال'),
 | 
			
		||||
        (371, 26, ' ازنا'),
 | 
			
		||||
        (372, 26, ' الیگودرز'),
 | 
			
		||||
        (373, 26, ' بروجرد'),
 | 
			
		||||
        (374, 26, ' پلدختر'),
 | 
			
		||||
        (375, 26, ' خرم آباد'),
 | 
			
		||||
        (376, 26, ' دورود'),
 | 
			
		||||
        (377, 26, ' دلفان'),
 | 
			
		||||
        (378, 26, ' سلسله'),
 | 
			
		||||
        (379, 26, ' کوهدشت'),
 | 
			
		||||
        (380, 26, ' الشتر'),
 | 
			
		||||
        (381, 26, ' نورآباد'),
 | 
			
		||||
        (382, 27, ' آمل'),
 | 
			
		||||
        (383, 27, ' بابل'),
 | 
			
		||||
        (384, 27, ' بابلسر'),
 | 
			
		||||
        (385, 27, ' بهشهر'),
 | 
			
		||||
        (386, 27, ' تنکابن'),
 | 
			
		||||
        (387, 27, ' جویبار'),
 | 
			
		||||
        (388, 27, ' چالوس'),
 | 
			
		||||
        (389, 27, ' رامسر'),
 | 
			
		||||
        (390, 27, ' ساری'),
 | 
			
		||||
        (391, 27, ' سوادکوه'),
 | 
			
		||||
        (392, 27, ' قائم شهر'),
 | 
			
		||||
        (393, 27, ' گلوگاه'),
 | 
			
		||||
        (394, 27, ' محمود آباد'),
 | 
			
		||||
        (395, 27, ' نکا'),
 | 
			
		||||
        (396, 27, ' نور'),
 | 
			
		||||
        (397, 27, ' نوشهر'),
 | 
			
		||||
        (398, 27, ' فریدونکنار'),
 | 
			
		||||
        (399, 28, ' آشتیان'),
 | 
			
		||||
        (400, 28, ' اراک'),
 | 
			
		||||
        (401, 28, ' تفرش'),
 | 
			
		||||
        (402, 28, ' خمین'),
 | 
			
		||||
        (403, 28, ' دلیجان'),
 | 
			
		||||
        (404, 28, ' زرندیه'),
 | 
			
		||||
        (405, 28, ' ساوه'),
 | 
			
		||||
        (406, 28, ' شازند'),
 | 
			
		||||
        (407, 28, ' کمیجان'),
 | 
			
		||||
        (408, 28, ' محلات'),
 | 
			
		||||
        (409, 29, ' بندرعباس'),
 | 
			
		||||
        (410, 29, ' میناب'),
 | 
			
		||||
        (411, 29, ' بندر لنگه'),
 | 
			
		||||
        (412, 29, ' رودان-دهبارز'),
 | 
			
		||||
        (413, 29, ' جاسک'),
 | 
			
		||||
        (414, 29, ' قشم'),
 | 
			
		||||
        (415, 29, ' حاجی آباد'),
 | 
			
		||||
        (416, 29, ' ابوموسی'),
 | 
			
		||||
        (417, 29, ' بستک'),
 | 
			
		||||
        (418, 29, ' گاوبندی'),
 | 
			
		||||
        (419, 29, ' خمیر'),
 | 
			
		||||
        (420, 30, ' اسدآباد'),
 | 
			
		||||
        (421, 30, ' بهار'),
 | 
			
		||||
        (422, 30, ' تویسرکان'),
 | 
			
		||||
        (423, 30, ' رزن'),
 | 
			
		||||
        (424, 30, ' کبودر آهنگ'),
 | 
			
		||||
        (425, 30, ' ملایر'),
 | 
			
		||||
        (426, 30, ' نهاوند'),
 | 
			
		||||
        (427, 30, ' همدان'),
 | 
			
		||||
        (428, 31, ' ابرکوه'),
 | 
			
		||||
        (429, 31, ' اردکان'),
 | 
			
		||||
        (430, 31, ' بافق'),
 | 
			
		||||
        (431, 31, ' تفت'),
 | 
			
		||||
        (432, 31, ' خاتم'),
 | 
			
		||||
        (433, 31, ' صدوق'),
 | 
			
		||||
        (434, 31, ' طبس'),
 | 
			
		||||
        (435, 31, ' مهریز'),
 | 
			
		||||
        (436, 31, ' میبد'),
 | 
			
		||||
        (437, 31, ' یزد'),
 | 
			
		||||
        (438, 8, 'قرچک'),
 | 
			
		||||
        (439, 8, 'گلستان'),
 | 
			
		||||
        (440, 8, 'قدس'),
 | 
			
		||||
        (441, 8, 'ملارد'),
 | 
			
		||||
        (442, 8, 'نسیمشهر'),
 | 
			
		||||
        (443, 8, 'اندیشه'),
 | 
			
		||||
        (444, 8, 'صالحآباد'),
 | 
			
		||||
        (445, 8, 'باقرشهر'),
 | 
			
		||||
        (446, 8, 'باغستان'),
 | 
			
		||||
        (447, 8, 'بومهن'),
 | 
			
		||||
        (448, 8, 'چهاردانگه'),
 | 
			
		||||
        (449, 8, 'پیشوا'),
 | 
			
		||||
        (450, 8, 'پردیس'),
 | 
			
		||||
        (451, 8, 'وحیدیه'),
 | 
			
		||||
        (452, 8, 'نصیرآباد'),
 | 
			
		||||
        (453, 8, 'فردوسیه'),
 | 
			
		||||
        (454, 8, 'حسنآباد'),
 | 
			
		||||
        (455, 8, 'رودهن'),
 | 
			
		||||
        (456, 8, 'شاهدشهر'),
 | 
			
		||||
        (457, 8, 'صباشهر'),
 | 
			
		||||
        (458, 8, 'صفادشت'),
 | 
			
		||||
        (459, 8, 'لواسان'),
 | 
			
		||||
        (460, 8, 'آبسرد'),
 | 
			
		||||
        (461, 8, 'شریفآباد'),
 | 
			
		||||
        (462, 8, 'کهریزک'),
 | 
			
		||||
        (463, 8, 'فشم'),
 | 
			
		||||
        (464, 8, 'جوادآباد'),
 | 
			
		||||
        (465, 8, 'کیلان'),
 | 
			
		||||
        (466, 8, 'آبعلی'),
 | 
			
		||||
        (467, 8, 'ارجمند'),
 | 
			
		||||
        (468, 29, 'کیش'),
 | 
			
		||||
        (469, 29, 'لاوان'),
 | 
			
		||||
        (470, 29, 'پارسیان'),
 | 
			
		||||
        (471, 29, 'سیریک'),
 | 
			
		||||
        (472, 29, 'بشاگرد');
 | 
			
		||||
 | 
			
		||||
-- +migrate Down
 | 
			
		||||
DELETE
 | 
			
		||||
    FROM `cities`
 | 
			
		||||
        WHERE id BETWEEN 1 AND 472;
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ func (s Service) LoginWithPhoneNumber(ctx context.Context, req adminserviceparam
 | 
			
		|||
		return adminserviceparam.LoginWithPhoneNumberResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if cErr := CompareHash(admin.GetPassword(), req.Password); cErr != nil {
 | 
			
		||||
	if cErr := CompareHash(admin.Password, req.Password); cErr != nil {
 | 
			
		||||
		return adminserviceparam.LoginWithPhoneNumberResponse{}, richerror.New(op).WithErr(cErr).WithMessage(errmsg.ErrorMsgPhoneNumberOrPassIsIncorrect).WithKind(richerror.KindForbidden)
 | 
			
		||||
	}
 | 
			
		||||
	authenticableAdmin := entity.Authenticable{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ func (s Service) Register(ctx context.Context, req adminserviceparam.RegisterReq
 | 
			
		|||
	if bErr := GenerateHash(req.Password); bErr != nil {
 | 
			
		||||
		return adminserviceparam.RegisterResponse{}, richerror.New(op).WithErr(bErr).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
	newAdmin.SetPassword(*req.Password)
 | 
			
		||||
	newAdmin.Password = *req.Password
 | 
			
		||||
 | 
			
		||||
	admin, err := s.repo.AddAdmin(ctx, newAdmin)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,32 @@
 | 
			
		|||
package adminkindboxservice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (s Service) AddBatchKindBox(ctx context.Context, req param.AddKindBoxRequest) (param.AddKindBoxResponse, error) {
 | 
			
		||||
	const op = "adminkindboxservice.AddKindBox"
 | 
			
		||||
	kindBoxes := make([]entity.KindBox, 0)
 | 
			
		||||
	kb := entity.KindBox{
 | 
			
		||||
		KindBoxReqID:     req.KindBoxReqID,
 | 
			
		||||
		BenefactorID:     req.BenefactorID,
 | 
			
		||||
		Type:             req.Type,
 | 
			
		||||
		DeliverReferDate: req.DeliverReferDate,
 | 
			
		||||
		DeliverAddressID: req.DeliverAddressID,
 | 
			
		||||
		DeliveredAt:      req.DeliveredAt,
 | 
			
		||||
		SenderAgentID:    req.SenderAgentID,
 | 
			
		||||
		Status:           entity.KindBoxDeliveredStatus,
 | 
			
		||||
	}
 | 
			
		||||
	for i := uint(0); i < req.CountAccepted; i++ {
 | 
			
		||||
		kindBoxes = append(kindBoxes, kb)
 | 
			
		||||
	}
 | 
			
		||||
	aErr := s.repo.AddBatchKindBox(ctx, kindBoxes)
 | 
			
		||||
	if aErr != nil {
 | 
			
		||||
		return param.AddKindBoxResponse{}, richerror.New(op).WithErr(aErr).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
	return param.AddKindBoxResponse{}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ import (
 | 
			
		|||
 | 
			
		||||
type Repository interface {
 | 
			
		||||
	AddBatchKindBox(ctx context.Context, kindBoxes []entity.KindBox) error
 | 
			
		||||
	AddKindBox(ctx context.Context, kindBox entity.KindBox) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Service struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest)
 | 
			
		|||
		KindBoxReqStatus: kindBoxReq.Status,
 | 
			
		||||
		CountRequested:   kindBoxReq.CountRequested,
 | 
			
		||||
		CountAccepted:    kindBoxReq.CountAccepted,
 | 
			
		||||
		ReferDate:        kindBoxReq.ReferDate,
 | 
			
		||||
		AddressID:        kindBoxReq.AddressID,
 | 
			
		||||
		DeliverReferDate: kindBoxReq.DeliverReferDate,
 | 
			
		||||
		DeliverAddressID: kindBoxReq.DeliverAddressID,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
package adminkindboxreqservice
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	kindboxParam "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (s Service) Deliver(ctx context.Context, req param.DeliverKindBoxReqRequest) (param.DeliverKindBoxReqResponse, error) {
 | 
			
		||||
	const op = "adminkindboxreqservice.Deliver"
 | 
			
		||||
 | 
			
		||||
	kindBoxReq, gErr := s.repo.GetByID(ctx, req.KindBoxReqID)
 | 
			
		||||
	if gErr != nil {
 | 
			
		||||
		return param.DeliverKindBoxReqResponse{}, richerror.New(op).WithErr(gErr).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
	_, aErr := s.kindBoxSvc.AddBatchKindBox(ctx, kindboxParam.AddKindBoxRequest{
 | 
			
		||||
		KindBoxReqID:     kindBoxReq.ID,
 | 
			
		||||
		BenefactorID:     kindBoxReq.BenefactorID,
 | 
			
		||||
		Type:             kindBoxReq.KindBoxType,
 | 
			
		||||
		DeliverReferDate: kindBoxReq.DeliverReferDate,
 | 
			
		||||
		DeliverAddressID: kindBoxReq.DeliverAddressID,
 | 
			
		||||
		SenderAgentID:    kindBoxReq.SenderAgentID,
 | 
			
		||||
		DeliveredAt:      time.Now(),
 | 
			
		||||
		CountAccepted:    kindBoxReq.CountAccepted,
 | 
			
		||||
	})
 | 
			
		||||
	if aErr != nil {
 | 
			
		||||
		return param.DeliverKindBoxReqResponse{}, richerror.New(op).WithErr(aErr).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
	dErr := s.repo.DeliverKindBoxReq(ctx, req.KindBoxReqID)
 | 
			
		||||
	if dErr != nil {
 | 
			
		||||
		return param.DeliverKindBoxReqResponse{}, richerror.New(op).WithErr(dErr).WithKind(richerror.KindUnexpected)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return param.DeliverKindBoxReqResponse{}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@ func (s Service) Reject(ctx context.Context, req param.KindBoxReqRejectRequest)
 | 
			
		|||
		BenefactorID:     kindBoxReq.BenefactorID,
 | 
			
		||||
		Status:           kindBoxReq.Status,
 | 
			
		||||
		Description:      kindBoxReq.Description,
 | 
			
		||||
		ReferDate:      kindBoxReq.ReferDate,
 | 
			
		||||
		AddressID:      kindBoxReq.AddressID,
 | 
			
		||||
		DeliverReferDate: kindBoxReq.DeliverReferDate,
 | 
			
		||||
		DeliverAddressID: kindBoxReq.DeliverAddressID,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,9 @@ package adminkindboxreqservice
 | 
			
		|||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	paginationparam "git.gocasts.ir/ebhomengo/niki/param"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Repository interface {
 | 
			
		||||
| 
						 | 
				
			
			@ -13,10 +14,16 @@ type Repository interface {
 | 
			
		|||
	RejectKindBoxReq(ctx context.Context, kindBoxReqID uint, description string) error
 | 
			
		||||
	RollbackKindBoxRequestStatus(ctx context.Context, id uint) error
 | 
			
		||||
	GetAllKindBoxReq(ctx context.Context, pagination paginationparam.PaginationRequest) ([]entity.KindBoxReq, paginationparam.PaginationResponse, error)
 | 
			
		||||
	DeliverKindBoxReq(ctx context.Context, kindBoxReqID uint) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type KindBoxSvc interface {
 | 
			
		||||
	AddBatchKindBox(ctx context.Context, req param.AddKindBoxRequest) (param.AddKindBoxResponse, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Service struct {
 | 
			
		||||
	repo       Repository
 | 
			
		||||
	kindBoxSvc KindBoxSvc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func New(repository Repository) Service {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,6 @@ func (s Service) LoginOrRegister(ctx context.Context, req benefactoreparam.Login
 | 
			
		|||
	if !isExist {
 | 
			
		||||
		newBenefactor, err := s.repo.CreateBenefactor(ctx, entity.Benefactor{
 | 
			
		||||
			PhoneNumber: req.PhoneNumber,
 | 
			
		||||
			Status:      entity.BenefactorActiveStatus,
 | 
			
		||||
			Role:        entity.UserBenefactorRole,
 | 
			
		||||
		})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +43,7 @@ func (s Service) LoginOrRegister(ctx context.Context, req benefactoreparam.Login
 | 
			
		|||
 | 
			
		||||
	athenticableBenefactor := entity.Authenticable{
 | 
			
		||||
		ID:   benefactor.ID,
 | 
			
		||||
		Role: benefactor.Role.String(),
 | 
			
		||||
		Role: entity.UserBenefactorRole.String(),
 | 
			
		||||
	}
 | 
			
		||||
	accessToken, aErr := s.auth.CreateAccessToken(athenticableBenefactor)
 | 
			
		||||
	if aErr != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +60,7 @@ func (s Service) LoginOrRegister(ctx context.Context, req benefactoreparam.Login
 | 
			
		|||
			ID:        benefactor.ID,
 | 
			
		||||
			FirstName: benefactor.FirstName,
 | 
			
		||||
			LastName:  benefactor.LastName,
 | 
			
		||||
			Role:      benefactor.Role.String(),
 | 
			
		||||
			Role:      entity.UserBenefactorRole.String(),
 | 
			
		||||
		},
 | 
			
		||||
		Tokens: benefactoreparam.Tokens{
 | 
			
		||||
			AccessToken:  accessToken,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,19 +2,23 @@ package benefactorkindboxreqservice
 | 
			
		|||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	entity "git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	"git.gocasts.ir/ebhomengo/niki/entity"
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/kind_box_req"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (s Service) Add(ctx context.Context, req param.KindBoxReqAddRequest) (param.KindBoxReqAddResponse, error) {
 | 
			
		||||
	const op = "userkindboxreqservice.Add"
 | 
			
		||||
	t, tErr := time.Parse(time.DateTime, req.DeliverReferDate)
 | 
			
		||||
	if tErr != nil {
 | 
			
		||||
		return param.KindBoxReqAddResponse{}, richerror.New(op).WithErr(tErr).WithKind(richerror.KindInvalid)
 | 
			
		||||
	}
 | 
			
		||||
	kindBoxReq, err := s.repo.AddKindBoxReq(ctx, entity.KindBoxReq{
 | 
			
		||||
		BenefactorID:     req.BenefactorID,
 | 
			
		||||
		KindBoxType:      req.TypeID,
 | 
			
		||||
		AddressID:      req.AddressID,
 | 
			
		||||
		ReferDate:      req.ReferDate,
 | 
			
		||||
		DeliverAddressID: req.DeliverAddressID,
 | 
			
		||||
		DeliverReferDate: t,
 | 
			
		||||
		CountRequested:   req.CountRequested,
 | 
			
		||||
		Status:           entity.KindBoxReqPendingStatus,
 | 
			
		||||
	})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
package adminkindboxreqvalidator
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
 | 
			
		||||
	param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req"
 | 
			
		||||
	errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
 | 
			
		||||
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
 | 
			
		||||
	validation "github.com/go-ozzo/ozzo-validation/v4"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (v Validator) ValidateDeliver(req param.DeliverKindBoxReqRequest) (map[string]string, error) {
 | 
			
		||||
	const op = "adminkindboxreqvalidator.ValidateAssignSender"
 | 
			
		||||
 | 
			
		||||
	if err := validation.ValidateStruct(&req,
 | 
			
		||||
		validation.Field(&req.KindBoxReqID, validation.Required, validation.By(v.doesKindBoxRequestExist), validation.By(v.checkKindBoxReqStatusForDelivering))); err != nil {
 | 
			
		||||
 | 
			
		||||
		fieldErrors := make(map[string]string)
 | 
			
		||||
 | 
			
		||||
		var errV validation.Errors
 | 
			
		||||
		if errors.As(err, &errV) {
 | 
			
		||||
			for key, value := range errV {
 | 
			
		||||
				if value != nil {
 | 
			
		||||
					fieldErrors[key] = value.Error()
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return fieldErrors, richerror.New(op).
 | 
			
		||||
			WithMessage(errmsg.ErrorMsgInvalidInput).
 | 
			
		||||
			WithKind(richerror.KindInvalid).
 | 
			
		||||
			WithMeta(map[string]interface{}{"req": req}).
 | 
			
		||||
			WithErr(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return map[string]string{}, nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -75,3 +75,19 @@ func (v Validator) CheckKindBoxReqStatusForRejecting(value interface{}) error {
 | 
			
		|||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v Validator) checkKindBoxReqStatusForDelivering(value interface{}) error {
 | 
			
		||||
	kindboxreqID, ok := value.(uint)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return fmt.Errorf(errmsg.ErrorMsgSomethingWentWrong)
 | 
			
		||||
	}
 | 
			
		||||
	kindBoxReq, err := v.repo.GetByID(context.Background(), kindboxreqID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if kindBoxReq.Status != entity.KindBoxReqAssignedSenderAgentStatus {
 | 
			
		||||
		return fmt.Errorf(errmsg.ErrorMsgDeliverKindBoxReqStatus)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,11 +24,11 @@ func (v Validator) ValidateAddRequest(req param.KindBoxReqAddRequest) *Validator
 | 
			
		|||
			validation.Required,
 | 
			
		||||
			validation.By(v.doesTypeExist)),
 | 
			
		||||
 | 
			
		||||
		validation.Field(&req.AddressID,
 | 
			
		||||
		validation.Field(&req.DeliverAddressID,
 | 
			
		||||
			validation.Required,
 | 
			
		||||
			validation.By(v.doesAddressExist(req.BenefactorID))),
 | 
			
		||||
 | 
			
		||||
		validation.Field(&req.ReferDate,
 | 
			
		||||
		validation.Field(&req.DeliverReferDate,
 | 
			
		||||
			validation.Required,
 | 
			
		||||
		),
 | 
			
		||||
	); err != nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue