Advertisement
widana

1

Jan 17th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.55 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Sts\WebToko\BO;
  4.  
  5. use Sts\PleafCore as PleafCore;
  6. use Sts\PleafCore\CoreException;
  7. use Sts\PleafCore\BusinessTransaction;
  8. use Sts\PleafCore\DefaultBusinessTransaction;
  9. use Sts\WebToko\Model\RecordOwner;
  10. use Sts\PleafCommon\Model\Tenant;
  11. use Sts\PleafCommon\Model\OU;
  12. use Sts\PleafCommon\Model\User;
  13. use Sts\PleafCommon\Model\Role;
  14. use Sts\PleafCommon\Model\SystemConfig;
  15. use Sts\WebToko\Model\Cashbank;
  16. use Sts\WebToko\Model\Warehouse;
  17. use Sts\PleafCommon\Model\UserRole;
  18. use App\Events\RegisterToko;
  19.  
  20. use DB;
  21. use App;
  22. use Validator;
  23. use Log;
  24. use Sts\WebToko\Helpers\Audit;
  25.  
  26. /**
  27. * @author Agung
  28. * @in ou_company,ou_branch,ou_sub_branch,warehouse_id,record_owner_code,email,toko_id_sas,
  29. * current_status_toko
  30. *
  31. * @out record_owner_id,ou_company,ou_branch,ou_sub_branch,warehouse_id,record_owner_code,email,toko_id_sas,current_status_toko
  32. */
  33.  
  34. class AddToko extends DefaultBusinessTransaction implements BusinessTransaction {
  35.  
  36. use Audit;
  37.  
  38. protected $attributes = [
  39. 'current_status_toko' => 'Status Toko Sekarang'
  40. ];
  41.  
  42. public function getDescription(){
  43. return "Tambah Toko";
  44. }
  45.  
  46. public function prepare ($dto, $originalDto){
  47. if(!isset($dto["record_owner_code"])){
  48. throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
  49. ["error_message" => "Kode Toko harus diisi"]);
  50. }
  51.  
  52. if(empty($dto["record_owner_code"])){
  53. throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
  54. ["error_message" => "Kode Toko harus diisi"]);
  55. }
  56. $this->valUniqKey($dto);
  57. }
  58.  
  59. private function valUniqKey($dto) {
  60. $isTokoExistsByIndex = App::make("isTokoExistsByIndex");
  61.  
  62. $input = [
  63. "record_owner_code" => $dto["record_owner_code"]
  64. ];
  65.  
  66. $recordOwnerDto = $isTokoExistsByIndex->execute($input);
  67.  
  68. if($recordOwnerDto["exists"]) {
  69. throw new CoreException(ERROR_BUSINESS_VALIDATION,[],
  70. ["error_message" => "Kode Toko ".$dto["record_owner_code"]." sudah ada"]);
  71. }
  72.  
  73. }
  74.  
  75. public function process ($dto, $originalDto){
  76. $userLoginId = $dto['user_login_id'];
  77. $username = $dto['username'];
  78. $datetime = $dto['datetime'];
  79.  
  80. $tenant_code = $dto['record_owner_code'];
  81. $tenant_name = $dto['ou_company'];
  82. $email = $dto['email'];
  83.  
  84. // insert tenant
  85. $tenant = new Tenant();
  86. $tenant->tenant_code = $tenant_code;
  87. $tenant->description = "";
  88. $tenant->tenant_key = md5($tenant_code);
  89. $tenant->tenant_name = $dto['ou_company'];
  90. $tenant->email = $email;
  91. $tenant->host = "";
  92. self::auditActive($tenant, $datetime);
  93. self::auditInsert($tenant, $userLoginId, $datetime);
  94. $tenant->save();
  95.  
  96.  
  97. // insert record owner
  98. $record_owner = new RecordOwner;
  99. $record_owner->record_owner_id = $tenant->tenant_id;
  100. $record_owner->ou_company = $dto['ou_company'];
  101. $record_owner->ou_branch = $dto['ou_branch'];
  102. $record_owner->ou_sub_branch = $dto['ou_sub_branch'];
  103. $record_owner->warehouse_id = 0;
  104. $record_owner->record_owner_code = $dto['record_owner_code'];
  105. $record_owner->email = $dto['email'];
  106. $record_owner->toko_id_sas = $dto['toko_id_sas'];
  107. $record_owner->current_status_toko = $dto['current_status_toko'];
  108.  
  109. $this->prepareAuditInsert($record_owner, $datetime, $username);
  110. $this->prepareAuditActive($record_owner, $datetime);
  111.  
  112. $record_owner->save();
  113.  
  114. $warehouse_id = DB::table('m_warehouse')->insertGetId([
  115. 'warehouse_code' => $dto['warehouse_code'],
  116. 'warehouse_name' => $dto['warehouse_name'],
  117. 'record_owner_id' => $tenant->tenant_id
  118. ], 'warehouse_id');
  119.  
  120.  
  121.  
  122. Log::debug("warehous id :".$warehouse_id);
  123.  
  124. // update warehouse
  125. DB::table('m_record_owner')
  126. ->where('record_owner_id', $tenant->tenant_id)
  127. ->update(['warehouse_id' => $warehouse_id]);
  128.  
  129.  
  130. // insert OU
  131. $ou = new OU;
  132. $ou->tenant_id = $tenant->tenant_id;
  133. $ou->ou_code = $dto['toko_id_sas']."_".$dto['ou_branch'];
  134. $ou->ou_name = $dto['toko_id_sas']."_".$dto['ou_branch'];
  135. $ou->ou_type_id = 1;
  136. $ou->ou_parent_id = -99;
  137. self::auditActive($ou, $datetime);
  138. self::auditInsert($ou, $userLoginId, $datetime);
  139. $ou->save();
  140.  
  141. $ou2 = new OU;
  142. $ou2->tenant_id = $tenant->tenant_id;
  143. $ou2->ou_code = $dto['toko_id_sas']."_".$dto['ou_branch'].
  144. "_".$dto['ou_sub_branch'];
  145. $ou2->ou_name = $dto['toko_id_sas']."_".$dto['ou_branch'].
  146. "_".$dto['ou_sub_branch'];
  147. $ou2->ou_type_id = 2;
  148. $ou2->ou_parent_id = $ou->ou_id;
  149. self::auditActive($ou2, $datetime);
  150. self::auditInsert($ou2, $userLoginId, $datetime);
  151. $ou2->save();
  152.  
  153. $role_manager = Role::where('role_name', '=', 'ShopManager')
  154. ->where('tenant_id', '=', -1)->first();
  155. $role_admin = Role::where('role_name', '=', 'ShopAdmin')
  156. ->where('tenant_id', '=', -1)->first();
  157. $role_casier = Role::where('role_name', '=', 'Cashier')
  158. ->where('tenant_id', '=', -1)->first();
  159. $userPassword = array();
  160.  
  161. //insert 1 User Manager
  162. $user = new User();
  163. $user->tenant_id = $tenant->tenant_id;
  164. $user->username = $dto['toko_id_sas']."mgr1";
  165. $user->email = $dto['email'];
  166. $user->fullname = $dto['ou_company']." Manager";
  167. $passwd = rand(100000, 999999);
  168. $user->password = bcrypt($passwd);
  169. $userPassword[] = [
  170. "username" => $user->username,
  171. "password" => $passwd,
  172. "rolename" => "ShopManager"
  173. ];
  174. $user->role_default_id = $role_manager->role_id;
  175. $user->ou_default_id = $ou->ou_id;
  176. self::auditActive($user,$datetime);
  177. self::auditInsert($user,$userLoginId,$datetime);
  178. $user->save();
  179.  
  180. $userRole = new UserRole();
  181. $userRole->user_id = $user->user_id;
  182. $userRole->role_id = $role_manager->role_id;
  183. self::auditActive($userRole,$datetime);
  184. self::auditInsert($userRole,$userLoginId,$datetime);
  185. $userRole->save();
  186.  
  187. //insert 2 User Admin
  188. $user = new User();
  189. $user->tenant_id = $tenant->tenant_id;
  190. $user->username = $dto['toko_id_sas']."admin1";
  191. $user->email = $dto['email'];
  192. $user->fullname = $dto['ou_company']." Admin";
  193.  
  194. $passwd = rand(100000, 999999);
  195.  
  196. $user->password = bcrypt($passwd);
  197. $userPassword[] = [
  198. "username" => $user->username,
  199. "password" => $passwd,
  200. "rolename" => "ShopAdmin"
  201. ];
  202.  
  203. $user->role_default_id = $role_admin->role_id;
  204. $user->ou_default_id = $ou->ou_id;
  205. self::auditActive($user,$datetime);
  206. self::auditInsert($user,$userLoginId,$datetime);
  207. $user->save();
  208.  
  209. $userRole = new UserRole();
  210. $userRole->user_id = $user->user_id;
  211. $userRole->role_id = $role_admin->role_id;
  212. self::auditActive($userRole,$datetime);
  213. self::auditInsert($userRole,$userLoginId,$datetime);
  214. $userRole->save();
  215.  
  216. $user = new User();
  217. $user->tenant_id = $tenant->tenant_id;
  218. $user->username = $dto['toko_id_sas']."admin2";
  219. $user->email = $dto['email'];
  220. $user->fullname = $dto['ou_company']." Admin";
  221.  
  222. $passwd = rand(100000, 999999);
  223.  
  224. $user->password = bcrypt($passwd);
  225. $userPassword[] = [
  226. "username" => $user->username,
  227. "password" => $passwd,
  228. "rolename" => "ShopAdmin"
  229. ];
  230.  
  231. $user->role_default_id = $role_admin->role_id;
  232. $user->ou_default_id = $ou->ou_id;
  233. self::auditActive($user,$datetime);
  234. self::auditInsert($user,$userLoginId,$datetime);
  235. $user->save();
  236.  
  237. $userRole = new UserRole();
  238. $userRole->user_id = $user->user_id;
  239. $userRole->role_id = $role_admin->role_id;
  240. self::auditActive($userRole,$datetime);
  241. self::auditInsert($userRole,$userLoginId,$datetime);
  242. $userRole->save();
  243.  
  244. //insert 3 User Cashier
  245. $user = new User();
  246. $user->tenant_id = $tenant->tenant_id;
  247. $user->username = $dto['toko_id_sas']."kasir1";
  248. $user->email = $dto['email'];
  249. $user->fullname = $dto['ou_company']." Cashier";
  250.  
  251. $passwd = rand(100000, 999999);
  252.  
  253. $user->password = bcrypt($passwd);
  254. $userPassword[] = [
  255. "username" => $user->username,
  256. "password" => $passwd,
  257. "rolename" => "Cashier"
  258. ];
  259.  
  260. $user->role_default_id = $role_casier->role_id;
  261. $user->ou_default_id = $ou->ou_id;
  262. self::auditActive($user,$datetime);
  263. self::auditInsert($user,$userLoginId,$datetime);
  264. $user->save();
  265.  
  266. $userRole = new UserRole();
  267. $userRole->user_id = $user->user_id;
  268. $userRole->role_id = $role_casier->role_id;
  269. self::auditActive($userRole,$datetime);
  270. self::auditInsert($userRole,$userLoginId,$datetime);
  271. $userRole->save();
  272.  
  273. $user = new User();
  274. $user->tenant_id = $tenant->tenant_id;
  275. $user->username = $dto['toko_id_sas']."kasir2";
  276. $user->email = $dto['email'];
  277. $user->fullname = $dto['ou_company']." Cashier";
  278.  
  279. $passwd = rand(100000, 999999);
  280.  
  281. $user->password = bcrypt($passwd);
  282. $userPassword[] = [
  283. "username" => $user->username,
  284. "password" => $passwd,
  285. "rolename" => "Cashier"
  286. ];
  287.  
  288. $user->role_default_id = $role_casier->role_id;
  289. $user->ou_default_id = $ou->ou_id;
  290. self::auditActive($user,$datetime);
  291. self::auditInsert($user,$userLoginId,$datetime);
  292. $user->save();
  293.  
  294. $userRole = new UserRole();
  295. $userRole->user_id = $user->user_id;
  296. $userRole->role_id = $role_casier->role_id;
  297. self::auditActive($userRole,$datetime);
  298. self::auditInsert($userRole,$userLoginId,$datetime);
  299. $userRole->save();
  300.  
  301. $user = new User();
  302. $user->tenant_id = $tenant->tenant_id;
  303. $user->username = $dto['toko_id_sas']."kasir3";
  304. $user->email = $dto['email'];
  305. $user->fullname = $dto['ou_company']." Cashier";
  306.  
  307. $passwd = rand(100000, 999999);
  308.  
  309. $user->password = bcrypt($passwd);
  310. $userPassword[] = [
  311. "username" => $user->username,
  312. "password" => $passwd,
  313. "rolename" => "Cashier"
  314. ];
  315.  
  316. $user->role_default_id = $role_casier->role_id;
  317. $user->ou_default_id = $ou->ou_id;
  318. self::auditActive($user,$datetime);
  319. self::auditInsert($user,$userLoginId,$datetime);
  320. $user->save();
  321.  
  322. $userRole = new UserRole();
  323. $userRole->user_id = $user->user_id;
  324. $userRole->role_id = $role_casier->role_id;
  325. self::auditActive($userRole,$datetime);
  326. self::auditInsert($userRole,$userLoginId,$datetime);
  327. $userRole->save();
  328.  
  329. $cashbank = new Cashbank;
  330. $cashbank->record_owner_id = $tenant->tenant_id;
  331. $cashbank->cashbank_code = "KAS";
  332. $cashbank->cashbank_name = "KAS";
  333. $cashbank->curr_code = "IDR";
  334. $cashbank->flg_cash_bank = "C";
  335.  
  336. $this->prepareAuditInsert($cashbank, $datetime, $username);
  337. // $this->prepareAuditActive($cashbank, $datetime);
  338. $cashbank->save();
  339.  
  340. // insert config2 toko
  341. $paramValue = [
  342. "QTY.CAN.MINUS" => "Y",
  343. "MAX.ACCOUNT.SHOP.MANAGER" => 1,
  344. "MAX.ACCOUNT.SHOP.ADMIN" => 2,
  345. "MAX.ACCOUNT.CASHIER" => 3,
  346. "EMAIL.NOTIFICATION" => "",
  347. "PRINT.TYPE" => "B",
  348. "PRINT.COPYCOUNT" => 2,
  349. "MAX.DIFFERENCE.PRICE" => 999,
  350. ];
  351.  
  352. foreach($paramValue as $code => $value) {
  353. $systemConfig = new SystemConfig();
  354.  
  355. $getParamByIndex = App::make('getParamByIndex');
  356. $systemConfig->parameter_id = $getParamByIndex->execute(
  357. ['param_code' => $code]
  358. )["id"];
  359.  
  360. $systemConfig->parameter_value = $value;
  361. $systemConfig->tenant_id = $tenant->tenant_id;
  362.  
  363. self::auditActive($systemConfig, $datetime);
  364. self::auditInsert($systemConfig, $userLoginId,$datetime);
  365. $systemConfig->save();
  366. }
  367.  
  368. $sendDataToko = [
  369.  
  370. 'record_owner_id' => $record_owner->record_owner_id,
  371. 'company_name' => $record_owner->ou_company,
  372. 'ou_branch' => $record_owner->ou_branch,
  373. 'ou_sub_branch' => $record_owner->ou_sub_branch,
  374. 'warehouse' => $dto['warehouse_name'],
  375. 'record_owner_code' => $record_owner->record_owner_code,
  376. 'email' => $record_owner->email,
  377. 'toko_sas_id' => $record_owner->toko_id_sas,
  378. 'current_status_toko' => $record_owner->current_status_toko,
  379. 'create_username' => $record_owner->create_username,
  380. 'create_datetime' => $record_owner->create_datetime,
  381. 'update_username' => $record_owner->update_username,
  382. 'update_datetime' => $record_owner->update_datetime,
  383. 'version' => $record_owner->version
  384.  
  385. ];
  386.  
  387. // insert admin ledger
  388. $startYearMonth = $dto["start_date_trx"];
  389.  
  390. $sql = "WITH lg_code AS (
  391. SELECT 'SALES' AS ledger_code
  392. UNION SELECT 'INV' AS ledger_code
  393. UNION SELECT 'FIN.AP' AS ledger_code
  394. UNION SELECT 'FIN.AR' AS ledger_code
  395. UNION SELECT 'PURCH' AS ledger_code
  396. UNION SELECT 'POS' AS ledger_code
  397. UNION SELECT 'GL' AS ledger_code
  398. )
  399. 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)
  400. SELECT ".$record_owner->record_owner_id.", to_char(to_date('".$startYearMonth."', 'YYYYMM') - interval '1' month , 'YYYYMM') AS year_month,
  401. ledger_code, '1', 'Y', ' ', to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."', 0, to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."',
  402. to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."'
  403. FROM lg_code";
  404.  
  405. DB::statement($sql);
  406.  
  407. $sql = "WITH lg_code AS (
  408. SELECT 'SALES' AS ledger_code
  409. UNION SELECT 'INV' AS ledger_code
  410. UNION SELECT 'FIN.AP' AS ledger_code
  411. UNION SELECT 'FIN.AR' AS ledger_code
  412. UNION SELECT 'PURCH' AS ledger_code
  413. UNION SELECT 'POS' AS ledger_code
  414. UNION SELECT 'GL' AS ledger_code
  415. )
  416. 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)
  417. SELECT ".$record_owner->record_owner_id.", to_char(to_date('".$startYearMonth."', 'YYYYMM') + (interval '1' month * generate_series(0,598)), 'YYYYMM') AS year_month,
  418. ledger_code, '0', 'N', ' ', to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."', 0, to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."',
  419. to_char(NOW(), 'YYYYMMDDHH12MISS'), '".$username."'
  420. FROM lg_code";
  421.  
  422. DB::statement($sql);
  423.  
  424. event(new RegisterToko($sendDataToko));
  425.  
  426. return [
  427. "userPassword" => $userPassword,
  428. "record_owner" => $sendDataToko
  429. ];
  430. }
  431.  
  432. protected function rules() {
  433. return [
  434. // "ou_company" => 'required',
  435. // "ou_branch" => 'required',
  436. // "ou_sub_branch" => 'required',
  437. // "warehouse_id" => 'required',
  438. // "record_owner_code" => 'required',
  439. // "email" => 'email',
  440. // "toko_id_sas" => 'required',
  441. // "current_status_toko" => 'required'
  442. ];
  443. }
  444.  
  445.  
  446. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement