Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Sts\WebToko\BO;
- use Sts\PleafCore as PleafCore;
- use Sts\PleafCore\CoreException;
- use Sts\PleafCore\BusinessTransaction;
- use Sts\PleafCore\DefaultBusinessTransaction;
- use Sts\WebToko\Model\RecordOwner;
- use Sts\PleafCommon\Model\Tenant;
- use Sts\PleafCommon\Model\OU;
- use Sts\PleafCommon\Model\User;
- use Sts\PleafCommon\Model\Role;
- use Sts\PleafCommon\Model\SystemConfig;
- use Sts\WebToko\Model\Cashbank;
- use Sts\WebToko\Model\Warehouse;
- use Sts\PleafCommon\Model\UserRole;
- use App\Events\RegisterToko;
- use DB;
- use App;
- use Validator;
- use Log;
- use Sts\WebToko\Helpers\Audit;
- /**
- * @author Agung
- * @in ou_company,ou_branch,ou_sub_branch,warehouse_id,record_owner_code,email,toko_id_sas,
- * current_status_toko
- *
- * @out record_owner_id,ou_company,ou_branch,ou_sub_branch,warehouse_id,record_owner_code,email,toko_id_sas,current_status_toko
- */
- class AddToko extends DefaultBusinessTransaction implements BusinessTransaction {
- use Audit;
- protected $attributes = [
- 'current_status_toko' => 'Status Toko Sekarang'
- ];
- public function getDescription(){
- return "Tambah Toko";
- }
- public function prepare ($dto, $originalDto){
- if(!isset($dto["record_owner_code"])){
- throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
- ["error_message" => "Kode Toko harus diisi"]);
- }
- if(empty($dto["record_owner_code"])){
- throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
- ["error_message" => "Kode Toko harus diisi"]);
- }
- $this->valUniqKey($dto);
- }
- private function valUniqKey($dto) {
- $isTokoExistsByIndex = App::make("isTokoExistsByIndex");
- $input = [
- "record_owner_code" => $dto["record_owner_code"]
- ];
- $recordOwnerDto = $isTokoExistsByIndex->execute($input);
- if($recordOwnerDto["exists"]) {
- throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
- ["error_message" => "Kode Toko ".$dto["record_owner_code"]." sudah ada"]);
- }
- }
- public function process ($dto, $originalDto){
- $userLoginId = $dto['user_login_id'];
- $username = $dto['username'];
- $datetime = $dto['datetime'];
- $tenant_code = $dto['record_owner_code'];
- $tenant_name = $dto['ou_company'];
- $email = $dto['email'];
- // insert tenant
- $tenant = new Tenant();
- $tenant->tenant_code = $tenant_code;
- $tenant->description = "";
- $tenant->tenant_key = md5($tenant_code);
- $tenant->tenant_name = $dto['ou_company'];
- $tenant->email = $email;
- $tenant->host = "";
- self::auditActive($tenant, $datetime);
- self::auditInsert($tenant, $userLoginId, $datetime);
- $tenant->save();
- // insert record owner
- $record_owner = new RecordOwner;
- $record_owner->record_owner_id = $tenant->tenant_id;
- $record_owner->ou_company = $dto['ou_company'];
- $record_owner->ou_branch = $dto['ou_branch'];
- $record_owner->ou_sub_branch = $dto['ou_sub_branch'];
- $record_owner->warehouse_id = 0;
- $record_owner->record_owner_code = $dto['record_owner_code'];
- $record_owner->email = $dto['email'];
- $record_owner->toko_id_sas = $dto['toko_id_sas'];
- $record_owner->current_status_toko = $dto['current_status_toko'];
- $this->prepareAuditInsert($record_owner, $datetime, $username);
- $this->prepareAuditActive($record_owner, $datetime);
- $record_owner->save();
- $warehouse_id = DB::table('m_warehouse')->insertGetId([
- 'warehouse_code' => $dto['warehouse_code'],
- 'warehouse_name' => $dto['warehouse_name'],
- 'record_owner_id' => $tenant->tenant_id
- ], 'warehouse_id');
- Log::debug("warehous id :".$warehouse_id);
- // update warehouse
- DB::table('m_record_owner')
- ->where('record_owner_id', $tenant->tenant_id)
- ->update(['warehouse_id' => $warehouse_id]);
- // insert OU
- $ou = new OU;
- $ou->tenant_id = $tenant->tenant_id;
- $ou->ou_code = $dto['toko_id_sas']."_".$dto['ou_branch'];
- $ou->ou_name = $dto['toko_id_sas']."_".$dto['ou_branch'];
- $ou->ou_type_id = 1;
- $ou->ou_parent_id = -99;
- self::auditActive($ou, $datetime);
- self::auditInsert($ou, $userLoginId, $datetime);
- $ou->save();
- $ou2 = new OU;
- $ou2->tenant_id = $tenant->tenant_id;
- $ou2->ou_code = $dto['toko_id_sas']."_".$dto['ou_branch'].
- "_".$dto['ou_sub_branch'];
- $ou2->ou_name = $dto['toko_id_sas']."_".$dto['ou_branch'].
- "_".$dto['ou_sub_branch'];
- $ou2->ou_type_id = 2;
- $ou2->ou_parent_id = $ou->ou_id;
- self::auditActive($ou2, $datetime);
- self::auditInsert($ou2, $userLoginId, $datetime);
- $ou2->save();
- $role_manager = Role::where('role_name', '=', 'ShopManager')
- ->where('tenant_id', '=', -1)->first();
- $role_admin = Role::where('role_name', '=', 'ShopAdmin')
- ->where('tenant_id', '=', -1)->first();
- $role_casier = Role::where('role_name', '=', 'Cashier')
- ->where('tenant_id', '=', -1)->first();
- $userPassword = array();
- //insert 1 User Manager
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."mgr1";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Manager";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "ShopManager"
- ];
- $user->role_default_id = $role_manager->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_manager->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- //insert 2 User Admin
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."admin1";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Admin";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "ShopAdmin"
- ];
- $user->role_default_id = $role_admin->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_admin->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."admin2";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Admin";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "ShopAdmin"
- ];
- $user->role_default_id = $role_admin->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_admin->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- //insert 3 User Cashier
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."kasir1";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Cashier";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "Cashier"
- ];
- $user->role_default_id = $role_casier->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_casier->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."kasir2";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Cashier";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "Cashier"
- ];
- $user->role_default_id = $role_casier->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_casier->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- $user = new User();
- $user->tenant_id = $tenant->tenant_id;
- $user->username = $dto['toko_id_sas']."kasir3";
- $user->email = $dto['email'];
- $user->fullname = $dto['ou_company']." Cashier";
- $passwd = rand(100000, 999999);
- $user->password = bcrypt($passwd);
- $userPassword[] = [
- "username" => $user->username,
- "password" => $passwd,
- "rolename" => "Cashier"
- ];
- $user->role_default_id = $role_casier->role_id;
- $user->ou_default_id = $ou->ou_id;
- self::auditActive($user,$datetime);
- self::auditInsert($user,$userLoginId,$datetime);
- $user->save();
- $userRole = new UserRole();
- $userRole->user_id = $user->user_id;
- $userRole->role_id = $role_casier->role_id;
- self::auditActive($userRole,$datetime);
- self::auditInsert($userRole,$userLoginId,$datetime);
- $userRole->save();
- $cashbank = new Cashbank;
- $cashbank->record_owner_id = $tenant->tenant_id;
- $cashbank->cashbank_code = "KAS";
- $cashbank->cashbank_name = "KAS";
- $cashbank->curr_code = "IDR";
- $cashbank->flg_cash_bank = "C";
- $this->prepareAuditInsert($cashbank, $datetime, $username);
- // $this->prepareAuditActive($cashbank, $datetime);
- $cashbank->save();
- // insert config2 toko
- $paramValue = [
- "QTY.CAN.MINUS" => "Y",
- "MAX.ACCOUNT.SHOP.MANAGER" => 1,
- "MAX.ACCOUNT.SHOP.ADMIN" => 2,
- "MAX.ACCOUNT.CASHIER" => 3,
- "EMAIL.NOTIFICATION" => "",
- "PRINT.TYPE" => "B",
- "PRINT.COPYCOUNT" => 2,
- "MAX.DIFFERENCE.PRICE" => 999,
- ];
- foreach($paramValue as $code => $value) {
- $systemConfig = new SystemConfig();
- $getParamByIndex = App::make('getParamByIndex');
- $systemConfig->parameter_id = $getParamByIndex->execute(
- ['param_code' => $code]
- )["id"];
- $systemConfig->parameter_value = $value;
- $systemConfig->tenant_id = $tenant->tenant_id;
- self::auditActive($systemConfig, $datetime);
- self::auditInsert($systemConfig, $userLoginId,$datetime);
- $systemConfig->save();
- }
- $sendDataToko = [
- 'record_owner_id' => $record_owner->record_owner_id,
- 'company_name' => $record_owner->ou_company,
- 'ou_branch' => $record_owner->ou_branch,
- 'ou_sub_branch' => $record_owner->ou_sub_branch,
- 'warehouse' => $dto['warehouse_name'],
- 'record_owner_code' => $record_owner->record_owner_code,
- 'email' => $record_owner->email,
- 'toko_sas_id' => $record_owner->toko_id_sas,
- 'current_status_toko' => $record_owner->current_status_toko,
- 'create_username' => $record_owner->create_username,
- 'create_datetime' => $record_owner->create_datetime,
- 'update_username' => $record_owner->update_username,
- 'update_datetime' => $record_owner->update_datetime,
- 'version' => $record_owner->version
- ];
- // insert admin ledger
- $startYearMonth = $dto["start_date_trx"];
- $sql = "WITH lg_code AS (
- SELECT 'SALES' AS ledger_code
- UNION SELECT 'INV' AS ledger_code
- UNION SELECT 'FIN.AP' AS ledger_code
- UNION SELECT 'FIN.AR' AS ledger_code
- UNION SELECT 'PURCH' AS ledger_code
- UNION SELECT 'POS' AS ledger_code
- UNION SELECT 'GL' AS ledger_code
- )
- INSERT INTO m_admin_process_ledger(record_owner_id,year_month,ledger_code,status_ledger,flag_process,process_no,process_datetime,process_username,version,create_datetime,create_username,update_datetime,update_username)
- SELECT ".$record_owner->record_owner_id.", to_char(to_date('".$startYearMonth."', 'YYYYMM') - interval '1' month , 'YYYYMM') AS year_month,
- ledger_code, '1', 'Y', ' ', to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."', 0, to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."',
- to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."'
- FROM lg_code";
- DB::statement($sql);
- $sql = "WITH lg_code AS (
- SELECT 'SALES' AS ledger_code
- UNION SELECT 'INV' AS ledger_code
- UNION SELECT 'FIN.AP' AS ledger_code
- UNION SELECT 'FIN.AR' AS ledger_code
- UNION SELECT 'PURCH' AS ledger_code
- UNION SELECT 'POS' AS ledger_code
- UNION SELECT 'GL' AS ledger_code
- )
- INSERT INTO m_admin_process_ledger(record_owner_id,year_month,ledger_code,status_ledger,flag_process,process_no,process_datetime,process_username,version,create_datetime,create_username,update_datetime,update_username)
- SELECT ".$record_owner->record_owner_id.", to_char(to_date('".$startYearMonth."', 'YYYYMM') + (interval '1' month * generate_series(0,598)), 'YYYYMM') AS year_month,
- ledger_code, '0', 'N', ' ', to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."', 0, to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."',
- to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."'
- FROM lg_code";
- DB::statement($sql);
- event(new RegisterToko($sendDataToko));
- return [
- "userPassword" => $userPassword,
- "record_owner" => $sendDataToko
- ];
- }
- protected function rules() {
- return [
- // "ou_company" => 'required',
- // "ou_branch" => 'required',
- // "ou_sub_branch" => 'required',
- // "warehouse_id" => 'required',
- // "record_owner_code" => 'required',
- // "email" => 'email',
- // "toko_id_sas" => 'required',
- // "current_status_toko" => 'required'
- ];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement