FunctionsController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. <?php
  2. namespace App\Http\Controllers;
  3. use DateTime;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Validator;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Hash;
  8. use Illuminate\Support\Carbon;
  9. class FunctionsController extends Controller{
  10. private $responseController;
  11. public function __construct(){
  12. $this->responseController = new ResponseController();
  13. }
  14. public static function uuidv5($namespace, $name) {
  15. if(!self::is_valid($namespace)) return false;
  16. // Get hexadecimal components of namespace
  17. $nhex = str_replace(array('-','{','}'), '', $namespace);
  18. // Binary Value
  19. $nstr = '';
  20. // Convert Namespace UUID to bits
  21. for($i = 0; $i < strlen($nhex); $i+=2) {
  22. $nstr .= chr(hexdec($nhex[$i].$nhex[$i+1]));
  23. }
  24. // Calculate hash value
  25. $hash = sha1($nstr . $name);
  26. return sprintf('%08s-%04s-%04x-%04x-%12s',
  27. // 32 bits for "time_low"
  28. substr($hash, 0, 8),
  29. // 16 bits for "time_mid"
  30. substr($hash, 8, 4),
  31. // 16 bits for "time_hi_and_version",
  32. // four most significant bits holds version number 5
  33. (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x5000,
  34. // 16 bits, 8 bits for "clk_seq_hi_res",
  35. // 8 bits for "clk_seq_low",
  36. // two most significant bits holds zero and one for variant DCE1.1
  37. (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
  38. // 48 bits for "node"
  39. substr($hash, 20, 12)
  40. );
  41. }
  42. public static function is_valid($uuid) {
  43. return preg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'.
  44. '[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i', $uuid) === 1;
  45. }
  46. public function generateID($seed, $timestamp){
  47. $string = str_replace(" ", "", $seed) . $timestamp;
  48. $array = [];
  49. for($i = 0; $i < strlen($string); $i++){
  50. $array[] = $string[$i];
  51. }
  52. shuffle($array);
  53. $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  54. $ID = '';
  55. foreach($array as $char){
  56. $ascii = ord($char);
  57. $s = $ascii / 100;
  58. if($s >= 1) continue;
  59. $s = $s * strlen($chars);
  60. $s = intval($s);
  61. $l = $chars[$s];
  62. if(strlen($ID) < 20) $ID .= $l;
  63. }
  64. if(strlen($ID) < 20){
  65. for($i = strlen($ID); $i < 20; $i++){
  66. $s = rand(0, strlen($chars) - 1);
  67. $l = $chars[$s];
  68. $ID .= $l;
  69. }
  70. }
  71. return $ID;
  72. }
  73. public function getType($type){
  74. switch($type){
  75. case "insert":
  76. return "CREATE";
  77. break;
  78. case "update":
  79. return strtoupper($type);
  80. break;
  81. case "select":
  82. return "READ";
  83. break;
  84. case "delete":
  85. return strtoupper($type);
  86. break;
  87. default:
  88. return "UNKNOWN";
  89. break;
  90. }
  91. }
  92. public function registerLog($querys, $user, $date, $idac, $line){
  93. foreach($querys as $query){
  94. $script = $query['query'];
  95. $params = json_encode($query['bindings']);
  96. DB::table('S002V01TLOMY')->insert([
  97. 'LOMY_NULI' => $line,
  98. 'LOMY_IDAC' => $idac,
  99. 'LOMY_QUER' => $script,
  100. 'LOMY_PARA' => $params,
  101. 'LOMY_FECH' => $date,
  102. 'LOMY_IDUS' => $user,
  103. ]);
  104. }
  105. }
  106. public function registerActivity($line, $module, $function, $screen, $action, $description, $user, $date, $submodule = null){
  107. $id = DB::table('S002V01TACCI')->insertGetId([
  108. 'ACCI_NULI' => $line,
  109. 'ACCI_IDMO' => $module,
  110. 'ACCI_IDSM' => $submodule,
  111. 'ACCI_IDFU' => $function,
  112. 'ACCI_IDPA' => $screen,
  113. 'ACCI_TIAC' => $action,
  114. 'ACCI_DESC' => $description,
  115. 'ACCI_IDUS' => $user,
  116. 'ACCI_FEAC' => $date
  117. ]);
  118. DB::table('S002V01TUSUA')->where('USUA_IDUS', '=', $user)->update([
  119. 'USUA_ULAC' => $id
  120. ]);
  121. return $id;
  122. }
  123. public function joinName($name, $fApe, $sApe = null){
  124. $fullName = "$name $fApe";
  125. if(!is_null($sApe)){
  126. $fullName = "$fullName $sApe";
  127. }
  128. return $fullName;
  129. }
  130. public function checkFileSize($ext, $size){
  131. $availableFiles = [
  132. 250=> ["zip", "tar", "rar", "7z", "mp3", "mpeg", "wav", "ogg", "opus", "jpg", "png", "gif", "bmp", "tiff", "svg",
  133. "txt", "webm", "mp4", "3gp", "mov", "avi", "wmv", "flv", "dwg", "dxf", "3ds", "ai", "psd", "xml"],
  134. 50 => ["doc", "docx", "vsd", "vsdx", "pdf"],
  135. 75 => ["xls", "xlsx"],
  136. 100=> ["ppt", "pptx"],
  137. ];
  138. $maxFileSizeMB = 0;
  139. foreach($availableFiles as $k=>$v){
  140. if(in_array($ext, $v)) $maxFileSizeMB = $k;
  141. }
  142. if($maxFileSizeMB == 0) return false;
  143. $maxFileSize = $maxFileSizeMB * 1048576;
  144. return $size < $maxFileSize;
  145. }
  146. public function checkInvoice($file) {
  147. try {
  148. $xml = simplexml_load_string($file, 'SimpleXMLElement', LIBXML_NOCDATA);
  149. $ns = $xml->getNamespaces(true);
  150. $xml->registerXPathNamespace('c', $ns['cfdi']);
  151. $xml->registerXPathNamespace('t', $ns['tfd']);
  152. } catch (\Throwable $th) {
  153. return $this->responseController->makeResponse(
  154. true,
  155. "ERR_INVOICE_COMPARE006: Ocurrió un error al obtener la información del documento.",
  156. $th->getMessage(),
  157. 500
  158. );
  159. }
  160. $arrInfoInvoice = ((array) $xml)['@attributes'];
  161. if (
  162. array_key_exists('Version', $arrInfoInvoice) &&
  163. array_key_exists('Serie', $arrInfoInvoice) &&
  164. array_key_exists('Folio', $arrInfoInvoice) &&
  165. array_key_exists('TipoDeComprobante', $arrInfoInvoice) &&
  166. array_key_exists('NoCertificado', $arrInfoInvoice) &&
  167. array_key_exists('Certificado', $arrInfoInvoice) &&
  168. array_key_exists('Sello', $arrInfoInvoice) &&
  169. array_key_exists('FormaPago', $arrInfoInvoice) &&
  170. array_key_exists('MetodoPago', $arrInfoInvoice) &&
  171. array_key_exists('SubTotal', $arrInfoInvoice) &&
  172. array_key_exists('Moneda', $arrInfoInvoice) &&
  173. array_key_exists('TipoCambio', $arrInfoInvoice) &&
  174. array_key_exists('Total', $arrInfoInvoice) &&
  175. array_key_exists('LugarExpedicion', $arrInfoInvoice) &&
  176. array_key_exists('CondicionesDePago', $arrInfoInvoice) &&
  177. array_key_exists('Fecha', $arrInfoInvoice) &&
  178. array_key_exists('Exportacion', $arrInfoInvoice)
  179. ) {
  180. return true;
  181. }
  182. return false;
  183. }
  184. public function now(){
  185. $completeDate = shell_exec('echo %date%');
  186. $completeDate = trim($completeDate);
  187. $serverDateTime = "";
  188. if(strlen($completeDate) == 14){
  189. $serverDateTime = shell_exec('echo %date:~10,4%-%date:~4,2%-%date:~7,2% %time:~0,2%:%time:~3,2%:%time:~6,2%');
  190. $serverDateTime = trim($serverDateTime);
  191. }else{
  192. $serverDateTime = shell_exec('echo %date:~6,4%-%date:~3,2%-%date:~0,2% %time:~0,2%:%time:~3,2%:%time:~6,2%');
  193. $serverDateTime = trim($serverDateTime);
  194. }
  195. return new Carbon($serverDateTime);
  196. }
  197. public function validDate($date){
  198. if(preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)){
  199. return true;
  200. }else{
  201. return false;
  202. }
  203. }
  204. public function floatAdd(...$numbers) : float{
  205. $result = "0.0";
  206. foreach($numbers as $n){
  207. $result = bcadd("$result", "$n", 18);
  208. }
  209. return floatval($result);
  210. }
  211. public function floatSub($fn, $sn) : float{
  212. $result = bcsub("$fn", "$sn", 18);
  213. return floatval($result);
  214. }
  215. public function floatDiv($fn, $sn) : float{
  216. $result = bcdiv("$fn", "$sn", 18);
  217. return floatval($result);
  218. }
  219. public function floatMul($n1, $n2) : float {
  220. $result = bcmul("$n1", "$n2", 18);
  221. return floatval($result);
  222. }
  223. public function formatDateTime(string $dateTime) : string {
  224. if(str_contains($dateTime, '0001-01-01')){
  225. return "-";
  226. }
  227. $MONTHS = ["01" => "Enero", "02" => "Febrero", "03" => "Marzo", "04" => "Abril", "05" => "Mayo", "06" => "Junio", "07" => "Julio",
  228. "08" => "Agosto", "09" => "Septiembre", "10" => "Octubre", "11" => "Noviembre", "12" => "Diciembre"];
  229. $dateTimeArr = explode(" ", $dateTime);
  230. $dateArr = explode("-", $dateTimeArr[0]);
  231. $month = $MONTHS[$dateArr[1]];
  232. $day = intval($dateArr[2]);
  233. $dateTimeStr = $day . " de " . $month . " del " . $dateArr[0];
  234. $timeArr = explode(":", $dateTimeArr[1]);
  235. $hour = intval($timeArr[0]);
  236. $period = $hour < 12 ? 'AM' : 'PM';
  237. $hour = $hour > 12 ? $hour - 12 : $hour;
  238. $dateTimeStr .= " a las " . $hour . ":" . $timeArr[1] . " " . $period;
  239. return $dateTimeStr;
  240. }
  241. public function buildHumanCurrentDate(string $dateTime) : string {
  242. $DAYS = ["Mo" => "Lunes", "Tu" => "Martes", "We" => "Miércoles", "Th" => "Jueves",
  243. "Fr" => "Viernes", "Sa" => "Sábado", "Su" => "Domingo"];
  244. $MONTHS = ["01" => "Enero", "02" => "Febrero", "03" => "Marzo", "04" => "Abril", "05" => "Mayo", "06" => "Junio", "07" => "Julio",
  245. "08" => "Agosto", "09" => "Septiembre", "10" => "Octubre", "11" => "Noviembre", "12" => "Diciembre"];
  246. $dateTimeArr = explode(" ", $dateTime);
  247. $dateArr = explode("-", $dateTimeArr[0]);
  248. $dateObj = new Carbon($dateTime);
  249. $dayName = $dateObj->format('l');
  250. $dayInd = substr($dayName, 0, 2);
  251. return $DAYS[$dayInd] . ", " . $dateArr[2] . " de " . $MONTHS[$dateArr[1]] . " del " . $dateArr[0];
  252. }
  253. public function buildProjectDate($dateStr): string {
  254. $MONTHS = ["01" => "enero", "02" => "febrero", "03" => "marzo", "04" => "abril", "05" => "mayo", "06" => "junio", "07" => "julio",
  255. "08" => "agosto", "09" => "septiembre", "10" => "octubre", "11" => "noviembre", "12" => "diciembre"];
  256. $dateObj = new Carbon($dateStr);
  257. $dateFormatted = $dateObj->toDateTimeString();
  258. $dateTimeArr = explode(" ", $dateFormatted);
  259. $dateArr = explode('-', $dateTimeArr[0]);
  260. $monthName = $MONTHS[$dateArr[1]];
  261. $timeArr = explode(':', $dateTimeArr[1]);
  262. $hour = intval($timeArr[0]);
  263. $period = $hour < 12 ? 'a. m.' : 'p. m.';
  264. $hour = $hour > 12 ? $hour - 12 : $hour;
  265. $hourStr = $hour < 10 ? "0$hour" : "$hour";
  266. return "$dateArr[2] de $monthName $dateArr[0] $hourStr:$timeArr[1] $period";
  267. }
  268. public function getApiURI(): string {
  269. return "http://git.ittec.mx/";
  270. }
  271. public function getBasePath(): string {
  272. return "C:\SistemaMantenimiento\sistema-mantenimiento-back";
  273. }
  274. public function validPhoneNumber(string $number) : bool {
  275. if(intval($number) <= 0) return false;
  276. $validChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  277. $numberArr = str_split($number);
  278. $validNumber = '';
  279. foreach($numberArr as $char){
  280. if(in_array($char, $validChars)) $validNumber .= $char;
  281. }
  282. if(strlen($validNumber) >= 10 && strlen($validNumber) <= 11){
  283. return true;
  284. }else{
  285. return false;
  286. }
  287. }
  288. public function unaccent(string $value): string{
  289. $transliteration = array(
  290. 'IJ' => 'I', 'Ö' => 'O','Œ' => 'O','Ü' => 'U','ä' => 'a','æ' => 'a',
  291. 'ij' => 'i','ö' => 'o','œ' => 'o','ü' => 'u','ß' => 's','ſ' => 's',
  292. 'À' => 'A','Á' => 'A','Â' => 'A','Ã' => 'A','Ä' => 'A','Å' => 'A',
  293. 'Æ' => 'A','Ā' => 'A','Ą' => 'A','Ă' => 'A','Ç' => 'C','Ć' => 'C',
  294. 'Č' => 'C','Ĉ' => 'C','Ċ' => 'C','Ď' => 'D','Đ' => 'D','È' => 'E',
  295. 'É' => 'E','Ê' => 'E','Ë' => 'E','Ē' => 'E','Ę' => 'E','Ě' => 'E',
  296. 'Ĕ' => 'E','Ė' => 'E','Ĝ' => 'G','Ğ' => 'G','Ġ' => 'G','Ģ' => 'G',
  297. 'Ĥ' => 'H','Ħ' => 'H','Ì' => 'I','Í' => 'I','Î' => 'I','Ï' => 'I',
  298. 'Ī' => 'I','Ĩ' => 'I','Ĭ' => 'I','Į' => 'I','İ' => 'I','Ĵ' => 'J',
  299. 'Ķ' => 'K','Ľ' => 'K','Ĺ' => 'K','Ļ' => 'K','Ŀ' => 'K','Ł' => 'L',
  300. 'Ñ' => 'N','Ń' => 'N','Ň' => 'N','Ņ' => 'N','Ŋ' => 'N','Ò' => 'O',
  301. 'Ó' => 'O','Ô' => 'O','Õ' => 'O','Ø' => 'O','Ō' => 'O','Ő' => 'O',
  302. 'Ŏ' => 'O','Ŕ' => 'R','Ř' => 'R','Ŗ' => 'R','Ś' => 'S','Ş' => 'S',
  303. 'Ŝ' => 'S','Ș' => 'S','Š' => 'S','Ť' => 'T','Ţ' => 'T','Ŧ' => 'T',
  304. 'Ț' => 'T','Ù' => 'U','Ú' => 'U','Û' => 'U','Ū' => 'U','Ů' => 'U',
  305. 'Ű' => 'U','Ŭ' => 'U','Ũ' => 'U','Ų' => 'U','Ŵ' => 'W','Ŷ' => 'Y',
  306. 'Ÿ' => 'Y','Ý' => 'Y','Ź' => 'Z','Ż' => 'Z','Ž' => 'Z','à' => 'a',
  307. 'á' => 'a','â' => 'a','ã' => 'a','ā' => 'a','ą' => 'a','ă' => 'a',
  308. 'å' => 'a','ç' => 'c','ć' => 'c','č' => 'c','ĉ' => 'c','ċ' => 'c',
  309. 'ď' => 'd','đ' => 'd','è' => 'e','é' => 'e','ê' => 'e','ë' => 'e',
  310. 'ē' => 'e','ę' => 'e','ě' => 'e','ĕ' => 'e','ė' => 'e','ƒ' => 'f',
  311. 'ĝ' => 'g','ğ' => 'g','ġ' => 'g','ģ' => 'g','ĥ' => 'h','ħ' => 'h',
  312. 'ì' => 'i','í' => 'i','î' => 'i','ï' => 'i','ī' => 'i','ĩ' => 'i',
  313. 'ĭ' => 'i','į' => 'i','ı' => 'i','ĵ' => 'j','ķ' => 'k','ĸ' => 'k',
  314. 'ł' => 'l','ľ' => 'l','ĺ' => 'l','ļ' => 'l','ŀ' => 'l','ñ' => 'n',
  315. 'ń' => 'n','ň' => 'n','ņ' => 'n','ʼn' => 'n','ŋ' => 'n','ò' => 'o',
  316. 'ó' => 'o','ô' => 'o','õ' => 'o','ø' => 'o','ō' => 'o','ő' => 'o',
  317. 'ŏ' => 'o','ŕ' => 'r','ř' => 'r','ŗ' => 'r','ś' => 's','š' => 's',
  318. 'ť' => 't','ù' => 'u','ú' => 'u','û' => 'u','ū' => 'u','ů' => 'u',
  319. 'ű' => 'u','ŭ' => 'u','ũ' => 'u','ų' => 'u','ŵ' => 'w','ÿ' => 'y',
  320. 'ý' => 'y','ŷ' => 'y','ż' => 'z','ź' => 'z','ž' => 'z','Α' => 'A',
  321. 'Ά' => 'A','Ἀ' => 'A','Ἁ' => 'A','Ἂ' => 'A','Ἃ' => 'A','Ἄ' => 'A',
  322. 'Ἅ' => 'A','Ἆ' => 'A','Ἇ' => 'A','ᾈ' => 'A','ᾉ' => 'A','ᾊ' => 'A',
  323. 'ᾋ' => 'A','ᾌ' => 'A','ᾍ' => 'A','ᾎ' => 'A','ᾏ' => 'A','Ᾰ' => 'A',
  324. 'Ᾱ' => 'A','Ὰ' => 'A','ᾼ' => 'A','Β' => 'B','Γ' => 'G','Δ' => 'D',
  325. 'Ε' => 'E','Έ' => 'E','Ἐ' => 'E','Ἑ' => 'E','Ἒ' => 'E','Ἓ' => 'E',
  326. 'Ἔ' => 'E','Ἕ' => 'E','Ὲ' => 'E','Ζ' => 'Z','Η' => 'I','Ή' => 'I',
  327. 'Ἠ' => 'I','Ἡ' => 'I','Ἢ' => 'I','Ἣ' => 'I','Ἤ' => 'I','Ἥ' => 'I',
  328. 'Ἦ' => 'I','Ἧ' => 'I','ᾘ' => 'I','ᾙ' => 'I','ᾚ' => 'I','ᾛ' => 'I',
  329. 'ᾜ' => 'I','ᾝ' => 'I','ᾞ' => 'I','ᾟ' => 'I','Ὴ' => 'I','ῌ' => 'I',
  330. 'Θ' => 'T','Ι' => 'I','Ί' => 'I','Ϊ' => 'I','Ἰ' => 'I','Ἱ' => 'I',
  331. 'Ἲ' => 'I','Ἳ' => 'I','Ἴ' => 'I','Ἵ' => 'I','Ἶ' => 'I','Ἷ' => 'I',
  332. 'Ῐ' => 'I','Ῑ' => 'I','Ὶ' => 'I','Κ' => 'K','Λ' => 'L','Μ' => 'M',
  333. 'Ν' => 'N','Ξ' => 'K','Ο' => 'O','Ό' => 'O','Ὀ' => 'O','Ὁ' => 'O',
  334. 'Ὂ' => 'O','Ὃ' => 'O','Ὄ' => 'O','Ὅ' => 'O','Ὸ' => 'O','Π' => 'P',
  335. 'Ρ' => 'R','Ῥ' => 'R','Σ' => 'S','Τ' => 'T','Υ' => 'Y','Ύ' => 'Y',
  336. 'Ϋ' => 'Y','Ὑ' => 'Y','Ὓ' => 'Y','Ὕ' => 'Y','Ὗ' => 'Y','Ῠ' => 'Y',
  337. 'Ῡ' => 'Y','Ὺ' => 'Y','Φ' => 'F','Χ' => 'X','Ψ' => 'P','Ω' => 'O',
  338. 'Ώ' => 'O','Ὠ' => 'O','Ὡ' => 'O','Ὢ' => 'O','Ὣ' => 'O','Ὤ' => 'O',
  339. 'Ὥ' => 'O','Ὦ' => 'O','Ὧ' => 'O','ᾨ' => 'O','ᾩ' => 'O','ᾪ' => 'O',
  340. 'ᾫ' => 'O','ᾬ' => 'O','ᾭ' => 'O','ᾮ' => 'O','ᾯ' => 'O','Ὼ' => 'O',
  341. 'ῼ' => 'O','α' => 'a','ά' => 'a','ἀ' => 'a','ἁ' => 'a','ἂ' => 'a',
  342. 'ἃ' => 'a','ἄ' => 'a','ἅ' => 'a','ἆ' => 'a','ἇ' => 'a','ᾀ' => 'a',
  343. 'ᾁ' => 'a','ᾂ' => 'a','ᾃ' => 'a','ᾄ' => 'a','ᾅ' => 'a','ᾆ' => 'a',
  344. 'ᾇ' => 'a','ὰ' => 'a','ᾰ' => 'a','ᾱ' => 'a','ᾲ' => 'a','ᾳ' => 'a',
  345. 'ᾴ' => 'a','ᾶ' => 'a','ᾷ' => 'a','β' => 'b','γ' => 'g','δ' => 'd',
  346. 'ε' => 'e','έ' => 'e','ἐ' => 'e','ἑ' => 'e','ἒ' => 'e','ἓ' => 'e',
  347. 'ἔ' => 'e','ἕ' => 'e','ὲ' => 'e','ζ' => 'z','η' => 'i','ή' => 'i',
  348. 'ἠ' => 'i','ἡ' => 'i','ἢ' => 'i','ἣ' => 'i','ἤ' => 'i','ἥ' => 'i',
  349. 'ἦ' => 'i','ἧ' => 'i','ᾐ' => 'i','ᾑ' => 'i','ᾒ' => 'i','ᾓ' => 'i',
  350. 'ᾔ' => 'i','ᾕ' => 'i','ᾖ' => 'i','ᾗ' => 'i','ὴ' => 'i','ῂ' => 'i',
  351. 'ῃ' => 'i','ῄ' => 'i','ῆ' => 'i','ῇ' => 'i','θ' => 't','ι' => 'i',
  352. 'ί' => 'i','ϊ' => 'i','ΐ' => 'i','ἰ' => 'i','ἱ' => 'i','ἲ' => 'i',
  353. 'ἳ' => 'i','ἴ' => 'i','ἵ' => 'i','ἶ' => 'i','ἷ' => 'i','ὶ' => 'i',
  354. 'ῐ' => 'i','ῑ' => 'i','ῒ' => 'i','ῖ' => 'i','ῗ' => 'i','κ' => 'k',
  355. 'λ' => 'l','μ' => 'm','ν' => 'n','ξ' => 'k','ο' => 'o','ό' => 'o',
  356. 'ὀ' => 'o','ὁ' => 'o','ὂ' => 'o','ὃ' => 'o','ὄ' => 'o','ὅ' => 'o',
  357. 'ὸ' => 'o','π' => 'p','ρ' => 'r','ῤ' => 'r','ῥ' => 'r','σ' => 's',
  358. 'ς' => 's','τ' => 't','υ' => 'y','ύ' => 'y','ϋ' => 'y','ΰ' => 'y',
  359. 'ὐ' => 'y','ὑ' => 'y','ὒ' => 'y','ὓ' => 'y','ὔ' => 'y','ὕ' => 'y',
  360. 'ὖ' => 'y','ὗ' => 'y','ὺ' => 'y','ῠ' => 'y','ῡ' => 'y','ῢ' => 'y',
  361. 'ῦ' => 'y','ῧ' => 'y','φ' => 'f','χ' => 'x','ψ' => 'p','ω' => 'o',
  362. 'ώ' => 'o','ὠ' => 'o','ὡ' => 'o','ὢ' => 'o','ὣ' => 'o','ὤ' => 'o',
  363. 'ὥ' => 'o','ὦ' => 'o','ὧ' => 'o','ᾠ' => 'o','ᾡ' => 'o','ᾢ' => 'o',
  364. 'ᾣ' => 'o','ᾤ' => 'o','ᾥ' => 'o','ᾦ' => 'o','ᾧ' => 'o','ὼ' => 'o',
  365. 'ῲ' => 'o','ῳ' => 'o','ῴ' => 'o','ῶ' => 'o','ῷ' => 'o','А' => 'A',
  366. 'Б' => 'B','В' => 'V','Г' => 'G','Д' => 'D','Е' => 'E','Ё' => 'E',
  367. 'Ж' => 'Z','З' => 'Z','И' => 'I','Й' => 'I','К' => 'K','Л' => 'L',
  368. 'М' => 'M','Н' => 'N','О' => 'O','П' => 'P','Р' => 'R','С' => 'S',
  369. 'Т' => 'T','У' => 'U','Ф' => 'F','Х' => 'K','Ц' => 'T','Ч' => 'C',
  370. 'Ш' => 'S','Щ' => 'S','Ы' => 'Y','Э' => 'E','Ю' => 'Y','Я' => 'Y',
  371. 'а' => 'A','б' => 'B','в' => 'V','г' => 'G','д' => 'D','е' => 'E',
  372. 'ё' => 'E','ж' => 'Z','з' => 'Z','и' => 'I','й' => 'I','к' => 'K',
  373. 'л' => 'L','м' => 'M','н' => 'N','о' => 'O','п' => 'P','р' => 'R',
  374. 'с' => 'S','т' => 'T','у' => 'U','ф' => 'F','х' => 'K','ц' => 'T',
  375. 'ч' => 'C','ш' => 'S','щ' => 'S','ы' => 'Y','э' => 'E','ю' => 'Y',
  376. 'я' => 'Y','ð' => 'd','Ð' => 'D','þ' => 't','Þ' => 'T','ა' => 'a',
  377. 'ბ' => 'b','გ' => 'g','დ' => 'd','ე' => 'e','ვ' => 'v','ზ' => 'z',
  378. 'თ' => 't','ი' => 'i','კ' => 'k','ლ' => 'l','მ' => 'm','ნ' => 'n',
  379. 'ო' => 'o','პ' => 'p','ჟ' => 'z','რ' => 'r','ს' => 's','ტ' => 't',
  380. 'უ' => 'u','ფ' => 'p','ქ' => 'k','ღ' => 'g','ყ' => 'q','შ' => 's',
  381. 'ჩ' => 'c','ც' => 't','ძ' => 'd','წ' => 't','ჭ' => 'c','ხ' => 'k',
  382. 'ჯ' => 'j','ჰ' => 'h'
  383. );
  384. $str = str_replace( array_keys( $transliteration ), array_values( $transliteration ), $value);
  385. return $str;
  386. }
  387. public function validateDate($date, $format = 'Y-m-d H:i:s'): bool {
  388. $d = DateTime::createFromFormat($format, $date);
  389. return $d && $d->format($format) == $date;
  390. }
  391. public function getDatesDifference($startDate, $endDate) {
  392. $startDateObj = new Carbon($startDate);
  393. $endDateObj = new Carbon($endDate);
  394. $startDateNum = $startDateObj->timestamp;
  395. $endDateNum = $endDateObj->timestamp;
  396. $differenceStr = "";
  397. $diffInSecs = $this->floatSub($endDateNum, $startDateNum);
  398. $diffInMins = intval($this->floatDiv($diffInSecs, 60));
  399. if($diffInMins <= 0){
  400. $differenceStr = "$diffInSecs segundos.";
  401. return $differenceStr;
  402. }else{
  403. $seconds = $diffInSecs - ($diffInMins * 60);
  404. $differenceStr = "$seconds segundos.";
  405. }
  406. $diffInHours = intval($this->floatDiv($diffInMins, 60));
  407. if($diffInHours <= 0){
  408. $differenceStr = "$diffInMins minutos.";
  409. return $differenceStr;
  410. }else{
  411. $minutes = $diffInMins - ($diffInHours * 60);
  412. $differenceStr = "$minutes minutos, $differenceStr";
  413. }
  414. $diffInDays = intval($this->floatDiv($diffInHours, 24));
  415. if($diffInDays <= 0){
  416. $differenceStr = "$diffInHours horas.";
  417. return $differenceStr;
  418. }else{
  419. $hours = $diffInHours - ($diffInDays * 24);
  420. $differenceStr = "$hours horas, $differenceStr";
  421. }
  422. return "$diffInDays días, $differenceStr";
  423. }
  424. public function validNumber(string $number, bool $decimal) : bool {
  425. if($number == '' || is_null($number)) return false;
  426. $validChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  427. $numberArr = str_split($number, 1);
  428. $pointsCount = 0;
  429. $cointainsInvalidChars = false;
  430. foreach($numberArr as $char){
  431. if($decimal){
  432. if($char == '.'){
  433. $pointsCount++;
  434. }else{
  435. if(!in_array($char, $validChars)) $cointainsInvalidChars = true;
  436. }
  437. }else{
  438. if(!in_array($char, $validChars)) $cointainsInvalidChars = true;
  439. }
  440. }
  441. if($decimal && $pointsCount > 1) return false;
  442. if($cointainsInvalidChars) return false;
  443. return true;
  444. }
  445. }