pull/25/head
Alireza Hassani 4 years ago
commit ae6ba1c7d0

@ -1,327 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB as Database;
use Illuminate\Support\Carbon;
class ConvertUser extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'db:convert';
/**
* The console command description.
*
* @var string
*/
protected $description = 'This command when work you need transfer a table rows to another table row';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Return data from Temp-business
*
* @return rows
*
*/
private function getBusinessRows()
{
$data = Database::table('temp_businesses')->get();
return $data;
}
/**
* Insert a row in table users
*/
private function insertRowToUsers($data)
{
Database::table('users')->insertOrIgnore($data);
$lastUser = Database::table('users')
->orderBy('id', 'DESC')
->first();
return $lastUser->id;
}
/**
* Insert to wmuser_common phone
*/
private function insertPhone($phones,$userId)
{
foreach($phones as $phone)
{
$number_type ;
$regex = '/^09[0,1,2,3,9]{1}[0-9]{8}$/';
if (preg_match($regex,$phone->tel) == 1)
{
$number_type = 'cellphone';
}else{
$number_type = 'telephone';
}
Database::table('wmuser_common.phones')->insertOrIgnore([
'phonable_id' => $userId,
'number' => $phone->tel,
'label' => $phone->label,
'number_type' => $number_type,
'phonable_type' => 'user',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
]);
}
}
/**
* Insert address
*/
private function InsertAddress($addressData,$tmp_id, $userId)
{
$userAddress = Database::select(
'select * from `addresses` where addressable_id=? and addressable_type =?',
[
$tmp_id,
'App\TempBusiness'
]
);
foreach ($userAddress as $address)
{
Database::table('wmuser_common.addresses')->insertOrIgnore([
'title' => $address->title,
'city_id' => $addressData['city_id'],
'district_id' => $addressData['district_id'],
'postal_code' => $address->postal_code,
'addressable_id' => $userId,
'addressable_type' => 'user',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now()
]);
}
}
/**
* insert Status to client status
*
*/
private function insertToClientStatuses($clientStatus)
{
$check_client_status = Database::table('wmuser_crm.client_statuses')
->where('name' , $clientStatus)
->first();
$client_status_id;
if ($check_client_status === null) {
Database::table('wmuser_crm.client_statuses')->insertOrIgnore([
'name' => $clientStatus,
'user_id' => 52,
'business_id' => 3,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now()
]);
$client_status_id = Database::table('wmuser_crm.client_statuses')
->orderBy('id', 'DESC')
->first();
} else {
$client_status_id = $check_client_status;
}
return $client_status_id->id;
}
/**
* update user status
**/
private function updateToUserStatus($userId,$userStatusId)
{
Database::table('users')
->where('id', $userId)
->update(['user_status_id' => $userStatusId]);
}
/**
* Insert categories with Id
*/
private function categoriesConfig($categoryId, $client_id)
{
$category = Database::table('categories')
->where('id' , $categoryId)
->first();
$check_category_exist = Database::table('wmuser_crm.client_categories')
->where('name_en' , $category->name_en)
->first();
$client_category_id ;
if ($check_category_exist === null)
{
Database::table('wmuser_crm.client_categories')->insertOrIgnore([
'name_en' => $category->name_en,
'name' => $category->name_fa,
'parent_id' => null,
'business_id' => 3,
'user_id' => $client_id,
'level' => 1,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now()
]);
$client_category_id = Database::table('wmuser_crm.client_categories')
->orderBy('id', 'DESC')
->first();
$client_category_id = $client_category_id->id;
} else {
$client_category_id = $check_category_exist->id;
}
Database::table('wmuser_crm.client_client_category')->insertOrIgnore([
'client_category_id' => $client_category_id,
'client_id' => $client_id
]);
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$count = 0;
foreach($this->getBusinessRows() as $userData)
{
$phones = json_decode($userData->phones);
$cellPhone = null;
foreach ($phones as $phone)
{
$phone->tel = str_replace(' ','',$phone->tel);
}
for( $i=0; $i <= count($phones)-1 ; $i++ )
{
$regex = '/^09[0,1,2,3,9]{1}[0-9]{8}$/';
$match = preg_match($regex,$phones[$i]->tel);
if ($match == 1)
{
$cellPhone = $phones[$i]->tel;
break;
}
}
$userTableDedails = [
'address' => [
'latitude' => $userData->latitude,
'longitude' => $userData->longitude
],
'details' => json_decode($userData->details),
];
$userTableData = [
'name' => $userData->brand_fa,
'name_en' => $userData->brand_en,
'business_id' => 3,
'cell_number' => $cellPhone,
'detail' => json_encode($userTableDedails),
'instagram' => json_decode($userData->details)->InstagramID,
'telegram' => json_decode($userData->details)->TelegramID,
'email' => json_decode($userData->details)->Email,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
'user_status_id' => null,
];
$userAddress = [
'district_id' => $userData->district_id,
'city_id' => $userData->city_id
];
$newUserId = $this->insertRowToUsers($userTableData);
$this->categoriesConfig($userData->category_id, $newUserId);
$this->InsertAddress($userAddress, $userData->id,$newUserId);
$this->insertPhone($phones , $newUserId);
$lastStatusId = $this->insertToClientStatuses($userData->status);
$this->updateToUserStatus($newUserId,$lastStatusId);
$count ++;
$this->info('success transfer user : '. $newUserId . ' count of add : '.$count);
}
}
}

@ -23,11 +23,9 @@
"wm/crm": "dev-master", "wm/crm": "dev-master",
"wm/portfolio": "dev-master", "wm/portfolio": "dev-master",
"wm/product": "dev-master", "wm/product": "dev-master",
"wm/reservation": "dev-master",
"wm/service": "dev-master", "wm/service": "dev-master",
"wm/store": "dev-master", "wm/store": "dev-master",
"wm/warehouse": "dev-master", "wm/warehouse": "dev-master",
"wm/webbuilder": "dev-master",
"zircote/swagger-php": "^3.0" "zircote/swagger-php": "^3.0"
}, },
"require-dev": { "require-dev": {
@ -93,10 +91,6 @@
"type": "path", "type": "path",
"url": "./modules/wm-blog" "url": "./modules/wm-blog"
}, },
{
"type": "path",
"url": "./modules/wm-reservation"
},
{ {
"type": "path", "type": "path",
"url": "./modules/wm-portfolio" "url": "./modules/wm-portfolio"
@ -113,17 +107,9 @@
"type": "path", "type": "path",
"url": "./modules/wm-store" "url": "./modules/wm-store"
}, },
{
"type": "path",
"url": "./modules/wm-finance"
},
{ {
"type": "path", "type": "path",
"url": "./modules/wm-warehouse" "url": "./modules/wm-warehouse"
},
{
"type": "path",
"url": "./modules/wm-webbuilder"
} }
] ]
} }

8712
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,101 @@
<template>
<div class="upload-example width-full">
<cropper classname="upload-example-cropper" :stencil-props="stencilProps" @change="onChangeCropper" :src="image" />
<div class="button-wrapper">
<v-btn
@click.native="$refs['image_'+uniqueId].click()"
large
:color="color"
dark
>
<input
type="file"
:ref="'image_'+uniqueId"
:name="'image_' + uniqueId"
v-show="false"
@change="uploadImage($event)"
accept="image/*"
/>
<v-icon dark>{{icon}}</v-icon>{{name}}
</v-btn>
</div>
</div>
</template>
<script>
import { Cropper } from "vue-advanced-cropper";
export default {
props: {
name: {
default: 'آپلود عکس'
},
icon: {
default: 'WMi-upload'
},
color: {
default: 'black'
},
stencilProps: {
default: () => ({aspectRatio: 1, checkImageOrigin: false})
},
crop_data: {
default: () => ([])
},
value: {
default: ''
},
url: {
default: ''
}
},
components: {
Cropper
},
data: () => ({
uniqueId: Math.floor(Math.random() * 10000),
}),
computed: {
image: {
get() {
return this.url;
},
set(value) {
this.$emit('update:url', value);
}
},
file: {
get() {
return this.value;
},
set(value) {
this.$emit('input', value);
}
}
},
methods: {
uploadImage(event) {
// Reference to the DOM input element
let input = event.target;
// Ensure that you have a file before attempting to read it
if (input.files && input.files[0])
{
//set v-model
this.file = input.files[0];
// create a new FileReader to read this image and convert to base64 format
let reader = new FileReader();
// Define a callback function to run, when FileReader finishes its job
reader.onload = e => {
// Note: arrow function used here, so that "this.imageData" refers to the imageData of Vue component
// Read image as base64 and set to imageData
this.image = e.target.result;
};
// Start the reader job - read file as a data url (base64 format)
reader.readAsDataURL(input.files[0]);
}
},
onChangeCropper({coordinates}) {
this.$emit('update:crop_data', coordinates);
},
}
}
</script>

