Exemple #1
0
 function execute($params)
 {
     $this->executeImpl("Stock", "Menu", "menu_id");
     $post = Vizualizer::request();
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Menu");
     $model->findByPrimaryKey($post["menu_id"]);
     if ($model->menu_id > 0 && $model->fixed_flg == "1") {
         $orderDetail = $loader->loadModel("OrderDetail");
         $orderDetails = $orderDetail->findAllBy(array("set_id" => $model->set_id, "choice_id" => $model->choice_id, "ne:provision_flg" => "1"));
         foreach ($orderDetails as $orderDetail) {
             $orderDetail->provision();
         }
     }
 }
 protected function executeImpl($params, $type, $name, $key)
 {
     if (!$params->check("upload") || isset($_POST[$params->get("upload")])) {
         $loader = new Vizualizer_Plugin($type);
         // アップされたファイルのデータを取得する。
         if ($_FILES[$key]["error"] == UPLOAD_ERR_OK) {
             // Excelファイルを読み込む
             $book = PHPExcel_IOFactory::load($_FILES[$key]["tmp_name"]);
             // 処理を実行する
             $data = $this->process($params, $book);
             // トランザクションの開始
             $connection = Vizualizer_Database_Factory::begin(strtolower($type));
             try {
                 foreach ($data as $item) {
                     $model = $loader->loadModel($name);
                     foreach ($item as $col => $value) {
                         $model->{$col} = $value;
                     }
                     $model->save();
                 }
                 // エラーが無かった場合、処理をコミットする。
                 Vizualizer_Database_Factory::commit($connection);
                 // 画面をリロードする。
                 if (!$this->continue) {
                     // 登録に使用したキーを無効化
                     $this->removeInput("upload");
                     $this->reload();
                 }
             } catch (Exception $e) {
                 Vizualizer_Database_Factory::rollback($connection);
                 throw new Vizualizer_Exception_Database($e);
             }
         }
     }
 }
 public function material()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Material");
     $model->findByPrimaryKey($this->material_id);
     return $model;
 }
Exemple #4
0
 protected function executeImpl($type, $name, $key)
 {
     $post = Vizualizer::request();
     if ($post["delete"]) {
         // サイトデータを取得する。
         $loader = new Vizualizer_Plugin($type);
         $model = $loader->loadModel($name);
         $model->findByPrimaryKey($post[$key]);
         // データが検索された場合のみ削除処理を実施
         if ($model->{$key} > 0) {
             // トランザクションデータベースの取得
             $connection = Vizualizer_Database_Factory::begin(strtolower($type));
             try {
                 $model->delete();
                 // エラーが無かった場合、処理をコミットする。
                 Vizualizer_Database_Factory::commit($connection);
                 // 画面をリロードする。
                 if (!$this->continue) {
                     // 登録に使ったキーを無効化
                     $this->removeInput("delete");
                     $this->removeInput($key);
                     $this->reload();
                 }
             } catch (Exception $e) {
                 Vizualizer_Database_Factory::rollback($connection);
                 throw new Vizualizer_Exception_Database($e);
             }
         }
     }
 }
 public function purchase()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Purchase");
     $model->findByPrimaryKey($this->purchase_id);
     return $model;
 }
