<?php
namespace Kzl\FrameworkBundle\Common;
use Kzl\FrameworkBundle\Repository\BaseRepository;
use Kzl\JinjiKoukaBundle\Repository\EmployeeRepository;
use Kzl\JinjiKoukaBundle\Repository\FileAttachmentRepository;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\Collection;
//use Kzl\JinjiKoukaBundle\Controller\BaseController;
use Symfony\Component\Validator\ConstraintValidatorFactory;
use Symfony\Component\Validator\DefaultTranslator;
use Symfony\Component\Validator\Mapping\ClassMetadataFactory;
use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
use Symfony\Component\Validator\Validator;
use Kzl\FrameworkBundle\Model\TenantAwareInterface;
/**
* Description of JinjiKouka.
*
* @author mtisunaga@kuzilla.co.jp
*/
class KzlFrameworkStatic
{
/**
* 役職、職群、所属のコード桁数.
*/
const CODE_MAX = 10;
const NAME_MAX = 40;
const KANA_MAX = 40;
const COMMENT_MAX = 100;
/**
* 役職、職群、所属のコード.
*/
const KEY_YAKUSYOKU = 'yakusyoku';
const KEY_SYOKUGUN = 'syokugun';
const KEY_DIVISION = 'division';
const KEY_EMPLOYEE = 'employee';
// /**
// * @var ContainerInterface
// */
/** @var ContainerInterface */
public static $container;
/**
* コンストラクタ
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
/**
* 有効フラグ.
*/
const IS_ACTIVE = 1;
const NOT_ACTIOVE = 0;
/**
* 有効かどうかの設定.
*
* @var type
*/
public static $actives = [
self::NOT_ACTIOVE => '無効',
self::IS_ACTIVE => '有効',
];
/** 2014/7/9 mitsunaga
* true/false.
*/
const FLG_TRUE = 1;
const FLG_FALSE = 0;
// デフォルト表示順
const DEFAULT_POSITION = 10;
/**
* ログイン方法設定.
*/
const LOGIN_ONE_TIME = 0;
const LOGIN_ID_PASS = 1;
const LOGIN_BOTH = 2;
/**
* 基本管理画面のコード設定
* 全変換の場合か、個別登録時の変換かの場合.
*/
const PERSOON_CONBART = 0;
const All_CONBART = 1;
/**
* @var int 自己評価として扱う次数
*/
const STAGE_SELF = 0;
const STAGE_MIN_KOUKA = 1;
/**
* 17/11/8 hagio 考課履歴閲覧設定.
*/
const KOUKA_HISTORY_DISABLE = 0;
const KOUKA_HISTORY_FINAL = 1;
const KOUKA_HISTORY_SAME_STAGE = 2;
const KOUKA_HISTORY_SELF = 3;
/** 宣言目標表示対象: 同所属 */
const DECLARATION_AIM_TARGET_DIVISION = 1;
const /* 宣言目標表示対象: 同役職 */
DECLARATION_AIM_TARGET_YAKUSYOKU = 2;
const /* 宣言目標表示対象: 同職群 */
DECLARATION_AIM_TARGET_SYOKUGUN = 3;
/**
* 宣言目標の表示対象 選択値.
*
* @var array
*/
public static $declarationAimTargetList = [
self::DECLARATION_AIM_TARGET_DIVISION => '同所属の宣言目標',
self::DECLARATION_AIM_TARGET_YAKUSYOKU => '同役職の宣言目標',
self::DECLARATION_AIM_TARGET_SYOKUGUN => '同職群の宣言目標',
];
/**
* CSVターゲット名称一覧.
*
* @var array
*/
public static function getCsvTargetNameList()
{
return [
'department' => JinjiKoukaStatic::getTrans('基本情報.所属'),
'yakusyoku' => JinjiKoukaStatic::getTrans('基本情報.役職'),
'syokugun' => JinjiKoukaStatic::getTrans('基本情報.職群'),
'employee' => JinjiKoukaStatic::getTrans('基本情報.社員'),
];
}
/**
* 自己評価かどうか.
*
* @param int $stage
*
* @return bool
*/
public static function isSelfStage($stage)
{
return intval($stage) === JinjiKoukaStatic::STAGE_SELF;
}
/**
* 表示/非表示のキーと表示文字列の配列.
*
* @var array
*/
public static $isActives = ['1' => '表示する', '0' => '非表示'];
const ID_PATTERN = '/^([_a-zA-Z0-9]|[\-\+\*\@\!\?\%\_\/\.])*$/';
// const ID_PATTERN_VALIDATE_MSG = '[%s]半角英数字と記号-+*@!?%_/.で入力してください。';
const ID_PATTERN_VALIDATE_MSG = '半角英数字と記号-+*@!?%_/.で入力してください。';
/**
* 表示/非表示のキーと表示文字列の配列を取得する.
*
* @return type
*/
public static function getIsActives()
{
return self::$isActives;
}
/**
* 表示/非表示の表示文字列を取得する.
*
* @param type $isActive
*
* @return string
*/
public static function getIsActiveToString($isActive)
{
return isset(self::$isActives[$isActive]) ? self::$isActives[$isActive] : '';
}
/**
* 対象かどうかのフラグ文字列.
*
* @var type
*/
protected static $targetFlgs = ['0' => '考課しない', '1' => '考課する'];
// 14/5/23 sakamoto 項目名対応のため変更
// static protected $targetFlgs = array('0'=>'しない', '1'=>'する');
/**
* 対象かどうかのフラグと表示文字列の配列を取得する.
*
* @return type
*/
public static function getTargetFlgs()
{
return self::$targetFlgs;
}
/**
* 対象かどうかのフラグのの表示文字列を取得する.
*
* @return string
*/
public static function getTargetFlgToString($targetFlg)
{
return isset(self::$targetFlgs[$targetFlg]) ? self::$targetFlgs[$targetFlg] : '';
}
/**
* 有効かどうかのフラグ.
*
* @var type
*/
protected static $useFlgs = [0 => '無効', 1 => '有効'];
/**
* 有効かどうかのフラグを取得する.
*
* @return type
*/
public static function getUseFlgs()
{
return self::$useFlgs;
}
/**
* 有効かどうかのフラグのを取得する.
*
* @return string
*/
public static function getUseFlgToString($useFlg)
{
return isset(self::$useFlgs[$useFlg]) ? self::$useFlgs[$useFlg] : '';
}
/**
* 性別の種類の文字列.
*
* @var type
*/
protected static $sex_kind = ['1' => '男', '2' => '女', '3' => 'その他'];
/**
* 性別を取得する.
*
* @return type
*/
public static function getSexKind()
{
return self::$sex_kind;
}
/**
* 独身・既婚の文字列.
*
* @var type
*/
protected static $married_kind = ['0' => '独身', '1' => '既婚'];
/**
* 独身・既婚を取得する.
*
* @return type
*/
public static function getMarriedKind()
{
return self::$married_kind;
}
/**
* ログイン方法名称.
*/
const LOGIN_ONE_TIME_STR = 'ワンタイムパスワード方式';
const LOGIN_ID_PASS_STR = 'ID/パスワード方式';
const LOGIN_BOTH_STR = 'ワンタイムパスワード方式とID/パスワード方式の併用';
/**
* ログイン方式の配列.
*
* @var type
*/
public static $login_select = [
self::LOGIN_ONE_TIME => self::LOGIN_ONE_TIME_STR,
self::LOGIN_ID_PASS => self::LOGIN_ID_PASS_STR,
];
/**
* ログ出力で使用
* 値が空の時に表示させる文字列
* 140710 sakamoto.
*/
const LOG_EMPTT_STRING = '(未設定)';
/**
* ログイン方式の配列を取得する.
*
* @return type
*/
public static function getLoginSelect()
{
return self::$login_select;
}
/**
* ログイン設定方式を文字列で返す.
*
* @param type $loginSetting
*/
public static function getLoginSettingToString($loginSetting)
{
return isset(self::$login_select[$loginSetting]) ? self::$login_select[$loginSetting] : '';
}
private static $_emp_dairi_users = [];
/**
* 2014/10/29 mitsunaga(代理入力方法変更に伴い移植)
* 社員TOPのログインユーザ取得メソッド.
*
* @return type
*
* @throws type
*/
public static function getDairiEmployeeLoginUser($dairiId)
{
if ($dairiId) {
if (!self::inDairiPersonArray($dairiId)) {
throw self::createNotFoundException('代理ログインに失敗しました。');
}
if (!isset(self::$_emp_dairi_users[$dairiId])) {
self::$_emp_dairi_users[$dairiId] = self::getDoctrine()->getRepository('KzlJinjiKoukaBundle:Employee')->findOneBy(
['employeeCd' => $dairiId]
);
}
return self::$_emp_dairi_users[$dairiId];
}
throw new \Exception('呼び出しエラー');
}
/**
* 値が、セッションの考課者配列(JSON形式)に格納されているかチェックする.
*/
public static function inDairiPersonArray($dairiPersonId)
{
$jsonSession = self::getSession()->get('dairi_person_id_json_array', null);
$array = self::getArrayByJson($jsonSession);
//セッションが空だった場合、NULLで返す
if (!$array) {
return false;
}
//値がセッションに格納されているか確認
foreach ($array as $value) {
//一致すればTRUEで返す
if ($value == $dairiPersonId) {
return true;
}
}
return false;
}
public static function generateUrl($route, $parameters = [], $absolute = false)
{
$tenantManager = self::getTenantManager();
$tenantParameters = [
'subfolder' => $tenantManager->getSubfolder(),
];
$parameters = array_merge($parameters, $tenantParameters);
return self::$container->get('router')->generate($route, $parameters, $absolute);
}
/**
* Returns the current request.
*
* @return Symfony\Component\HttpFoundation\Request|void The http request object
*/
public static function getRequest()
{
if (self::$container->has('request_stack') && $request = self::$container->get('request_stack')->getCurrentRequest()) {
return $request;
}
}
/**
* セッションオブジェクトを取得する。
*
* @return \Symfony\Component\HttpFoundation\Session\Session
*/
public static function getSession()
{
if (self::$container->has('session') && $request = self::$container->get('session')) {
return $request;
}
}
/**
* フラッシュメッセージを設定する.
*
* @param string $name
* @param string $value
*/
public static function setFlash($name, $value)
{
self::getSession()->getFlashBag()->set($name, $value);
}
/**
* エラーのフラッシュメッセージを設定する.
*
* @param string $value
*/
public function setFlashError($value)
{
self::setFlash('error', $value);
}
/**
* 通知のフラッシュメッセージを設定する。
*
* @param string $value
*/
public function setFlashNotice($value)
{
self::setFlash('notice', $value);
}
// ----- Symfony\Bundle\FrameworkBundle\Controller\Controller を参考に実装-----
/**
* Shortcut to return the Doctrine Registry service.
*
* @return \Doctrine\Bundle\DoctrineBundle\Registry;
*
* @throws \LogicException If DoctrineBundle is not available
*/
public static function getDoctrine()
{
if (!self::$container->has('doctrine')) {
throw new \LogicException('The DoctrineBundle is not installed in your application.');
}
return self::$container->get('doctrine');
}
// ----- $this->getDoctrine を参考に BaseController のtransメソッド実装-----
/**
* Translates the given message.
*
* @param string $id The message id
* @param array $parameters An array of parameters for the message
* @param string $domain The domain for the message
* @param string $locale The locale
*
* @return string The translated string
*/
public static function getTrans($id, array $parameters = [], $domain = 'messages', $locale = null)
{
if (!self::$container->has('translator')) {
throw new \LogicException('The DoctrineBundle is not installed in your application.');
}
return self::$container->get('translator')->trans($id, $parameters, $domain, $locale);
}
/**
* Translates the given message.
*
* @return string The translated string
*/
// public static function getKzlTrans($id, array $parameters = array(), $domain = 'messages', $locale = null)
// {
// if (!self::$container->has('translator')) {
// throw new \LogicException('The DoctrineBundle is not installed in your application.');
// }
//
// return self::$container->get('translator')->kzlTrans($id, $parameters, $domain, $locale);
// }
/**
* @return type
*
* @todo translationの呼び出しを修正
*
* @throws \LogicException
*/
public static function getTranslator()
{
if (!self::$container->has('translator')) {
throw new \LogicException('The translatorBundle is not installed in your application.');
}
return self::$container->get('translator');
}
// -------------------------------------------------------------------------------
protected static $_kouka = false;
/**
* 現在有効な考課を取得.
*
* @return false|\Kzl\JinjiKoukaBundle\Entity\Kouka|null
*/
public static function getUnLockedKouka($isUser = false)
{
return self::getKoukaManager()->getUnLockedKouka($isUser);
}
protected static $_aim = false;
// /**
// * 現在有効な考課を取得
// * @return false|null|\Kzl\JinjiKoukaBundle\Entity\Kouka
// */
// public static function getUnLockedKouka(){
// if(false === self::$_kouka){
// // self::$_kouka = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Kouka')->getUnLockedOne();
// self::$_kouka = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Kouka')->getLatestUnLockedOne();
// }
// return self::$_kouka;
// }
// protected static $_aim = false;
/**
* 15/6/3 (getUnlockedKouka より)
* 現在有効な考課を取得.
*
* @param bool $throwException
*
* @return \Kzl\JinjiKoukaBundle\Entity\Aim|null
*/
public static function getUnLockedAim($throwException = false)
{
if (false === self::$_aim) {
self::$_aim = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Aim')->getUnLockedOne();
}
if ($throwException) {
if (self::$_aim) {
return self::$_aim;
} else {
throw new \Exception('unable to find aim entity unlocked.');
}
}
return self::$_aim ? self::$_aim : null;
}
protected static $_koukaSelectList = false;
/**
* セレクタに表示する現在有効な考課の選択肢を取得.
*
* @author hagio 2017/4/8
*
* @return array
*/
public static function getUnLockedKoukaSelectList($isUser = false)
{
if (self::$_koukaSelectList === false) {
self::$_koukaSelectList = [];
$koukaList = self::getKoukaManager()->getUnLockedKoukaList($isUser);
foreach ($koukaList as $kouka) {
$from = date_format($kouka->getFrdate(), 'Y年m月d日');
$to = date_format($kouka->getTodate(), 'Y年m月d日');
self::$_koukaSelectList[$kouka->getId()] = $kouka->getName().'('.$from.'~'.$to.')';
}
}
return self::$_koukaSelectList;
// if(false === self::$_koukaList) {
// self::$_koukaList = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Kouka')->getKoukaSelectList();
// }
// return self::$_koukaList;
}
protected static $company_name = false;
/**
* 現在有効な管理者の会社名を取得.
*/
/*
public static function getCompanyName(){
if(false === self::$company_name){
self::$company_name = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:SystemSetting')->getCompanyName();
}
return self::$company_name;
}
protected static $system_name = false;
/**
* 現在有効な管理者の会社名を取得
*
public static function getSystemName(){
if(false === self::$system_name){
self::$system_name = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:SystemSetting')->getSystemName();
}
return self::$system_name;
}
protected static $company_logo = false;
/**
* 会社のロゴを取得
*
public static function getCompanyLogo(){
//if(false === self::$company_logo){
self::$company_logo = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:FileAttachment')->getCompanyLogo();
//}
return self::$company_logo;
}
*/
/**
* 添付ファイルのフォルダへのパスを取得.
*
* @return type
*/
public static function getEmployeeTempFileDir()
{
return self::getKernel()->getRootDir().'/../web';
}
/**
* データフォルダのパスを取得.
*
* @return type
*/
public static function getDataDir()
{
return self::getKernel()->getRootDir().'/../data';
}
public static function getKernel()
{
if (!self::$container->has('kernel')) {
throw new \LogicException('The DoctrineBundle is not installed in your application.');
}
return self::$container->get('kernel');
}
// /**
// * @deprecated typo
// */
// public static function getValidator()
// {
// // if (!self::$container->has('validator')) {
// // throw new \LogicException('The DoctrineBundle is not installed in your application.');
// // }
// // return self::$container->get('validator');
// }
public static function getValidator()
{
if (!self::$container->has('validator')) {
throw new \LogicException('The DoctrineBundle is not installed in your application.');
}
return self::$container->get('validator');
}
/**
* 15/2/27 systemのcharsetを返す.
*
* @author mitsunaga
*
* @return string
*/
public static function getCharset()
{
return self::getKernel()->getCharSet();
}
/**
* 空文字判定
* true : 値が存在しない、もしくは空文字のみ
* false : 値が存在する(空文字の可能性もなし).
*
* @param type $sting
*
* @return bool
*/
public static function isNotValue($sting)
{
// kernel からsyfony2の文字コードを取得
// $charSet = self::getKernel()->getCharSet();
$charSet = self::getCharSet();
// 全角スペースを半角スペースに変換してスペースを削除
$string = trim(mb_convert_kana($sting, 's', $charSet));
// スペースを取り除いても値があるかどうかを返す
if ($string == '') {
return true;
}
return false;
}
/**
* ドキュメントルートを取得する.
*
* @return type
*/
public static function getDocumentRoot()
{
//$pinfo = pathinfo(self::getRequest()->server->get('DOCUMENT_ROOT') . self::getRequest()->getBasePath());
//return $pinfo['dirname'].DIRECTORY_SEPARATOR.$pinfo['basename'];
return self::getRequest()->server->get('DOCUMENT_ROOT').self::getRequest()->getBasePath();
//return self::getRequest()->server->get('DOCUMENT_ROOT');
}
/*
* ファイルアップロード先ディレクトリをドキュメントルート付きで取得する
* @return string
*/
public static function getUploadDir()
{
return self::getDocumentRoot().DIRECTORY_SEPARATOR.self::getUploadDirName();
}
/**
* ファイルアップロード先ディレクトリ名を取得する。
*
* @return string
*/
public static function getUploadDirName()
{
//return self::getRequest()->server->get('DOCUMENT_ROOT').DIRECTORY_SEPARATOR.'uploads';
return 'uploads';
}
/** 14/04/30
* ログ出力用オブジェクトを取得する.
*
* @return \Kzl\LogBundle\Service\Logger
*
* @throws \LogicException
*/
public static function getLogger()
{
if (!self::$container->has('kzl_log')) {
throw new \LogicException('The KzlLogBundle is not registered in your application.');
}
return self::$container->get('kzl_log');
}
// バリデーション関係 ↓ ============================================
private static $_validator;
/**
* バリデータを取得.
*
* @return \Kzl\JinjiKoukaBundle\Controller\Validator
*/
private static function createValidator()
{
if (null === self::$_validator) {
self::$_validator = new Validator(
new ClassMetadataFactory(new StaticMethodLoader()),
new ConstraintValidatorFactory(),
new DefaultTranslator()
);
}
return self::$_validator;
}
/**
* 最大文字バリデーション.
*
* @param int $maxLength
*
* @return Assert\Length
*/
private static function getAssertMaxLength($maxLength)
{
return new Assert\Length([
'maxMessage' => '文字数が多すぎます。 '.$maxLength.'文字以内でなければなりません。',
'max' => $maxLength,
]);
}
/**
* 必須バリデーション.
*
* @param string $targetName
*
* @return Assert\Length
*/
private static function getAssertNotBlank($targetName = 'この項目')
{
return new Assert\NotBlank([
'message' => $targetName.'は必須です。',
]);
}
/**
* 必須バリデ.
*
* @param string $value
* @param string $targetName
* @param string $column
*
* @return array
*/
public static function validNotBlank($value, $targetName, $column)
{
return self::validByConstraints($column, $value, [
self::getAssertNotBlank($targetName),
]);
}
/**
* メールアドレスバリデ.
*
* @param string $value
* @param string $column
*
* @return array
*/
public static function validateMail($value, $column = 'mail')
{
return self::validByConstraints($column, $value, [
new Assert\Email([
'message' => '有効な'.JinjiKoukaStatic::getTrans('メールアドレス').'ではありません。',
]),
]);
}
/**
* コードバリデ.
*
* @param string $value
* @param string $column
*
* @return array
*/
public static function validateCode($value, $column = 'code')
{
return self::validByConstraints($column, $value, [
self::getAssertNotBlank('コード'),
self::getAssertMaxLength(self::CODE_MAX),
]);
}
/**
* 名前バリデ.
*
* @param string $value
* @param string $column
*
* @return array
*/
public static function validateName($value, $column = 'name')
{
return self::validByConstraints($column, $value, [
self::getAssertNotBlank('名前'),
self::getAssertMaxLength(self::NAME_MAX),
]);
}
/**
* カナバリデ.
*
* @param string $value
* @param string $column
*
* @return array
*/
public static function validateKana($value, $column = 'kana')
{
//全角カナ、半角カナをひらがなに変換 2014/6/9 追加
$value = mb_convert_kana($value, 'Hc', 'UTF-8');
return self::validByConstraints($column, $value, [
new Assert\Regex([
'pattern' => '/^([ \t\r\nぁ-んー])+$/u',
'message' => 'ひらがなで入力して下さい。',
]),
self::getAssertMaxLength(self::KANA_MAX),
]);
}
/**
* バリデーション.
*
* @param string $target
* @param mixed $value
* @param array $constrains
*
* @return array
*/
private static function validByConstraints($target, $value, $constrains)
{
$validator = self::createValidator();
$errors = $validator->validateValue(
[$target => $value], /*対象*/
new Collection([
$target => $constrains,
]) /*バリデーション設定*/
);
return $errors;
}
// バリデーション関係 ↑ ============================================
const CD_RANGE = 10;
/**
* 値が空でなく、数字だったらTRUEを返す.
*
* @param string $cd
*
* @return bool
*/
// public static function validateCd($cd)
// {
// // 項目マスタ対応時に修正すること
// return $cd != '' && is_numeric($cd) ;
//// return $cd != '' && is_numeric($cd) && ( $cd < pow(10,self::CD_RANGE) ) ;
// }
/**
* コードが数値に変換できる場合はint型で数値にした値を返す.
*
* 14/11/07 sakamoto cd + masta(マスタ)を指定してシステム設定のコードを取得する
*
* @param type $cd
*
* @return type
*/
// public static function getNumCd($cd)
public static function getNumCd($mst, $cd)
{
$cd = ltrim($cd, '0');
$cd = ltrim($cd, ' ');
$cd = self::getburyZero($mst, $cd);
// if(is_numeric($cd)){
// return (int)$cd;
// }
return $cd;
}
public static function substrName($name)
{
return self::substr($name, self::NAME_MAX);
}
public static function substrKana($kana)
{
return self::substr($kana, self::KANA_MAX);
}
public static function substrComment($comment)
{
return self::substr($comment, self::COMMENT_MAX);
}
public static function substr($str, $range)
{
// if($str==null) return '';
if ($str === null || $str === '') {
return '';
}
return mb_substr($str, 0, $range, JinjiKoukaStatic::getKernel()->getCharSet());
}
/**
* CSVで取得した項目と必要な項目の差を返す.
*
* @param type $requiredCount
*
* @return int $requiredCount -count($values)
*/
// public static function compareRequiredCountAndInputCount($values,$requiredCount){
// return $requiredCount - count($values) ;
// }
public static function checkInputCount($values, $object, $requiredCount)
{
// objectから必要項目数を取得する
// $diff = self::compareRequiredCountAndInputCount($values, $requiredCount);
$diff = count($values) - $requiredCount;
// CSVの取得項目数-必要項目数 =0 ならば何もしないでtrueを返す
if ($diff == 0) {
return true;
// CSVの必要項目数 < 取得項目数ならば項目数が多いwarningを追加 差を返す
} elseif ($diff < 0) {
$object->addCsvWarningList(sprintf(\Kzl\JinjiKoukaBundle\Tools\myToolCsv::WARRNING_COUNT_TOO, count($values)));
return $diff;
// CSVの必要項目数 > 取得項目数なら 差を返す
} else {
// $object->addCsvWarningList(\Kzl\JinjiKoukaBundle\Tools\myToolCsv::WARRNING_COUNT_FEW);
return $diff;
}
}
// public static function getNoValueErrorMessage($value_name){
// return sprintf('[] %sがありません', $value_name);
// }
// }
//
// /**
// * フォームを作成
// *
// * @param string|FormTypeInterface $type The built type of the form
// * @param mixed $data The initial data for the form
// * @param array $options Options for the form
// *
// * @return Form
// */
// public static function createForm($type, $data = null, array $options = array())
// {
// return self::$container->get('form.factory')->create($type, $data, $options);
// }
//
// ---------- サービスの取得 --------------
/**
* システム管理用のサービスを取得する.
*
* @return \Kzl\JinjiKoukaBundle\Service\SystemManager
*/
public static function getSystemManager()
{
return self::$container->get('kzl_system');
}
/**
* レイアウトタイプサービスを取得する。
* キシヤ様MBOかどうかの判定用.
*
* @author kawaguchi@kuzilla.co.jp
*
* @return \Kzl\JinjiKoukaBundle\Service\LayoutType
*/
public static function getLayoutType()
{
return self::$container->get('kzl_layout_type');
}
/**
* 考課取得用クラスを取得する.
*
* @author mitsunaga 2017/8/9
*
* @return \Kzl\JinjiKoukaUserBundle\Service\KoukaManager
*/
protected static function getKoukaManager()
{
return self::$container->get('kzl_user_kouka');
}
/**
* jsonの値を配列に変換して返す.
*
* @param string $json
*
* @return array
*/
public static function getArrayByJson($json)
{
if (null === $json || '' === $json) {
return [];
}
// 15/6/11 mtisuanga nullが帰るケースがあって不愉快なので修正
$array = json_decode($json, true);
return is_array($array) ? $array : [];
// return json_decode($json, true);
}
/**
* 配列からjsonにエンコードする.
*
* @param mixed $array
*
* @return string
*/
public static function getJsonByArray($array)
{
if (!$array || !is_array($array)) {
return '';
}
return json_encode($array);
}
/**
* 権限用のサービスを取得する.
*
* @return \Kzl\HanabusaBundle\Service\SystemManager
*/
public static function getRoleManager()
{
if (!self::$container->has('kzl_role')) {
throw new \LogicException('The DoctrineBundle is not installed in your application.');
}
return self::$container->get('kzl_role');
}
/**
* 社員用のサービスを取得する.
*
* @author 2015/6/16 kawaguchi@kuzilla.co.jp
*
* @return \Kzl\JinjiKoukaBundle\Service\EmployeeManager
*/
public static function getEmployeeManager()
{
return self::$container->get('kzl_employee');
}
/**
* 2017/10/24 役職取得用クラスを取得する.
*
* @author aoki
*
* @return \Kzl\JinjiKoukaUserBundle\Service\YakusyokuManager
*/
public static function getYakusyokuManager()
{
return self::$container->get('kzl_yakusyoku');
}
/**
* 2017/10/24 所属取得用クラスを取得する.
*
* @author aoki
*
* @return \Kzl\JinjiKoukaUserBundle\Service\DivisionManager
*/
public static function getDivisionManager()
{
return self::$container->get('kzl_division');
}
/**
* @return \Kzl\JinjiKoukaBundle\Service\AimOrganizationManager
*/
public static function getAimOrganizationManager()
{
return self::$container->get('kzl_aim_organization');
}
/**
* 基本情報履歴用のサービスを取得する.
*
* @author mitsunaga 15/11/2
*
* @return \Kzl\JinjiKoukaBundle\Service\HistoryBaseInfoManager
*/
public static function getHistoryBaseInfoManager()
{
return self::$container->get('kzl_history_base_info');
}
/**
* 期間の表示文字列を作成
* 形式)
* ・「~」でつなげた文字列で表示
* ・年・月はFROM/TOで重複する場合表示なし
* ・形式例
* FROM:2014/5/21 TO:2015/6/21「2014年5月21日~2015年6月21日」
* FROM:2014/5/21 TO:2014/6/21「2014年5月21日~6月21日」
* FROM:2014/6/20 TO:2014/6/21「2014年6月20日~21日」.
*
* @param \DateTime $fromdate
* @param \DateTime $todate
*/
public static function getStrPeriod($fromdate, $todate)
{
$pattern = 'Y年n月j日';
if (!$fromdate && !$todate) {
return '期間未設定';
}
//開始日の文字列を取得
$frdateToStr = self::getDateToString($fromdate, $pattern, '未設定');
if ($fromdate && $todate) {
// 年が違う場合
if ($fromdate->format('Y') != $todate->format('Y')) {
$pattern = 'Y年n月j日';
// 月が違う場合
} elseif ($fromdate->format('m') != $todate->format('m')) {
$pattern = 'n月j日';
// 月が同じ場合
} else {
$pattern = 'j日';
}
}
//終了日の文字列を取得
$todateToStr = self::getDateToString($todate, $pattern, '未設定');
return $frdateToStr.'~'.$todateToStr;
}
/**
* 日付をY月j年j日の形でformat.
*
* @param type $date
* @param string $format フォーマット文字列
* @param string $dummyStr 空の場合に返す文字列
*
* @return string
*/
private static function getDateToString($date, $format = 'Y-m-d', $dummyStr = '')
{
if (!$date) {
return $dummyStr;
} else {
return $date->format($format);
}
}
/**
* Datetime型を指定した形式で変換する.
*
* @return string
*/
/* 14/11/7 mitsunaga 置換済み
public static function getStrDatetime($date, $pattern ='Y年n月j日'){
if(!$date){
// return '';
return '未設定';
}
return $date->format($pattern);
}*/
/**
* チェックする社員リストと、実施考課の自己評価フラグ.
*/
//配列で渡ってきたIDを元に自己評価が設定されているかチェックする 2014/6/25 nishida
/*
public static function HikoukaSettingCheck($array_list,$kouka){
$self_hyouka_flg = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:SystemSetting')->getSelfHyoukaFlg();
$self_kouka_flg_employee= array();
//システム設定の自己評価フラグが1の時だけ処理を行う
if( $kouka->getSelfKoukaFlg() == 1 && $self_hyouka_flg->getIntValue() == 1 ){
//--------------------自己評価フラグが1の考課表に紐ずいている役職・職群を持つ社員の配列を取得する-------------------------
// //自己評価フラグが1の考課表のIDを配列で取得
$kouka_table = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:KoukaTable')->findSelfKoukaTable($kouka->getId());
if(isset($kouka_table)){
//自己評価フラグが1の考課表を持つ、役職職群オブジェクトを取得
$yakusyoku_syokugun_list = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:YakusyokuSyokugun')->findByTableIds($kouka->getId(),$kouka_table);
}
if(isset($yakusyoku_syokugun_list)){
foreach($yakusyoku_syokugun_list as $ys){
//自己評価フラグが1の考課表を持つ、役職職群オブジェクトから社員の配列を取得
//$self_kouka_flg_employee[] = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Employee')->findByYakusyokuSyokugun($ys->getYakusyokuId(),$ys->getSyokugunId());
//var_dump(self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Employee')->findByYakusyokuSyokugun($ys->getYakusyokuId(),$ys->getSyokugunId()));
$self_kouka_flg_employee = array_merge($self_kouka_flg_employee, self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Employee')->findByYakusyokuSyokugun($ys->getYakusyokuId(),$ys->getSyokugunId()));
}
}
//------------------------------------------------------------------------------------------------------------------
//一致するものだけを摘出
return array_intersect($array_list,$self_kouka_flg_employee);
}else{
return $array = array();
}
}*/
/**
* 2014/7/2 mitsunaga メールが送信できるかどうかの判定.
*/
public static function canSendMail(\Kzl\JinjiKoukaBundle\Entity\Employee $emp)
{
// 社員有+メールありなら送信可能
// return (null != $emp && $emp->getMail());
if (!$emp || !$emp->getMail()) {
return false;
}
// システム設定「送信チェックを行う」 + メール送信チェック結果NG なら送信不可
if (self::getSystemManager()->doMailCheck() && $emp->getMailResult() == \Kzl\JinjiKoukaBundle\Repository\EmployeeRepository::MAIL_RESULT_WAIT) {
return false;
}
return true;
}
/**
* 考課者かどうか.
*/
public static function isKoukaPerson(\Kzl\JinjiKoukaBundle\Entity\Employee $emp, \Kzl\JinjiKoukaBundle\Entity\KoukaEmployee $kEmp)
{
if (!$emp) {
return false;
}
// 1)考課者かどうか(社員=考課者設定 and 考課用社員データ=考課者設定)= true
return $emp->getKoukaFlg() && ($kEmp && $kEmp->getKoukaFlg());
}
/**
* 自己評価対象の考課対象者かどうか.
*/
public static function isSelfKoukaEmployee(\Kzl\JinjiKoukaBundle\Entity\Employee $emp, \Kzl\JinjiKoukaBundle\Entity\KoukaEmployee $kEmp, array $tables = null)
{
if (!$emp) {
return false;
}
// 1)考課対象者かどうか(社員=考課対象者設定 and 考課用社員データ=考課対象者設定)= true
if (!$emp->getHikoukaFlg() || !($kEmp && $kEmp->getHikoukaFlg())) {
return false;
}
// 2)自己評価を行うかどうか
// TODO:引数が渡されない場合は取得処理を行うように変更したい
if (!self::doSelfKouka($kEmp, $tables)) {
return false;
}
return true;
}
/**
*14/08/11 sakamoto
* システム設定、考課 個人目標を「行う」かどうか.
*/
public static function doKoukaAimToKouka($kouka = null)
{
if (!$kouka) {
$kouka = self::getUnLockedKouka();
}
// 1)システム設定=自己評価「行う」か
if (!self::getSystemManager()->doKoukaAim()) {
return false;
}
// 2)考課=自己評価「行う」か
// 2017/5/1 kawaguchi kouka が取得できない(1レコードもない場合は、システム設定で判定)
if ($kouka) {
return $kouka->getAimFlg();
}
// ここまでくればtrue(システム設定だけで判定となる)
return true;
}
/**
*14/07/07 sakamoto
* システム設定、考課 共に自己評価「行う」かどうか.
*/
public static function doSelfKoukaToKouka($kouka = null)
{
if (!$kouka) {
$kouka = self::getUnLockedKouka();
}
// 1)システム設定=自己評価「行う」か
if (!self::getSystemManager()->doSelfKouka()) {
return false;
}
// 2)考課=自己評価「行う」か
// 14/12/4 mitsunaga 考課実施中以外の場合
// return $kouka->getSelfKoukaFlg();
return $kouka && $kouka->getSelfKoukaFlg();
}
/**
* 自己評価を行う考課対象者かどうか.
*
* @param array $tables 対象考課表(指定があれば)
*
* @return bool
*
* 14/07/07 sakamoto システム設定、考課の判定を切り出し
*/
public static function doSelfKouka(\Kzl\JinjiKoukaBundle\Entity\KoukaEmployee $kEmp, array $tables = null)
{
// システム設定、考課 供に自己評価「行う」か
// * 14/07/07 sakamoto システム設定、考課の判定を切り出し
if (!self::doSelfKoukaToKouka($kEmp->getKouka())) {
return false;
}
// 考課対象者の考課表設定を取得
if ($tables && is_array($tables)) {
$koukaTable = $tables;
} elseif ($kEmp->getKoukaTables() !== false) {
// 2017/4/28 mitsunaga koukaEmployeeからの取得
$koukaTable = $kEmp->getKoukaTables();
} else {
$koukaTable = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:KoukaTable')->findByKoukaEmployee($kEmp);
if (!$koukaTable) {
return false;
}
}
$ret = false;
foreach ($koukaTable as $t) {
//if($kEmp->getEmployeeId() == 4) var_dump($t);
// 複数考課表でもいずれかが「自己評価を行う」になっていればtrue
if ($t->getSelfKoukaFlg()) {
$ret = true;
}
}
return $ret;
}
/**
* 自己評価を行う考課対象者かどうか(鈴鹿医療 実績用).
*
* @return bool
*/
public static function doSelfSeeds()
{
// システム設定 自己評価「行う」か
return self::getSystemManager()->doSelfKouka();
}
/**
* 個人目標を行う.
*
* @param array $tables
*
* @return bool
*/
public static function doAim(\Kzl\JinjiKoukaBundle\Entity\KoukaEmployee $kEmp, array $tables = null)
{
// システム設定、考課 供に個人目標「行う」か
// // 15/02/26 sakamoto Koukaオブジェクトを渡す
// if(!self::doKoukaAimToKouka()) return false;
if (!self::doKoukaAimToKouka($kEmp->getKouka())) {
return false;
}
// 考課対象者の考課表設定を取得
if ($tables && is_array($tables)) {
$koukaTable = $tables;
} else {
$koukaTable = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:KoukaTable')->findByKoukaEmployee($kEmp);
if (!count($koukaTable)) {
return false;
}
// if(!$koukaTable) return false;
}
$ret = false;
foreach ($koukaTable as $t) {
//if($kEmp->getEmployeeId() == 4) var_dump($t);
// 複数考課表でもいずれかが「個人目標」になっていればtrue
if ($t->getAimFlg()) {
$ret = true;
}
}
return $ret;
}
/**
* 社員のログイン方法を返す.
*
* @return int
*/
public static function getLoginKind(\Kzl\JinjiKoukaBundle\Entity\Employee $emp)
{
$systemLoginSetting = self::getSystemManager()->getLoginSetting();
// 2015/7/1 start kawaguchi キシヤ様でかつMBOシステムならID/PWD方式
if (self::getSystemManager()->isSystemKishiya() && self::getLayoutType()->isMbo()) {
return self::LOGIN_ID_PASS;
}
// 2015/7/1 end
switch ($systemLoginSetting) {
case self::LOGIN_BOTH:
// ログイン方式併用なら社員の設定により判断
// var_dump($emp->getLoginSetting());
return $emp->getLoginSetting();
case self::LOGIN_ONE_TIME:
case self::LOGIN_ID_PASS:
// そのまま返す
return $systemLoginSetting;
default:
// まず無いはずだがいずれでもなければデフォルト値
return self::LOGIN_ONE_TIME;
}
}
/** TODO: そのうちEmployeeEntityへ移植
* IDパスワード方式で、IDorパスワードが登録されていない.
*/
public static function isLoginKindIdPassAndHasNoDatas(\Kzl\JinjiKoukaBundle\Entity\Employee $emp)
{
if (self::LOGIN_ID_PASS == self::getLoginKind($emp)) {
if (!$emp->getLoginId() || !$emp->getPassword()) {
return true;
}
}
return false;
}
/** 2014/7/4 mitsunaga
* 数値ならtrue.
*
* @param type $subject
*/
public static function isNumeric($subject)
{
return self::isMatch('/^\d+$/', $subject);
}
/** 2014/7/4 mitsunaga
* Regex一致判定.
*
* @param string $pattern
* @param type $subject
*/
private static function isMatch($pattern, $subject)
{
return 1 === preg_match($pattern, $subject);
}
/** 2014/7/7 mitsunaga
* カラム名からオブジェクトの値を取得。カラム名からゲッター名が正しく求められなかった場合、存在しないカラムの場合などはnullを返す.
*/
public static function getObjectsValueByColumnName($obj, $colName)
{
// データ取得メソッド名取得
$getter = self::createGetterStrByColumnName($colName);
// 取得失敗
if (!$getter) {
return null;
}
// メソッド存在せず
if (!method_exists($obj, $getter)) {
return null;
}
return $obj->$getter();
}
/** 2014/7/7 mitsunaga
* カラム名からゲッター文字列を推定して取得。(※正しいとは限らない)
* ※'colmun_name'のようなカラム名を想定している.
*
* @param type $colName
*/
private static function createGetterStrByColumnName($colName)
{
return self::createGetterOrSetterStrByColumnName($colName, false);
}
/** 2014/12/9
* カラム名からオブジェクトの値を設定。カラム名からゲッター名が正しく求められなかった場合、存在しないカラムの場合などはnullを返す.
*
* @author mitsunaga
*/
public static function setObjectsValueByColumnName($obj, $colName, $value)
{
// データ取得メソッド名取得
$setter = self::createSetterStrByColumnName($colName);
// 取得失敗
if (!$setter) {
return false;
}
// メソッド存在せず
if (!method_exists($obj, $setter)) {
return null;
}
return $obj->$setter($value);
}
/** 2014/12/9
* カラム名からセッター文字列を推定して取得。(※正しいとは限らない)
* ※'colmun_name'のようなカラム名を想定している.
*
* @author mitsunaga
*
* @param type $colName
*/
private static function createSetterStrByColumnName($colName)
{
return self::createGetterOrSetterStrByColumnName($colName, true);
}
/**
* 14/12/9 共通化.
*
* @author mitsunaga
*
* @param type $colName
* @param type $isSetter
*
* @return string
*/
private static function createGetterOrSetterStrByColumnName($colName, $isSetter)
{
if (!$colName) {
return '';
}
// ex. 'col_naMe'
// すべて小文字に 'col_name'
$colName = strtolower($colName);
// 「_」で分割 'col','name'
$names = explode('_', $colName);
// 頭文字を大文字にし、 'Col','Name'
// 「set/get」をつけて結合 'getColName'
$name = $isSetter ? 'set' : 'get';
foreach ($names as $value) {
$name .= ucfirst($value);
}
return $name;
}
private static $weekjpArray = ['日', '月', '火', '水', '木', '金', '土'];
/** 2014/7/8 mitsunaga
* 日付型を日本語の曜日名を添えた文字列で取得
* 07月09日(水) 13:41 など.
*/
public static function getDateStrJpWeeks($date)
{
if (!$date) {
return '';
}
$str = date_format($date, 'm月d日');
$weekNum = date_format($date, 'w');
$str .= '('.self::$weekjpArray[$weekNum].')';
$str .= date_format($date, ' H:i');
return $str;
}
/**
* Get a user from the Security Context.
*
* @return mixed
*
* @throws \LogicException If SecurityBundle is not available
*
* @see Symfony\Component\Security\Core\Authentication\Token\TokenInterface::getUser()
*/
public static function getUser()
{
// if (!$this->container->has('security.context')) {
// if (!self::$container->has('security.context')) {
// throw new \LogicException('The SecurityBundle is not registered in your application.');
// }
// if (null === $token = self::$container->get('security.context')->getToken()) {
// return;
// }
// if (!is_object($user = $token->getUser())) {
// return;
// }
if (!self::$container->has('security.token_storage')) {
throw new \LogicException('The SecurityBundle is not registered in your application.');
}
if (null === $token = self::$container->get('security.token_storage')->getToken()) {
return;
}
if (!is_object($user = $token->getUser())) {
// e.g. anonymous authentication
return;
}
return $user;
}
/** 2014/7/8 mitsunaga
* 社員コードソート.
*
* @param type $a
* @param type $b
*/
public static function sortByEmployeeCd($a, $b)
{
// 14/11/21 mitsunaga トリムナシの文字列を利用
// return strnatcmp($a->getEmployeeCd(), $b->getEmployeeCd());
return strnatcmp($a->getEmployeeCdWithoutTrim(), $b->getEmployeeCdWithoutTrim());
}
// public static function getKbnObject(){
//
// //社員区分を取得
// $resilt = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Kbn')->getAllKbnDataArray();
//
// //データの並べ替えを行う
// $array = array();
//
// foreach ($resilt as $key => $data){
//
// $array[$key+1] =$data;
// }
//
// return $array;
//
// }
/** 2014/7/18 mitsunaga User:PersonRegistControllerより移植
* 自己評価かどうか.
*/
public static function isSelfKouka($koukaPerson, $koukaEmployee)
{
if ($koukaPerson->getKoukaId() != $koukaEmployee->getKoukaId()) {
return false;
}
if ($koukaPerson->getEmployeeId() != $koukaEmployee->getEmployeeId()) {
return false;
}
return true;
}
/** 2014/7/22 mitsunaga User:BaseControllerより
* 代理入力かどうか.
*/
public static function isDairi()
{
$req = self::getRequest();
return false !== strpos($req->attributes->get('_route'), 'dairi_')
|| $req->get('dairiPersonId');
}
/** 14/7/22 mitsunaga
* controllerクラスより.
*
* @param type $message
* @param \Exception $previous
*
* @return \Kzl\JinjiKoukaBundle\Common\NotFoundHttpException
*/
public static function createNotFoundException($message = 'Not Found', \Exception $previous = null)
{
return new NotFoundHttpException($message, $previous);
}
/** 14/7/22 mitsunaga
* 現在日を取得.
*
* @return \DateTime
*/
public static function getToday($isOnlyDate = true)
{
$today = new \DateTime();
if ($isOnlyDate) {
self::getOnlyDate($today);
}
return $today;
}
/**
* 14/10/29 mitsunaga 時刻の切捨て処理.
*
* @return type
*/
public static function getOnlyDate(\DateTime $dateTime)
{
return $dateTime->setTime(0, 0, 0);
}
/**
* 14/11/5 mitsunaga 現在年(西暦).
*/
public static function getNowYear()
{
return date('Y');
}
/**
* 0埋めするメソッド コード登録設定.
*/
public static function getburyZero($mst, $target)
{
if ($mst == self::KEY_YAKUSYOKU) {
$codeSettings = JinjiKoukaStatic::getSystemManager()->getYakusyokuCdSetting();
}
if ($mst == self::KEY_SYOKUGUN) {
$codeSettings = JinjiKoukaStatic::getSystemManager()->getSyokugunCdSetting();
}
if ($mst == self::KEY_DIVISION) {
$codeSettings = JinjiKoukaStatic::getSystemManager()->getDivisionCdSetting();
}
if ($mst == self::KEY_EMPLOYEE) {
$codeSettings = JinjiKoukaStatic::getSystemManager()->getEmployeeCdSetting();
}
// 14/11/21 mitsunaga 一度トリム
$target = trim($target);
$strNum = mb_strlen($target);
// TODO: monodonminiでコードでリレーションするようになったため一旦コメントアウト
// if ($codeSettings['KIND'] == 1) {
// if ($codeSettings['MAX'] > $strNum) {
// //数字のみだった場合は、0か空白で埋める
// if (self::isNumeric($target)) {
// if ($codeSettings['BURY'] == 1) { //0埋め
// $target = str_pad($target, $codeSettings['MAX'], '0', STR_PAD_LEFT);
// } else { //半角スペース埋め
// $target = str_pad($target, $codeSettings['MAX'], ' ', STR_PAD_LEFT);
// }
// }
// }
// }
return $target;
}
/**
* 役職/職群/所属/社員を全て取得して、0埋めして返す.
*/
public static function getCodeConvertMst($mst)
{
//配列初期化
$target = [];
//役職
if ($mst == self::KEY_YAKUSYOKU) {
$target = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Yakusyoku')->findAll();
if ($target) {
foreach ($target as $value) {
// $yakusyokuCd = $value->getYakusyokuCd();
$yakusyokuCd = $value->getYakusyokuCdWithoutTrim();
$yakusyokuCd = ltrim($yakusyokuCd, '0');
$yakusyokuCd = ltrim($yakusyokuCd, ' ');
$cd = self::getburyZero(self::KEY_YAKUSYOKU, $yakusyokuCd);
$value->setYakusyokuCd($cd);
}
}
}
//職群
if ($mst == self::KEY_SYOKUGUN) {
$target = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Syokugun')->findAll();
if ($target) {
foreach ($target as $value) {
// $syokugunCd = $value->getSyokugunCd();
$syokugunCd = $value->getSyokugunCdWithoutTrim();
$syokugunCd = ltrim($syokugunCd, '0');
$syokugunCd = ltrim($syokugunCd, ' ');
$cd = self::getburyZero(self::KEY_SYOKUGUN, $syokugunCd);
$value->setSyokugunCd($cd);
}
}
}
//所属
if ($mst == self::KEY_DIVISION) {
$target = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Department')->findAll();
if ($target) {
foreach ($target as $value) {
$divisionCd = $value->getDivisionCdWithoutTrim();
$divisionCd = ltrim($divisionCd, '0');
$divisionCd = ltrim($divisionCd, ' ');
$cd = self::getburyZero(self::KEY_DIVISION, $divisionCd);
$value->setDivisionCd($cd);
}
}
}
//社員
if ($mst == self::KEY_EMPLOYEE) {
$target = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Employee')->findAll();
if ($target) {
foreach ($target as $value) {
// $employeeCd = $value->getEmployeeCd();
// $employeeCd = $value->getEmployeeCd();
$employeeCd = $value->getEmployeeCdWithoutTrim();
$employeeCd = ltrim($employeeCd, '0');
$employeeCd = ltrim($employeeCd, ' ');
$cd = self::getburyZero(self::KEY_EMPLOYEE, $employeeCd);
$value->setEmployeeCd($cd);
}
}
}
return $target;
}
/**
* セレクト年月取得.
*
* @return int
*/
public static function getSelectdata()
{
$now = (int) date('Y');
$kako = date('Y') - 80;
$mirai = date('Y') + 11;
//初期値
$dateArray['default_toshi'] = (int) date('Y');
$dateArray['default_tuki'] = 1;
//年
for ($kako; $kako < $now; ++$kako) {
$dateArray['toshi'][] = $kako;
}
for ($now + 1; $now < $mirai; ++$now) {
$dateArray['toshi'][] = $now;
}
//月
for ($i = 1; $i <= 12; ++$i) {
$dateArray['tuki'][] = $i;
}
return $dateArray;
}
/**
* getFamilydefaultData
* 家族構成の初期値を取得.
*/
public static function getFamilydefaultData()
{
//これも変更 使わない
$data = JinjiKoukaStatic::getSelectdata();
//続柄
$array[EmployeeRepository::FAMILY_RELATIONSHIP] = EmployeeRepository::$RELATIONSHIP;
//性別
$array[EmployeeRepository::FAMILY_SEX] = EmployeeRepository::$SEX;
//年
$array[EmployeeRepository::FAMILY_NEN] = $data['toshi'];
//月
$array[EmployeeRepository::FAMILY_GETU] = $data['tuki'];
//日
$day = [];
for ($i = 1; $i < 31; ++$i) {
$day[] = $i;
}
$array[EmployeeRepository::FAMILY_HI] = $day; //もちろん変更する
//扶養
$array[EmployeeRepository::FAMILY_DEPENDENT] = EmployeeRepository::$DEPENDENT;
return $array;
}
/**
* 添付ファイル配列のキー : 顔写真
*/
const TEMP_FILE_KEY_PHOTO = 'photo';
/**
* 添付ファイル配列のキー : 添付ファイル.
*/
const TEMP_FILE_KEY_TEMP = 'temp';
/**
* 社員にぶら下がる顔写真・添付ファイルをそれぞれ取得
* 配列キー:'photo' 顔写真 ・ 'temp' 添付ファイル.
*/
public static function getEmployeesTempFiles($employeeId)
{
$tableName = \Kzl\JinjiKoukaBundle\Repository\EmployeeRepository::TABLE_NAME;
$EmployeeNoPhoto = \Kzl\JinjiKoukaBundle\Repository\FileAttachmentRepository::EMPLOYEE_NO_PHOTO;
// 社員にぶら下がるデータを全件取得
$files = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:FileAttachment')->findByRelation($tableName, $employeeId);
// 顔写真・添付ファイルにわけてそれぞれ取得
$list = [
self::TEMP_FILE_KEY_PHOTO => null,
self::TEMP_FILE_KEY_TEMP => [],
];
foreach ($files as $file) {
if ($file->getNo() == $EmployeeNoPhoto) {
$list[self::TEMP_FILE_KEY_PHOTO] = $file;
} else {
$list[self::TEMP_FILE_KEY_TEMP][$file->getNo()] = $file;
}
}
return $list;
}
/**
* 登録されているファイルを取得して最新順にソート.
*
* @param type $employeeId
*/
public static function getEmployeesTempFilesSort($employeeId)
{
//ファイルの取得
$files = self::getEmployeesTempFiles($employeeId);
//最新順にソート
if ($files[self::TEMP_FILE_KEY_TEMP]) {
rsort($files[self::TEMP_FILE_KEY_TEMP]);
}
return $files;
}
/**
郵便番号から住所検索
*
*
@param int $zip
* @return mixed
*/
public static function getAddress($postal)
{
//郵便番号 $postal
//ディレクトリパス
$path = self::getDataDir();
$csvfile = $path.'/postal/'.'KEN_ALL.CSV';
$postal = mb_convert_kana($postal, 'a', 'utf-8');
$postal = str_replace(['-', 'ー'], '', $postal);
$tmp = file_get_contents($csvfile);
$tmp = mb_convert_encoding($tmp, 'utf-8', 'sjis-win');
$fp = tmpfile();
fwrite($fp, $tmp);
rewind($fp);
setlocale(LC_ALL, 'ja_JP.UTF-8');
$result = [];
while (($data = fgetcsv($fp, 0, ',')) !== false) {
if ($data[2] == $postal) {
$result = $data;
break;
}
}
fclose($fp);
header('Content-type:text/html; charset=utf-8');
if (!empty($result)) {
$pref = $result[6];
$city = $result[7];
$town = $result[8];
return '['.'"'.$pref.'"'.','.'"'.$city.'"'.','.'"'.$town.'"'.']';
} else {
return null;
}
}
/**
* 15/3/3.
*
* @author mitsuanga
*
* @return mixed
*/
public static function arrayLast(array $array)
{
return end($array);
}
/**
* tenantCdの自動セット設定
* @param Entity $targetEntity
* @todo 置き場所検討
* @return mixed
*/
public static function setTenantCd($targetEntity)
{
$reflect = new \ReflectionClass($targetEntity);
if ($reflect->implementsInterface(TenantAwareInterface::class)) {
if ($targetEntity->getTenantCd() === null) {
$tenantCd = KzlFrameworkStatic::getTenantManager()->getTenantCd();
$targetEntity->setTenantCd($tenantCd);
}
}
}
/**
* 15/6/4 (TimesStaticより)作成・更新日時の設定.
*
* @author mitsunaga
*
* @param mixed $obj
*/
public static function setCreatedAtAndUpdatedAt($obj)
{
$now = new \DateTime();
// 新規の時は作成日を設定
if (method_exists($obj, 'setCreatedAt') && method_exists($obj, 'getCreatedAt')) {
if (null === $obj->getCreatedAt()) {
$obj->setCreatedAt($now); //var_dump($now);
}
}
// 更新日を設定
if (method_exists($obj, 'setUpdatedAt')) {
$obj->setUpdatedAt($now);
}
}
/**
* 更新者の設定.
*
* @author mitsunaga 2017/10/27
*
* @param mixed $obj
*/
public static function setCreatedAndUpdatedUserId($obj, $createdColName = 'CreatedUserId', $updatedColName = 'UpdatedUserId')
{
$userId = self::getUser()->getId();
// 新規の時は作成日を設定
$getMethod = 'get'.$createdColName;
$setMethod = 'set'.$createdColName;
if (method_exists($obj, $getMethod) && method_exists($obj, $setMethod)) {
if (null === $obj->$getMethod()) {
$obj->$setMethod($userId);
}
}
// 更新日を設定
$setMethod = 'set'.$updatedColName;
if (method_exists($obj, $setMethod)) {
$obj->$setMethod($userId);
}
}
/**
* 15/6/5
* Entityの配列を渡して一括削除.
*
* @author mitsunaga
* ※本当はentitymanagerを拡張したい
*
* @param array $list 対象entityの配列
*/
public static function removeEntities(\Doctrine\ORM\EntityManager $em, $list)
{
if (!count($list)) {
return;
}
foreach ($list as $entity) {
$em->remove($entity);
}
$em->flush();
}
/**
* キーを指定して配列から値取得.
*
* @param array $array
* @param mixed $key
* @param mixed $nosetValue
*
* @return mixed
*/
public static function getValueByArray($array, $key, $nosetValue = null)
{
if (isset($array[$key])) {
return $array[$key];
} else {
return $nosetValue;
}
}
/**
* 次のDNoを設定する
* flush実行時にdNoが発行されます.
*
* @param $obj
*
* @return void
*/
public static function setNewDNo($obj, $dNoName = 'dNo')
{
// 新規の時は作成日を設定
$setMethod = 'set'.$dNoName;
$getMethod = 'get'.$dNoName;
if (method_exists($obj, $setMethod)) {
if ($obj->$getMethod() === null) {
$repository = self::getDoctrine()->getManager()->getRepository(get_class($obj));
// BaseRepositoryにgetNextDNoが実装されているので継承しているか確認する
if (!is_subclass_of($repository, BaseRepository::class)) {
throw new \LogicException('BaseRepositoryを継承してください。');
}
// 次のDNoを取得
$nextDNo = $repository->getNextDNo($dNoName);
$obj->$setMethod($nextDNo);
}
}
}
/**
* マルチテナント対応.
*
* @return TenantManager
*/
public static function getTenantManager()
{
return self::$container->get('kzl_monodon_mini.services.tenant_manager');
}
/**
* 文字列をキャメル形式に変換する.
*
* @param string $text
*
* @return string
*/
public static function camelize($text)
{
return preg_replace_callback('/(^|_|\.)+(.)/', function ($match) { return ('.' === $match[1] ? '_' : '').strtoupper($match[2]); }, $text);
}
// -------backup
// //
//
// /**
// * 項目名のバリデーション情報を取得する
// *
// */
// public static function getItemNameMaxLengthArray()
// {
// $array = array();
//
// $target = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:ItemName')->findAll();
// if($target){
// foreach($target as $key => $value){
//
// if($value->getMaxLength() != null){
// $array[$value->getItemKey()] = $value->getMaxLength();
// }else{
// $array[$value->getItemKey()] = 100;
// }
// }
// return $array;
// }
// return $array;
// }
// public static function getConstraints(){
// if(null === self::$_constrains){
// self::$_constrains = array(
// //メール
// 'mail' => new Collection(array(
// 'mail' => new Assert\Email(array(
// // 'message' =>'メールアドレスが正しくありません',
// 'message' =>'有効な'.JinjiKoukaStatic::getTrans('メールアドレス').'ではありません。',
// // 'checkMX'=>true,
// ))
// )),
// // コード
// 'code' => new Collection(array(
// 'code' => array(
// new Assert\NotBlank(array(
// // 'message' =>'コードは必須です',
// 'message' =>'コードは必須です。',
// )),
// new Assert\Length(array(
// // 'maxMessage' =>'文字数が多すぎます。 '.self::CODE_MAX.'文字以内にしてください ',
// 'maxMessage' =>'文字数が多すぎます。 '.self::CODE_MAX.'文字以内でなければなりません。
// ',
// 'max'=>self::CODE_MAX,
// )),
// )
// )),
// // 名前
// 'name' => new Collection(array(
// 'name' => array(
// new Assert\NotBlank(array(
// // 'message' =>'名前は必須です',
// 'message' =>'名前は必須です。',
// )),
// new Assert\Length(array(
// // 'maxMessage' =>'文字数が多すぎます。 '.self::NAME_MAX.'文字以内にしてください',
// 'maxMessage' =>'文字数が多すぎます。 '.self::NAME_MAX.'文字以内でなければなりません。',
// 'max'=>self::NAME_MAX,
// )),
// )
// )),
//
// // ふりがな
// 'kana' => new Collection(array(
// 'kana' => array(
// new Assert\Regex(array(
// 'pattern' => '/^([ \t\r\nぁ-んー])+$/u',
// 'message' => 'ひらがなで入力して下さい。',
// )),
// new Assert\Length(array(
// 'maxMessage' =>'文字数が多すぎます。 '.self::KANA_MAX.'文字以内でなければなりません。',
// 'max'=>self::KANA_MAX,
// )),
// )
// ))
//
// );
// }
// return self::$_constrains;
// }
// public static function validateCode( $value ){
// $validator = self::createValidator();
// $constraints = self::getConstraints();
//
// $validations = $validator->validateValue(
// array('code' => $value ), /*対象*/
// $constraints['code'] /*バリデーション設定*/
// );
//
// return $validations;
// }
// public static function validateName( $value ){
// $validator = self::createValidator();
// $constraints = self::getConstraints();
//
// $validations = $validator->validateValue(
// array('name' => $value ), /*対象*/
// $constraints['name'] /*バリデーション設定*/
// );
//
// return $validations;
// }
//
// public static function validateKana( $value ){
//
// //全角カナ、半角カナをひらがなに変換 2014/6/9 追加
// $value = mb_convert_kana($value, 'Hc','UTF-8');
//
// $validator = self::createValidator();
// $constraints = self::getConstraints();
// //
// $validations = $validator->validateValue(
// array('kana' => $value ), /*対象*/
// $constraints['kana'] /*バリデーション設定*/
// );
//
// return $validations;
// }
// 2015/11/18 mitsunaga
// TODO: Employeeへ移植
// // TODO: 作り直し
// /**
// * 年収の自動計算
// */
// public static function calculation($json){
//
// //値が空なら計算しない
// if(!$json) return false;
// //JSON形式を配列に変換
// $array = self::getArrayByJson($json);
//
// $yearArray = array();
// foreach($array as $key => $value){
// if(!in_array($value[EmployeeRepository::AI_KEY_STOSHI], $yearArray))
// $yearArray[] = $value[EmployeeRepository::AI_KEY_STOSHI];
// }
// $min = (int)min($yearArray); //最も古い西暦
// $max = (int)max($yearArray); //最も新しい西暦
// if($max < (int)date("Y")) $max = (int)date("Y");
// $count = (int)$min;
//
// for($count ; $count<= $max; $count++){
// $year[] = $count;
// }
//
// //年収が登録されている項目には、年収を入れる
// $nen = self::nensyu($array,$year);
// //給与 14/11/5 mitsunaga 改修済み
// $kyuyo = self::kyuyo($array);
// //$kyuyo = self::kyuyo($array,$year);
// //手当て 14/11/5 mitsunag 改修済
//// $teate = self::teate($array,$year);
// $teate = self::teate($array);
// //賞与
// $bornus = self::bornus($array,$year);
//
// //年収として計算する、区分の年収があれば、年収を使う。なければ、給与・手当・賞与の合計を返す
// foreach($year as $key => $value){
// //初期化
// $annualIncome[$value] = 0;
// //年収があれば、年収を格納
// if($nen[$value] !== 0){
// $annualIncome[$value] = $nen[$value];
// }else{
// $nensyu = isset($kyuyo[$value]) ? $kyuyo[$value] : 0;
// $nenTeate = isset($teate[$value]) ? $teate[$value] : 0;
// $nenBornus = isset($bornus[$value]) ? $bornus[$value] : 0;
//// $annualIncome[$value] = $kyuyo[$value]+$teate[$value]+$bornas[$value];
// $annualIncome[$value] = $nensyu + $nenTeate + $nenBornus;
// }
//
// }
//
// return $annualIncome;
// }
//
// //年収
// private static function nensyu($array,$year){
//
// foreach($year as $key => $value){
// foreach($array as $keys => $values){
//
// $nenArray[$value]=0;
// if($value == $values[EmployeeRepository::AI_KEY_STOSHI] && $values['KBN'] == 4){
// $nenArray[$value] = $values['MONEY'];
// break;
// }
// }
// }
// return $nenArray;
// }
//
// /**
// * 14/11/5 mitsunaga 開始年月の昇順でソート
// * @param type $a
// * @param type $b
// * @return int
// */
// public static function sortAnnualIncome($a, $b){
// $aStYear = $a[EmployeeRepository::AI_KEY_STOSHI];
// $bStYear = $b[EmployeeRepository::AI_KEY_STOSHI];
// $aStMonth = $a[EmployeeRepository::AI_KEY_STUKI];
// $bStMonth = $b[EmployeeRepository::AI_KEY_STUKI];
// if($aStYear != $bStYear){
// return ( $aStYear < $bStYear ) ? -1 : 1;
// } else {
// return ( $aStMonth < $bStMonth ) ? -1 : 1;
// }
// return 0;
// }
// /**
// * 14/11/5 mitsunaga 給与計算(改修)
// * @param type $annualIncomes
// * @return type
// */
// public static function kyuyo($annualIncomes){
// // 1) 終了年月の配列を作成
// // TODO: 切り出し
// // $array[開始年-月] = array( 'y' => year, 'm' => month );
// $edYearMonthArray = array();
// $beforeYm = '';
//
// // 開始年月でソート
// uasort($annualIncomes, array("self", 'sortAnnualIncome'));
// foreach ($annualIncomes as $ai) {
// // 給与のみ
// if($ai[EmployeeRepository::AI_KEY_KBN] != EmployeeRepository::AI_KBN_SALARY) continue;
//
// // 開始・終了年を保持
// $stMonth = $ai[EmployeeRepository::AI_KEY_STUKI];
// $stYear = $ai[EmployeeRepository::AI_KEY_STOSHI];
// // 開始日がない値はエラーのため無視
// if(!$stMonth || !$stYear) continue;
//
// // 前の開始年月があれば、終了年月を設定する
// if($beforeYm){
// // 終了月の取得
// // 開始月 - 1
// $beforeEdMonth = $stMonth - 1;
// if($beforeEdMonth == 0){
// // 開始月 = 0になったら、前の給与は前年末まで
// $beforeEdMonth = 12;
// $beforeEdYear = $stYear - 1;
// }else{
// // 開始月 = 0で無ければ、次給与開始が同じ年
// $beforeEdYear = $stYear;
// }
//
// // 1つ前の給与の終了年月を設定
// $edYearMonthArray[$beforeYm] = array(
// 'y' => $beforeEdYear,
// 'm' => $beforeEdMonth,
// );
// }
// // 前の開始年月を保持
// $beforeYm = $stYear.'-'.$stMonth;
// }
// // 一番最後のものは今年の末まで継続する
// if($beforeYm){
// $edYearMonthArray[$beforeYm] = array(
// 'y' => self::getNowYear(),
// 'm' => 12,
// );
// }
// // 年単位の計算処理
// $yearsKyuyoArray = array();
// foreach ($annualIncomes as $ai) {
// // 給与のみ
// if($ai[EmployeeRepository::AI_KEY_KBN] != EmployeeRepository::AI_KBN_SALARY) continue;
//
// // 開始年月
// $sYear = $ai[EmployeeRepository::AI_KEY_STOSHI];
// $sMonth = $ai[EmployeeRepository::AI_KEY_STUKI];
// // 給与
// $money = $ai[EmployeeRepository::AI_KEY_MONEY];
// // 開始日・給与がない値はエラーのため無視
// if(!$sYear || !$sMonth || null === $money) continue;
//
// // 終了年月の取得。まずないはずだが、取得できなければ無視
// $ym = $sYear.'-'.$sMonth;
// if(!isset($edYearMonthArray[$ym]['y']) || !isset($edYearMonthArray[$ym]['m'])) continue;
// // 終了年月
// $eYear = $edYearMonthArray[$ym]['y'];
// $eMonth = $edYearMonthArray[$ym]['m'];
// if(!$eYear || !$eMonth) continue;
//
// // [年] = 値 の形で値を集計する
// for ($year = $sYear; $year <= $eYear; $year++) {
// // 対象年の手当てを集計して格納
// if(!isset($yearsKyuyoArray[$year])) $yearsKyuyoArray[$year] = 0;
// $yearsKyuyoArray[$year] += self::calcYearsAnnualIncome($year, $sYear, $sMonth, $eYear, $eMonth, $money);
// }
// }
// return $yearsKyuyoArray;
// }
//
// /**
// * annualIncome一行分から、1年の給与・手当・賞与を計算する
// */
// private static function calcYearsAnnualIncome($year, $sYear, $sMonth, $eYear, $eMonth, $money){
// // 1)集計開始月を設定
// $stMonth = self::getAnuualIncomeStMonth($year, $sYear, $sMonth);
//
// // 2)集計終了月を設定
// $edMonth = self::getAnuualIncomeEdMonth($year, $eYear, $eMonth);
//
// // 3) 期間 終了月 - (開始月 - 1) : 開始月も含むため
// $syukeiMonth = $edMonth - ($stMonth - 1);
//
// // 4) 対象年の金額を集計して返す
// return $money * $syukeiMonth;
// }
//
//
// /**
// * 開始年から判定して開始月を取得
// * @param type $ai annual_incomeを配列に変換したもの。
// * @return mixed
// */
// private static function getAnuualIncomeStMonth($year, $sYear, $sMonth){
// // 開始年月が設定されていなければ処理エラー
// if(!$sYear || !$sMonth) throw new \Exception('開始年月がない場合処理不可');
//
// if($sYear == $year){
// // 開始年 = 集計対象年 : 開始月~
// return $sMonth;
// } else {
// // 開始年 != 集計対象年 : 1月~
// return 1;
// }
// }
// /**
// * 終了年から判定して終了月を取得
// * @param type $ai annual_incomeを配列に変換したもの。
// * @return mixed
// */
// private static function getAnuualIncomeEdMonth($year, $eYear, $eMonth){
// // 開始年月が設定されていなければ処理エラー
// if(!$eYear || !$eMonth) throw new \Exception('終了年月がない場合処理不可');
//
// if($eYear == $year){
// // 終了年 = 集計対象年 : ~終了月
// return $eMonth;
// } else {
// // else : ~12月
// return 12;
// }
// }
//
// /**
// * TODO: 社員への移植・調整
// * @param type $annualIncomes
// * @param type $years
// */
// public static function teate($annualIncomes){
// // 構造メモ
// // $years = 年の配列
// // $annualIncome[no] = 値;
//
// // 年間ごとに集計
// $yearsTeateArray = array();
// foreach ($annualIncomes as $ai) {
// // 手当てのみ
// if($ai[EmployeeRepository::AI_KEY_KBN] != EmployeeRepository::AI_KBN_TEATE) continue;
//
// $sYear = $ai[EmployeeRepository::AI_KEY_STOSHI];
// $sMonth = $ai[EmployeeRepository::AI_KEY_STUKI];
// $eYear = $ai[EmployeeRepository::AI_KEY_ETOSHI];
// $eMonth = $ai[EmployeeRepository::AI_KEY_ETUKI];
// // 開始・終了日がない値はエラーのため無視
// if(!$sYear || !$sMonth || !$eYear || !$eMonth) continue;
//
// // [年] = 値 の形で値を集計する
// for ($year = $sYear; $year <= $eYear; $year++) {
//
// // 1)集計開始月を設定
// $stMonth = self::getAnuualIncomeStMonth($year, $sYear, $sMonth);
//
// // 2)集計終了月を設定
// $edMonth = self::getAnuualIncomeEdMonth($year, $eYear, $eMonth);
//
// // 3) 期間 終了月 - (開始月 - 1) : 開始月も含むため
// $syukeiMonth = $edMonth - ($stMonth - 1);
//
// // 4) 対象年の手当てを集計して格納
// if(!isset($yearsTeateArray[$year])) $yearsTeateArray[$year] = 0;
// $yearsTeateArray[$year] += $ai[EmployeeRepository::AI_KEY_MONEY] * $syukeiMonth;
// }
// }
//
// return $yearsTeateArray;
// }
//
// //賞与の計算
// private static function bornus($array,$year){
// //給与の分だけ抜き出す
// foreach($array as $key => $value){
// if($value['KBN'] == 3){
// $bornasArray[$value[EmployeeRepository::AI_KEY_STOSHI]][$value[EmployeeRepository::AI_KEY_STUKI]] = $value['MONEY'];
// }
// }
// foreach($year as $key => $value){
// if(!isset($bornasArray[$value])){
// $bornasArray[$value][1]=0;
// }
// }
// //給与の分だけ抜き出す
// foreach($bornasArray as $key => $value){
// if(!isset($value[EmployeeRepository::Jan])) $bornasArray[$key][EmployeeRepository::Jan] = 0;
// if(!isset($value[EmployeeRepository::Feb])) $bornasArray[$key][EmployeeRepository::Feb] = 0;
// if(!isset($value[EmployeeRepository::Mar])) $bornasArray[$key][EmployeeRepository::Mar] = 0;
// if(!isset($value[EmployeeRepository::Apr])) $bornasArray[$key][EmployeeRepository::Apr] = 0;
// if(!isset($value[EmployeeRepository::May])) $bornasArray[$key][EmployeeRepository::May] = 0;
// if(!isset($value[EmployeeRepository::Jun])) $bornasArray[$key][EmployeeRepository::Jun] = 0;
// if(!isset($value[EmployeeRepository::Jul])) $bornasArray[$key][EmployeeRepository::Jul] = 0;
// if(!isset($value[EmployeeRepository::Aug])) $bornasArray[$key][EmployeeRepository::Aug] = 0;
// if(!isset($value[EmployeeRepository::Sep])) $bornasArray[$key][EmployeeRepository::Sep] = 0;
// if(!isset($value[EmployeeRepository::Oct])) $bornasArray[$key][EmployeeRepository::Oct] = 0;
// if(!isset($value[EmployeeRepository::Nov])) $bornasArray[$key][EmployeeRepository::Nov] = 0;
// if(!isset($value[EmployeeRepository::Dec])) $bornasArray[$key][EmployeeRepository::Dec] = 0;
// //キーのソート
// ksort($bornasArray[$key]);
// }
// //配列を時系列で並べ替え--------------
// ksort($bornasArray);
//
// //$bornasKeep = '';
// $bornas = array();
// $total = array();
// $keepBornas = null;
// foreach($bornasArray as $key => $value){ //西暦ごとにループ
// //登録されているボーナスの数を数える
// $bornasCount = 0;
// $bornasMoney = array();
// foreach($value as $k => $v){
// if($v != 0){
// $bornasCount++;
// $bornasMoney[] = $v;
// $keepBornas = $v;
// }
// }
//
// //1つ登録されている場合、×2する
// if($bornasCount == 1){
// $total[$key] = $bornasMoney[0]*2;
// //2つ以上登録されている場合は、総合計を出す
// }elseif($bornasCount > 1){
// $total[$key] = array_sum($bornasMoney);
// //登録されていない場合、直近の値を取得して×2する
// }elseif($bornasCount < 1){
// $total[$key] = 0;
// if($keepBornas) $total[$key] = $keepBornas*2;
// }
// }
// return $total;
// }*/
//給与の計算
/* 2014/11/5 mitsunaga backup
private static function kyuyo($array,$year){
//給与の分だけ抜き出す
foreach($array as $key => $value){
if($value['KBN'] == 1){
$kyuyoArray[$value[EmployeeRepository::AI_KEY_STOSHI]][$value[EmployeeRepository::AI_KEY_STUKI]] = $value['MONEY'];
}
}
foreach($year as $key => $value){
if(!isset($kyuyoArray[$value])){
$kyuyoArray[$value][1]=null;
}
}
//給与の分だけ抜き出す
foreach($kyuyoArray as $key => $value){
if(!isset($value[EmployeeRepository::Jan])) $kyuyoArray[$key][EmployeeRepository::Jan] = null;
if(!isset($value[EmployeeRepository::Feb])) $kyuyoArray[$key][EmployeeRepository::Feb] = null;
if(!isset($value[EmployeeRepository::Mar])) $kyuyoArray[$key][EmployeeRepository::Mar] = null;
if(!isset($value[EmployeeRepository::Apr])) $kyuyoArray[$key][EmployeeRepository::Apr] = null;
if(!isset($value[EmployeeRepository::May])) $kyuyoArray[$key][EmployeeRepository::May] = null;
if(!isset($value[EmployeeRepository::Jun])) $kyuyoArray[$key][EmployeeRepository::Jun] = null;
if(!isset($value[EmployeeRepository::Jul])) $kyuyoArray[$key][EmployeeRepository::Jul] = null;
if(!isset($value[EmployeeRepository::Aug])) $kyuyoArray[$key][EmployeeRepository::Aug] = null;
if(!isset($value[EmployeeRepository::Sep])) $kyuyoArray[$key][EmployeeRepository::Sep] = null;
if(!isset($value[EmployeeRepository::Oct])) $kyuyoArray[$key][EmployeeRepository::Oct] = null;
if(!isset($value[EmployeeRepository::Nov])) $kyuyoArray[$key][EmployeeRepository::Nov] = null;
if(!isset($value[EmployeeRepository::Dec])) $kyuyoArray[$key][EmployeeRepository::Dec] = null;
//キーのソート
ksort($kyuyoArray[$key]);
}
//配列を時系列で並べ替え--------------
ksort($kyuyoArray);
$kyuyoKeep = '';
$valueNulls = array();
foreach($kyuyoArray as $key => $value){
$valueNulls[$key] = true;
foreach($value as $keys => $num){
//値がnullでなければ、格納
if($num !== null){
$kyuyoKeep = $num;
$valueNulls[$key] = false;
}
//値がnullかつ、保持している値があれば、nullを上書き
if($num === null && $kyuyoKeep != ''){
$kyuyoArray[$key][$keys] = $kyuyoKeep;
}
}
}
//---------------------------------------------------------処理変更したい
$first_int = 0;
foreach($kyuyoArray as $key => $value){
foreach($value as $keys => $num){
//値が0でなければ、格納
if($first_int === 0 && $num !== null){
$first_int = $num;
continue;
}
}
}
foreach($kyuyoArray as $key => $value){
if(array_sum($value) !== 0){
foreach($value as $keys => $num){
//値がnullでなければ、格納
if($num === null){
$kyuyoArray[$key][$keys] = $first_int;
}
}
}
}//--------------------------------------------------------------------
//年間ごとの給与を計算する
$beforeNensyu = 0;
$total = array();
foreach ($year as $y) {
$sum = array_sum($kyuyoArray[$y]);
if(0 === $sum && !$valueNulls[$y]){
$total[$y] = 0;
} else {
$nensyu = array_sum($kyuyoArray[$y]);
$total[$y] = $nensyu;
$beforeNensyu = $nensyu;
}
}
// foreach($kyuyoArray as $key => $value){
// //var_dump($key);
// $total[$key] = array_sum($value);
// }
return $total;
}*/
//年収
// public function nensyu($array,$year){
//
// foreach($year as $key => $value){
// foreach($array as $keys => $values){
//
// if($value == $values[EmployeeRepository::AI_KEY_STOSHI] && $values['KBN'] == 4){
// $nenArray[$value] = $values['MONEY'];
// break;
// }
// }
// }
// //return $nenArray;
// }
//手当ての計算
/* 14/11/5 mitsunaga backup
public static function teate($array,$year){
//給与の分だけ抜き出す
foreach($array as $key => $value){
if($value['KBN'] == 2){
$teateArray[] = $value;
}
}
if(!isset($teateArray)) return false;
//登録されている手当てごとに計算を行う
foreach($teateArray as $loopIndex => $valueTeate){
//年数表を作成
foreach($year as $yearKey => $yearValue){
$teateList[$yearValue][EmployeeRepository::Jan] = 0;
$teateList[$yearValue][EmployeeRepository::Feb] = 0;
$teateList[$yearValue][EmployeeRepository::Mar] = 0;
$teateList[$yearValue][EmployeeRepository::Apr] = 0;
$teateList[$yearValue][EmployeeRepository::May] = 0;
$teateList[$yearValue][EmployeeRepository::Jun] = 0;
$teateList[$yearValue][EmployeeRepository::Jul] = 0;
$teateList[$yearValue][EmployeeRepository::Aug] = 0;
$teateList[$yearValue][EmployeeRepository::Sep] = 0;
$teateList[$yearValue][EmployeeRepository::Oct] = 0;
$teateList[$yearValue][EmployeeRepository::Nov] = 0;
$teateList[$yearValue][EmployeeRepository::Dec] = 0;
}
//開始年月を代入
$teateList[$valueTeate[EmployeeRepository::AI_KEY_STOSHI]][$valueTeate[EmployeeRepository::AI_KEY_STUKI]] = $valueTeate['MONEY'];
//終了年月が登録されていない場合
if($valueTeate['ETOSHI'] == ''){
//年数ごとに計算
$stockValue = '';
foreach($teateList as $key => $value){
foreach($value as $keys => $values){
if($values != 0) $stockValue = $values;
if($stockValue != '') $teateList[$key][$keys] = $stockValue;
}
}
//終了年月が登録されている場合
}else{
//終了日時を設定
if($valueTeate['ETOSHI'] != '') $teateList[$valueTeate['ETOSHI']][$valueTeate['ETUKI']] = $valueTeate['MONEY'];
//年数ごとに計算
$startFlg = 0;
$endFlg = 0;
$stockValue = '';
foreach($teateList as $key => $value){
foreach($value as $keys => $values){
if($startFlg==1 && $values != 0){
$endFlg = 1;
}
if($values != 0 && $startFlg == 0){
$stockValue = $values;
$startFlg = 1;
}
if($startFlg==1 && $endFlg==0){
$teateList[$key][$keys] = $stockValue;
}
}
}
}
//年間ごとの給与を計算する
foreach($teateList as $key => $value){
$total[$key] = array_sum($value);
}
//配列リストに格納
$totalTeateList[] = $total;
}
//各種の手当てを、年数ごとに合計する
foreach($totalTeateList as $key => $value){
foreach($value as $keys => $values){
//初回
if(!isset($teateGoukei[$keys]))$teateGoukei[$keys]=0;
$teateGoukei[$keys] += $values;
}
}
return $teateGoukei;
}*/
// /**
// * 添付ファイル配列のキー : 顔写真
// */
// const tempFileKeyPhoto = 'photo';
// /**
// * 添付ファイル配列のキー : 添付ファイル
// */
// const tempFileKeyTemp = 'temp';
// /**
// * 社員にぶら下がる顔写真・添付ファイルをそれぞれ取得
// * 配列キー:'photo' 顔写真 ・ 'temp' 添付ファイル
// * @param \Kzl\JinjiKoukaBundle\Entity\Employee $emp
// */
// public static function getEmployeesTempFiles(Employee $employee)
// {
// // 社員にぶら下がるデータを全件取得
// $files = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:FileAttachment')->findByRelation(EmployeeRepository::TABLE_NAME, $employee->getId());
//
// // 顔写真・添付ファイルにわけてそれぞれ取得
// $list = array(
// self::tempFileKeyPhoto => null,
// self::tempFileKeyTemp => array(),
// );
// foreach ($files as $file) {
// if($file->getNo() == FileAttachmentRepository::EMPLOYEE_NO_PHOTO){
// $list[self::tempFileKeyPhoto] = $file;
// } else {
// $list[self::tempFileKeyTemp][$file->getNo()] = $file;
// }
// }
// return $list;
// }
// public static function ivalidityCheck($identifier){
//
// // 社員にぶら下がるデータを全件取得
// $result = self::getDoctrine()->getManager()->getRepository('KzlJinjiKoukaBundle:Module')->findOneByIdentifier($identifier);
//
// return $result;
// }
}