@ -1,8 +1,8 @@
<template> <template>
<v-row> <v-row>
<v-col v-for="(item, i) in items" :key="i" class="image-select" @click="changeSelected(item)" :class="`${size} pa-1`"> <v-col v-for="(item, i) in items" :key="i" class="image-select" @click="changeSelected(item)" :class="`${size} pa-1`">
<div :class="{'active': isActive(item), 'item': true, 'selected': (i == 2)}"> <div :class="{'active': isActive(item), 'item': true, 'selected': isSelectedItem(item)}">
<img class="thumbnail width-full" :src="item[itemSrc]"/> <img class="thumbnail width-full" :src="$_getPath(item[itemSrc])"/>
<div class="name"> <div class="name">
<div class="content"> <div class="content">
<div class="Fa"> {{ item[itemText] }}</div> <div class="Fa"> {{ item[itemText] }}</div>
@ -26,7 +26,8 @@
itemText: {default: 'name'}, itemText: {default: 'name'},
itemTextEn: {default: 'name_en'}, itemTextEn: {default: 'name_en'},
itemSrc: {default: 'src'}, itemSrc: {default: 'src'},
value: {default: ''} value: {default: ''},
selected: {default: () => ([])}
}, },
data: () => ({ data: () => ({
thumbnail: "images/Business/Items/iPhoneX.jpg", thumbnail: "images/Business/Items/iPhoneX.jpg",
@ -42,6 +43,9 @@
} }
}, },
methods: { methods: {
isSelectedItem(item) {
return this.selected.includes(item[this.itemValue]);
},
isActive(item) { isActive(item) {
return item[this.itemValue] === this.value; return item[this.itemValue] === this.value;
}, },

@ -4,7 +4,7 @@
<div class="button-wrapper"> <div class="button-wrapper">
<v-btn <v-btn
large large
:color="$_color('product_option')" :color="color"
@click.native="$refs['image_'+uniqueId].click()" @click.native="$refs['image_'+uniqueId].click()"
light light
> >
@ -29,6 +29,7 @@
props: { props: {
batch_id: {default: null, type: String}, batch_id: {default: null, type: String},
media: {default: '', type: String}, media: {default: '', type: String},
color: {default: 'gold', type: String},
}, },
data: () => ({ data: () => ({
uniqueId: Math.floor(Math.random() * 10000), uniqueId: Math.floor(Math.random() * 10000),

@ -0,0 +1,89 @@
const isUndefined = (value) => value === undefined;
const isNull = (value) => value === null;
const isBoolean = (value) => typeof value === 'boolean';
const isObject = (value) => value === Object(value);
const isArray = (value) => Array.isArray(value);
const isDate = (value) => value instanceof Date;
const isBlob = (value) =>
value &&
typeof value.size === 'number' &&
typeof value.type === 'string' &&
typeof value.slice === 'function';
const isFile = (value) =>
isBlob(value) &&
typeof value.name === 'string' &&
(typeof value.lastModifiedDate === 'object' ||
typeof value.lastModified === 'number');
const objectToFormData = (obj, cfg, fd, pre) => {
cfg = cfg || {};
cfg.indices = isUndefined(cfg.indices) ? true : cfg.indices;
cfg.nullsAsUndefineds = isUndefined(cfg.nullsAsUndefineds)
? false
: cfg.nullsAsUndefineds;
cfg.booleansAsIntegers = isUndefined(cfg.booleansAsIntegers)
? false
: cfg.booleansAsIntegers;
cfg.allowEmptyArrays = isUndefined(cfg.allowEmptyArrays)
? true
: cfg.allowEmptyArrays;
fd = fd || new FormData();
if (isUndefined(obj)) {
return fd;
} else if (isNull(obj)) {
if (!cfg.nullsAsUndefineds) {
fd.append(pre, '');
}
} else if (isBoolean(obj)) {
if (cfg.booleansAsIntegers) {
fd.append(pre, obj ? 1 : 0);
} else {
fd.append(pre, obj);
}
} else if (isArray(obj)) {
if (obj.length) {
obj.forEach((value, index) => {
const key = pre + '[' + (cfg.indices ? index : '') + ']';
objectToFormData(value, cfg, fd, key);
});
} else if (cfg.allowEmptyArrays) {
fd.append(pre , []);
}
} else if (isDate(obj)) {
fd.append(pre, obj.toISOString());
} else if (isObject(obj) && !isFile(obj) && !isBlob(obj)) {
Object.keys(obj).forEach((prop) => {
const value = obj[prop];
if (isArray(value)) {
while (prop.length > 2 && prop.lastIndexOf('[]') === prop.length - 2) {
prop = prop.substring(0, prop.length - 2);
}
}
const key = pre ? pre + '[' + prop + ']' : prop;
objectToFormData(value, cfg, fd, key);
});
} else {
fd.append(pre, obj);
}
return fd;
};
export { objectToFormData };

4
webpack.mix.js vendored

@ -35,8 +35,8 @@ require('./modules/wm-portfolio/webpack.mix');
// require('./modules/wm-finance/webpack.mix'); // require('./modules/wm-finance/webpack.mix');
require('./modules/wm-product/webpack.mix'); require('./modules/wm-product/webpack.mix');
require('./modules/wm-service/webpack.mix'); require('./modules/wm-service/webpack.mix');
// require('./modules/wm-store/webpack.mix'); require('./modules/wm-store/webpack.mix');
// require('./modules/wm-warehouse/webpack.mix'); require('./modules/wm-warehouse/webpack.mix');
// require('./modules/wm-reservation/webpack.mix'); // require('./modules/wm-reservation/webpack.mix');
mix.version(); mix.version();

Loading…
Cancel
Save