Exemple #6
0
 function execute($params)
 {
     // パラメータを調整
     $post = Vizualizer::request();
     $month = $post["ym"];
     if (empty($month) || preg_match("/[0-9]{4}-[0-9]{2}/", $month) == 0) {
         $month = date("Y-m");
     }
     // クエリを生成
     $loader = new Vizualizer_Plugin("stock");
     $orders = $loader->loadTable("Orders");
     $select = new Vizualizer_Query_Select($orders);
     $select->addColumn("SUBSTR(" . $orders->order_date . ", 1, 10)", "order_date");
     $select->addColumn("SUM(" . $orders->price . ")", "price");
     $select->where("order_date LIKE ?", array($month . "-%"));
     $select->group("SUBSTR(" . $orders->order_date . ", 1, 10)");
     // 生成したクエリに対して検索を実行し、結果をモデルとして取得
     $order = $loader->loadModel("Order");
     $orders = $order->queryAllBy($select);
     // 結果を属性に設定
     $attr = Vizualizer::attr();
     $attr["sales"] = $orders;
     $attr["thismonth"] = date("Y-m-01", strtotime($month . "-01"));
     $attr["nextmonth"] = date("Y-m", strtotime("+1 month", strtotime($month . "-01")));
     $attr["lastmonth"] = date("Y-m", strtotime("-1 month", strtotime($month . "-01")));
 }
Exemple #7
0
 protected function executeImpl($type, $name, $primary_key)
 {
     $post = Vizualizer::request();
     if ($post["add"] || $post["save"]) {
         // サイトデータを取得する。
         $loader = new Vizualizer_Plugin($type);
         $model = $loader->loadModel($name);
         if (!empty($post[$this->key_prefix . $primary_key])) {
             $model->findByPrimaryKey($post[$this->key_prefix . $primary_key]);
             if (!($model->{$primary_key} > 0)) {
                 $model = $loader->loadModel($name, array($primary_key => $post[$this->key_prefix . $primary_key]));
             }
         }
         foreach ($post as $key => $value) {
             if (!empty($this->key_prefix)) {
                 if (substr($key, 0, strlen($this->key_prefix)) == $this->key_prefix) {
                     $key = preg_replace("/^" . $this->key_prefix . "/", "", $key);
                     $model->{$key} = $value;
                 }
             } else {
                 $model->{$key} = $value;
             }
         }
         // トランザクションの開始
         $connection = Vizualizer_Database_Factory::begin(strtolower($type));
         try {
             $model->save();
             if (!empty($this->key_prefix)) {
                 $post->set($this->key_prefix . $primary_key, $model->{$primary_key});
             } else {
                 $post->set($primary_key, $model->{$primary_key});
             }
             // エラーが無かった場合、処理をコミットする。
             Vizualizer_Database_Factory::commit($connection);
             // 画面をリロードする。
             if (!$this->continue) {
                 // 登録に使用したキーを無効化
                 $this->removeInput("add");
                 $this->removeInput("save");
                 $this->reload();
             }
         } catch (Exception $e) {
             Vizualizer_Database_Factory::rollback($connection);
             throw new Vizualizer_Exception_Database($e);
         }
     }
 }
Exemple #8
0
 protected function executeImpl($type, $name, $value, $result)
 {
     // サイトデータを取得する。
     $loader = new Vizualizer_Plugin($type);
     $model = $loader->loadModel($name);
     $model->setIgnoreOperator(true);
     $model->findByPrimaryKey($value);
     $attr = Vizualizer::attr();
     $attr[$result] = $model;
 }
 public function purchases($status = "")
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Purchase");
     $condition = array("material_id" => $this->material_id);
     if (!empty($status)) {
         $condition["purchase_status"] = $status;
     }
     return $model->findAllBy($condition);
 }
Exemple #10
0
 private function updateDetails()
 {
     $loader = new Vizualizer_Plugin("stock");
     foreach ($this->details as $purchase_id => $volume) {
         $model = $loader->loadModel("ReportDetail");
         $model->findBy(array("report_id" => $this->report_id, "purchase_id" => $purchase_id));
         $purchase = $loader->loadModel("Purchase");
         $purchase->findByPrimaryKey($purchase_id);
         if (!($model->report_detail_id > 0)) {
             $model->report_id = $this->report_id;
             $model->purchase_id = $purchase_id;
             $model->original_volume = $purchase->volume - $purchase->consumed;
         }
         $model->fixed_volume = $volume;
         $model->save();
         $purchase->consumed = $purchase->volume - $volume;
         if ($purchase->volume == $purchase->consumed) {
             $purchase->purchase_status = "consumed";
         }
         $purchase->save();
     }
 }
Exemple #11
0
 protected function executeImpl($params, $type, $name, $key)
 {
     if (!$params->check("upload") || isset($_POST[$params->get("upload")])) {
         $loader = new Vizualizer_Plugin($type);
         // アップされたファイルのデータを取得する。
         if ($_FILES[$key]["error"] == UPLOAD_ERR_OK) {
             if (($fp = fopen($_FILES[$key]["tmp_name"], "r")) !== FALSE) {
                 // 1行目はタイトル行とする。
                 $data = $this->getCsvData($fp);
                 if ($this->checkTitle($data)) {
                     $line = 2;
                     // トランザクションの開始
                     $connection = Vizualizer_Database_Factory::begin(strtolower($type));
                     try {
                         while (($data = $this->getCsvData($fp)) !== FALSE) {
                             $model = $loader->loadModel($name);
                             $model = $this->check($line, $model, $data);
                             if ($model != null) {
                                 $model->save();
                             }
                             $line++;
                         }
                         if (count($this->errors) > 0) {
                             throw new Vizualizer_Exception_Invalid($key, $this->errors);
                         }
                         // エラーが無かった場合、処理をコミットする。
                         Vizualizer_Database_Factory::commit($connection);
                         // 画面をリロードする。
                         if (!$this->continue) {
                             // 登録に使用したキーを無効化
                             $this->removeInput("upload");
                             $this->reload();
                         }
                     } catch (Exception $e) {
                         Vizualizer_Database_Factory::rollback($connection);
                         throw new Vizualizer_Exception_Database($e);
                     }
                 } else {
                     throw new Vizualizer_Exception_Invalid($key, array("アップされたファイルのタイトル行が正しくありません"));
                 }
                 fclose($fp);
             }
         }
     }
 }
Exemple #12
0
 function execute($params)
 {
     $post = Vizualizer::request();
     $attr = Vizualizer::attr();
     if ($params->check("daily")) {
         $search = $post["search"];
         if (empty($search["pre:order_date"])) {
             $search["pre:order_date"] = date("Y-m-d");
             $post->set("search", $search);
         }
         $attr["thisday"] = date("Y-m-d", strtotime($search["pre:order_date"]));
         $attr["lastday"] = date("Y-m-d", strtotime("-1 day", strtotime($attr["thisday"])));
         $attr["nextday"] = date("Y-m-d", strtotime("+1 day", strtotime($attr["thisday"])));
     }
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Order");
     $attr["total"] = $model->summeryBy("price", $post["search"]);
     $this->executeImpl($params, "Stock", "Order", $params->get("result", "orders"));
 }
 /**
  * 注文詳細のデータを元に在庫の引き当てを実施
  */
 public function provision()
 {
     $loader = new Vizualizer_Plugin("stock");
     $menu = $loader->loadModel("Menu");
     $menu->findBy(array("set_id" => $this->set_id, "choice_id" => $this->choice_id));
     if ($menu->menu_id > 0 && $menu->fixed_flg == "1") {
         // トランザクションの開始
         $connection = Vizualizer_Database_Factory::begin("stock");
         try {
             // メニューが確定されている場合は引き当てを実行
             $components = $menu->components();
             foreach ($components as $component) {
                 if ($component->quantity <= 0) {
                     break;
                 }
                 $quantity = $component->quantity;
                 $purchase = $loader->loadModel("Purchase");
                 $purchases = $purchase->findAllBy(array("material_id" => $component->material_id, "purchase_status" => "stocked"), "production_date", false);
                 foreach ($purchases as $purchase) {
                     if ($quantity < $purchase->volume - $purchase->consumed) {
                         $purchase->consumed += $quantity;
                         $quantity = 0;
                     } else {
                         $quantity -= $purchase->volume - $purchase->consumed;
                         $purchase->consumed = $purchase->volume;
                         $purchase->purchase_status = "consumed";
                     }
                     $purchase->save();
                 }
             }
             $this->provision_flg = 1;
             $this->save();
             Vizualizer_Database_Factory::commit($connection);
         } catch (Exception $e) {
             Vizualizer_Database_Factory::rollback($connection);
             throw new Vizualizer_Exception_Database($e);
         }
     }
 }
Exemple #14
0
 public function components()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("Component");
     return $model->findAllBy(array("menu_id" => $this->menu_id));
 }
Exemple #15
0
 /**
  * 注文データ
  */
 public function orderDetail()
 {
     $loader = new Vizualizer_Plugin("stock");
     $model = $loader->loadModel("OrderDetail");
     return $model->findAllByOrderId($this->order_id);
 }
Exemple #16
0
 /**
  * PDF出力の処理を実行する。
  * 出力処理にはHaruを使用します。
  * @param $type モデルクラスのタイプ
  * @param $name モデルクラスの名前
  * @param $value 取得する主キー
  */
 protected function getData($type, $name, $value)
 {
     // データを取得する。
     $loader = new Vizualizer_Plugin($type);
     $model = $loader->loadModel($name);
     $model->findByPrimaryKey($value);
     return $model;
 }
Exemple #17
0
 /**
  * レジからの注文データを取り込む。
  * @param $params バッチ自体のパラメータ
  * @param $data バッチで引き回すデータ
  * @return バッチで引き回すデータ
  */
 protected function importOrders($params, $data)
 {
     try {
         // Use the us-west-2 region and latest version of each client.
         $sharedConfig = array('region' => 'ap-northeast-1', 'version' => 'latest');
         // Create an SDK class used to share configuration across clients.
         $sdk = new Aws\Sdk($sharedConfig);
         // Create an Amazon S3 client using the shared configuration data.
         $client = $sdk->createS3();
         if (count($params) > 3) {
             if ($params[3] == "today") {
                 $time = time();
             } elseif ($params[3] == "yesterday") {
                 $time = strtotime("-1 day");
             } else {
                 $time = strtotime($params[3]);
             }
         } else {
             $time = time();
         }
         // Get the object
         $result = $client->getObject(array('Bucket' => "oder-report", 'Key' => "150/" . date("Ym", $time) . "/sales-" . date("Y-m-d", $time) . ".csv"));
         Vizualizer_Logger::writeDebug($result['Body']);
         $lines = explode("\n", $result['Body']);
         $columns = array();
         $data = array();
         foreach ($lines as $index => $line) {
             if (!empty($line)) {
                 if ($index > 0) {
                     $item = str_getcsv($line);
                     $record = array();
                     foreach ($columns as $i => $key) {
                         $record[$key] = $item[$i];
                     }
                     $data[] = $record;
                 } else {
                     $columns = str_getcsv($line);
                 }
             }
         }
         Vizualizer_Logger::writeDebug(print_r($data, true));
         $sets = array();
         foreach ($data as $item) {
             if ($item["type"] == "summary") {
                 // トランザクションの開始
                 $connection = Vizualizer_Database_Factory::begin("stock");
                 try {
                     $loader = new Vizualizer_Plugin("stock");
                     $model = $loader->loadModel("Order");
                     $model->findByPrimaryKey($item["order_id"]);
                     if (!($model->order_id > 0)) {
                         $model = $loader->loadModel("Order", array("order_id" => $item["order_id"]));
                     }
                     $model->user_id = $item["user_id"];
                     $model->payment_type = $item["payment_type"];
                     $model->order_date = $item["purchase_date"];
                     $model->price = $item["price"];
                     $model->save();
                     // エラーが無かった場合、処理をコミットする。
                     Vizualizer_Database_Factory::commit($connection);
                 } catch (Exception $e) {
                     Vizualizer_Database_Factory::rollback($connection);
                     throw new Vizualizer_Exception_Database($e);
                 }
             }
             if ($item["type"] == "set") {
                 $sets[$item["order_id"] . "-" . $item["set_id"]] = $item;
                 // トランザクションの開始
                 $connection = Vizualizer_Database_Factory::begin("stock");
                 try {
                     $loader = new Vizualizer_Plugin("stock");
                     $model = $loader->loadModel("OrderDetail");
                     $model->order_id = $item["order_id"];
                     $model->set_id = $item["set_id"];
                     $model->set_menu_name = $item["set_menu_name"];
                     $model->order_date = $item["purchase_date"];
                     $model->price = $item["price"];
                     $model->quantity = $item["count"];
                     $model->save();
                     $model = $loader->loadModel("Menu");
                     $model->findBy(array("set_id" => $item["set_id"], "choice_id" => 0));
                     $model->set_id = $item["set_id"];
                     $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"];
                     $model->menu_name = $item["menu_name"];
                     $model->price = $item["price"];
                     $model->fixed_flg = "1";
                     $model->save();
                     // エラーが無かった場合、処理をコミットする。
                     Vizualizer_Database_Factory::commit($connection);
                 } catch (Exception $e) {
                     Vizualizer_Database_Factory::rollback($connection);
                     throw new Vizualizer_Exception_Database($e);
                 }
                 // 在庫の引き当てを実施
                 $model = $loader->loadModel("OrderDetail");
                 $models = $model->findAllBy(array("set_id" => $item["set_id"], "ne:provision_flg" => "1"));
                 foreach ($models as $model) {
                     $model->provision();
                 }
             }
             if ($item["type"] == "choice") {
                 // トランザクションの開始
                 $connection = Vizualizer_Database_Factory::begin("stock");
                 try {
                     $loader = new Vizualizer_Plugin("stock");
                     $model = $loader->loadModel("OrderDetail");
                     $model->order_id = $item["order_id"];
                     $model->set_id = $item["set_id"];
                     $model->choice_id = $item["choice_id"];
                     $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"];
                     $model->menu_name = $item["menu_name"];
                     $model->price = $item["price"];
                     $model->quantity = $sets[$item["order_id"] . "-" . $item["set_id"]]["count"];
                     $model->save();
                     $model = $loader->loadModel("Menu");
                     $model->findBy(array("set_id" => $item["set_id"], "choice_id" => $item["choice_id"]));
                     $model->set_id = $item["set_id"];
                     $model->choice_id = $item["choice_id"];
                     $model->set_menu_name = $sets[$item["order_id"] . "-" . $item["set_id"]]["set_menu_name"];
                     $model->menu_name = $item["menu_name"];
                     $model->price = $item["price"];
                     $model->fixed_flg = "1";
                     $model->save();
                     // エラーが無かった場合、処理をコミットする。
                     Vizualizer_Database_Factory::commit($connection);
                 } catch (Exception $e) {
                     Vizualizer_Database_Factory::rollback($connection);
                     throw new Vizualizer_Exception_Database($e);
                 }
                 // 在庫の引き当てを実施
                 $model = $loader->loadModel("OrderDetail");
                 $models = $model->findAllBy(array("set_id" => $item["set_id"], "choice_id" => $item["choice_id"], "ne:provision_flg" => "1"));
                 foreach ($models as $model) {
                     $model->provision();
                 }
             }
         }
     } catch (S3Exception $e) {
         echo $e->getMessage() . "\n";
     }
     return $data;
 }
Exemple #18
0
 protected function executeImpl($params, $type, $name, $result, $defaultSortKey = "create_time")
 {
     $post = Vizualizer::request();
     // セレクトモードの時は通常の検索条件を適用しない
     if ($params->check("mode", "normal") == "select") {
         $savedPost = $post->export();
         $selectSearch = array();
         if ($params->check("selectSearchKeys") && array_key_exists("search", $savedPost) && is_array($savedPost["search"])) {
             $selectKeys = explode(",", $params->get("selectSearchKeys"));
             foreach ($selectKeys as $key) {
                 if (array_key_exists($key, $savedPost["search"])) {
                     $selectSearch[$key] = $savedPost["search"][$key];
                 }
             }
         }
         Vizualizer::request()->set("search", $selectSearch);
     }
     if (!$params->check("search") || isset($post[$params->get("search")])) {
         // サイトデータを取得する。
         $loader = new Vizualizer_Plugin($type);
         $model = $loader->loadModel($name);
         // カテゴリが選択された場合、カテゴリの商品IDのリストを使う
         $conditions = $this->condition;
         if (is_array($post["search"])) {
             foreach ($post["search"] as $key => $value) {
                 if (!$this->isEmpty($value)) {
                     if ($params->get("mode", "list") != "select" || !$params->check("select") || $key != substr($params->get("select"), 0, strpos($params->get("select"), "|"))) {
                         $conditions[$key] = $value;
                     }
                 }
             }
         }
         // 追加の検索条件があれば設定
         if ($params->check("wkey")) {
             $conditions[$params->check("wkey")] = $params->check("wvalue");
         }
         if ($params->check("wkey2")) {
             $conditions[$params->check("wkey2")] = $params->check("wvalue2");
         }
         if ($params->check("wkey3")) {
             $conditions[$params->check("wkey3")] = $params->check("wvalue3");
         }
         if ($params->check("wkey4")) {
             $conditions[$params->check("wkey4")] = $params->check("wvalue4");
         }
         if ($params->check("wkey5")) {
             $conditions[$params->check("wkey5")] = $params->check("wvalue5");
         }
         if ($params->check("wkey6")) {
             $conditions[$params->check("wkey6")] = $params->check("wvalue6");
         }
         if ($params->check("wkey7")) {
             $conditions[$params->check("wkey7")] = $params->check("wvalue7");
         }
         if ($params->check("wkey8")) {
             $conditions[$params->check("wkey8")] = $params->check("wvalue8");
         }
         if ($params->check("wkey9")) {
             $conditions[$params->check("wkey9")] = $params->check("wvalue9");
         }
         $attr = Vizualizer::attr();
         if ($this->groupBy) {
             $model->setGroupBy($this->groupBy);
         }
         // 並べ替え順序が指定されている場合に適用
         $sortOrder = "";
         $sortReverse = false;
         if ($params->check("sort_key")) {
             $sortOrder = $post[$params->get("sort_key")];
             if ($this->isEmpty($sortOrder)) {
                 $sortOrder = $defaultSortKey;
                 $sortReverse = true;
             } elseif (strpos($sortOrder, "rev@") === 0) {
                 list($dummy, $sortOrder) = explode("@", $sortOrder);
                 $sortReverse = true;
             }
         } elseif ($params->check("sort")) {
             $sortOrder = $params->check("sort");
             if (strpos($sortOrder, "rev@") === 0) {
                 list($dummy, $sortOrder) = explode("@", $sortOrder);
                 $sortReverse = true;
             }
         }
         if ($params->get("force_operator", "0") == "1") {
             $model->setIgnoreOperator(true);
         }
         $models = $model->findAllBy($conditions, $sortOrder, $sortReverse);
         if ($params->get("mode", "list") == "list") {
             $attr[$result] = $models;
         } elseif ($params->get("mode", "list") == "select") {
             $attr[$result] = array();
             if ($params->check("select")) {
                 list($select_key, $select_value) = explode("|", $params->get("select"));
                 $selection = array();
                 foreach ($models as $model) {
                     $selection[$model->{$select_key}] = $model->{$select_value};
                 }
                 $attr[$result] = $selection;
             }
         }
         if ($params->check("mode", "normal") == "select") {
             Vizualizer::request()->import($savedPost);
         }
     }
 }