{"version":3,"sources":["app.js"],"names":["requirejs","require","define","undef","hasProp","obj","prop","hasOwn","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","config","starMap","charAt","slice","length","nodeIdCompat","jsSuffixRegExp","test","replace","concat","splice","join","indexOf","substring","makeRequire","relName","forceSync","req","apply","aps","arguments","makeNormalize","makeLoad","depName","value","defined","callDep","waiting","args","defining","main","Error","splitPrefix","prefix","index","makeConfig","makeMap","handlers","Object","prototype","hasOwnProperty","plugin","parts","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","t","r","o","this","path","keys","fns","params","regex","a","addHandler","push","removeHandler","run","match","exec","decodeURIComponent","toURL","RegExp","Array","optional","s","h","reload","navigate","lookup","remove","removeAll","silent","l","window","location","hash","noConflict","c","u","addEventListener","attachEvent","removeEventListener","detachEvent","show","render_sub_stack","_subs","scope","get_app_scope","substr","parsed","parse_parts","webix","extend","url_string","app","parent","stack","url","start","layout","page","params_string","str","key","subui","ui","run_plugins","url_plugins","create_temp_ui","on","create_temp_event","destroy","_init","_destroy","$layout","subview","copy","$scope","create","root","_ui","$$","sub","ui_plugins","$onurlchange","chunks","shift","result","pos","objmode","dchunk","target","$oninit","$ondestroy","$subview","tname","$ui","$init","isArray","method","isDate","render_stack","line","issubpage","fullname","require_plugins","next","$freeze","resize","plugins","code","_handlers","container","view","temp","_uis","run_handlers","arr","uis","destructor","delete_ids","views","childs","getChildViews","invalid_url","err","debug","console","log","requireModules","message","type","expire","text","version","document","body","add","EventSystem","ready","node","html","addCss","removeCss","router","options","routie","use","handler","$onurl","$onui","trigger","data","callEvent","action","onError","select_menu","menu_id","menu","setValue","select","exists","get_menu","$menu","reconstruct","parse","title","details","$menuid","Polyglot","phrases","currentLocale","locale","allowMissing","warn","langToTypeMap","mapping","langs","trim","trimRe","choosePluralForm","count","texts","chosenText","delimeter","pluralTypeIndex","pluralTypeName","langToPluralType","pluralTypeToLanguages","en","pluralTypes","interpolate","phrase","arg","clone","source","VERSION","newLocale","morePhrases","clear","newPhrases","smart_count","_","chinese","german","french","russian","czech","polish","icelandic","saveSetting","current_user","settings","user","credentials","host","Cookies","getJSON","getDvcsID","cookie","getAppCookie","ma_dvcs","getCurrentUser","username","getLanguage","language","getAccessToken","access_token","expires_in","timestamp","Date","now","getRefreshToken","refresh_token","ajax","headers","Content-type","post","wb_user_id","JSON","error","getCredentials","token","baseUrl","href","startsWith","storage","local","put","set","get","setCurrentUser","userId","login","password","component","ProgressBar","disable","showProgress","is_sso_login","enable","hideProgress","querySelector","classList","token_type","noti_sso","notes_sso","is_link_sso","is_weak_pass","isWeakPass","then","loginsso","sso_code","redirect_uri","id_token","sid","logout","session","status","Promise","resolve","_get_lang","defaultlang","_set_lang","lang","create_locale","current_lang","poly","bind","template","setLang","getLang","isNow","val","users","_get_theme","theme","current_theme","_set_theme","setTheme","getTheme","_isUndefined","computeStackTraceWrapper","b","XMLHttpRequest","ActiveXObject","open","send","responseText","d","domain","g","UNKNOWN_FUNCTION","Math","floor","max","min","column","lastIndexOf","getElementsByTagName","k","m","src","q","func","context","mode","useragent","navigator","userAgent","stacktrace","innerText","v","w","x","y","z","incomplete","unshift","partial","caller","toString","description","sourceURL","fileName","lineNumber","remoteFetching","linesOfContext","tracekitReport","augmentStackTraceWithInitialElement","guessFunctionName","gatherContext","ofCaller","Notifier","_topLevelNotifier","protocol","DEFAULT_ENDPOINT","enabled","endpoint","environment","scrubFields","Util","DEFAULT_SCRUB_FIELDS","checkIgnore","logLevel","DEFAULT_LOG_LEVEL","reportLevel","DEFAULT_REPORT_LEVEL","uncaughtErrorLevel","DEFAULT_UNCAUGHT_ERROR_LEVEL","payload","lastError","parentNotifier","logger","notifier","configure","_wrapNotifierFn","_guessErrorClass","ERR_CLASS_REGEXP","_payloadProcessorTimer","_rollbarPayloadQueue","_processPayload","endpointUrl","accessToken","payloadProcessorTimeout","getTime","rateLimitStartTime","rateLimitPerMinCounter","_globalRollbarOptions","maxItems","itemsPerMinute","ignoreRateLimit","rateLimitCounter","_log","XHR","_rollbarWindowOnError","_rollbarWrappedError","globalNotifier","uncaughtError","_extendListenerPrototype","wrap","_wrapped","setupCustomJSON","quote","escapable","meta","charCodeAt","gap","toJSON","rep","isFinite","String","indent","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","cx","\b","\t","\n","\f","\r","\"","\\","stringify","","reviver","walk","eval","SyntaxError","merge","constructor","parseUriOptions","strictMode","parser","strict","loose","parseUri","sanitizeUrl","anchor","query","traverse","redact","uuid4","random","RollbarJSON","XMLHttpFactories","createXMLHTTPObject","readyState","setRequestHeader","onreadystatechange","XDomainRequest","onprogress","ontimeout","onerror","onload","NOTIFIER_VERSION","DEFAULT_ITEMS_PER_MIN","DEFAULT_MAX_ITEMS","LEVELS","info","warning","critical","startTime","TK","_generateLogFn","_getLogArgs","level","custom","_route","_processShimQueue","shim","parentShim","shimId","_buildPayload","uuid","platform","framework","_buildBody","request","query_string","search","user_ip","client","runtime_ms","round","javascript","browser","cookie_enabled","cookieEnabled","screen","width","height","_getBrowserPlugins","server","_scrub","_buildPayloadBodyTrace","_buildPayloadBodyMessage","extra","exception","class","frames","filename","lineno","colno","pre","trace","_browserPlugins","_getScrubFieldRegexs","_getScrubQueryParamRegexs","_urlIsWhitelisted","hostWhiteList","_messageIsIgnored","ignoredMessages","_enqueuePayload","_internalCheckIgnore","verbose","logFunction","transform","jquery","ignoreAjaxErrors","messagejquery_ajax_error","_tkStackTrace","global","_isWrap","_rollbarContext","_wrappedSource","processPayloads","init","captureUncaught","ping","try_to_logout","afterLogout","try_to_login","afterLogin","newconfig","setInterval","response","delay","core","tracker","skin","$active","inputHeight","menuHeight","listItemHeight","buttonHeight","rowHeight","codebase","i18n","dateFormat","setLocale","disabled","rules","isEmail","patt","isPositiveNumbers","isSpecialCharacter","isPhoneNumber","isTaxCode","number","env","touch","scrollSize","CustomScroll","port","hostname","onkeydown","event","keyCode","ctrlKey","cancelBubble","returnValue","UIManager","addHotKey","ev","getTopParentView","topParent","elButtons","$view","getElementsByClassName","element","viewId","attributes","button","shortcut","app_cache","subviewT","refresh","subviewQ","date","_month","getMonth","firstDay","getFullYear","lastDay","modal","position","head","paddingY","paddingX","elementsConfig","labelWidth","complexData","margin","elements","label","required","invalidMessage","suggest","selectAll","onChange","newValue","urlLoad","comp","getPopup","getList","clearAll","cols","newv","quarter","quarter1","option","getValue","thang","nam","quy","firstDate","lastDate","year","month","date1","firstDay1","lastDay1","validate","isNotEmpty","align","onClick","self","tableHoadon","tungay","denngay","focus","form","getParentView","win","item","getValues","load_event","close","click","hotkey","setValues","getDecimalPlace","fmHoaDon123","keyValue","replaceAll","dsFieldFormat","decimalSizeLeght","numToStr","groupDelimiter","groupSize","decimalDelimiter","decimalSize","fmHoaDon123number","roundNumber","num","decimals","toFixed","numberFormat","edit","NaN","isNaN","CheckKhacNull","clear_filter","table","eachColumn","filter","getFilter","validate_HD_ReturnListHdonId","tableHdon","datafrmAll","serialize","lsthdon_id","lstDataChoose","chon","tthai","check","today","nlap","$","hdon_id","validate_HD_ReturnListHdonId_notSign","validate_HD_ReturnListHdonKhongMaVaCoMaId","lsthdon_id_coMa","lsthdon_id_khongMa","lstDataChooseKhongRoMa","is_hdcma","lstDataChooseCoMa","lstDataChooseKhongMa","validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId","khieu","lstDataChooseMTT","validate_BL_ReturnListHdonKhongMaVaCoMaId","ExcuteHoaDon","checkGuiCQT","checkHasCode","tagSign","isCompleted","Content-Type","kytaptrung","listcerts","modalbox","buttons","top","hide","cert","begin","begin_date","end","end_date","postData","branch_code","cer_serial","type_cmd","guiCQT","dataPut","timeout","ok","fail","xhr","statusText","borderless","resizeColumn","columns","header","checkValue","uncheckValue","tblInvoice","checkSigHSM","promise","all","resultscheckSigHSM","excuteHdPlugin","results","json","idhoadon","InvoiceXmlData","hub","hubconnect","conn","state","off","parameters","xml","xmlbangke","_listcerts","_cert","so_serial","ngaybatdau","ngayketthuc","issuer","subjectname","subject_name","idData","shdon","idSigner","dvky","dateKy","invoke","done","res","ExcuteHoaDonMTT","SignMTTToKenHSM","TongHopHoaDonMTT","editmode","XmlHttpRequest","success","postDataMTT","CheckHSM","KyTongHopXml","ids","forEach","excuteHdPluginMTT","ExcuteHoaDonMTT_NotSign","havesign","cert_serial","mltdiep","ExcuteHoaDonForHasCodeAndNotHaveAnyCode","lsCoMa","lsKhongMa","dsHoaDon","urlApi","hoadon","AllHoaDon","dsHoaDonXL","CommonOnclickTaskOfHD","CommonOnclickTaskOfHDTT32","CreatItemFromData","field","tab","isFmNumber","format","formatNumberDetails","formatNumberArray","subCol","column_name","caption","editor","type_editor","hidden","value_change","formatOriginal","read_only","column_type","dateToStr","removeTimeZoneT","css","text-align","data_decimal","numericConfig","decimalPlaces","column_width","fillspace","ref_id","optionslist","list_column","editors","$popup","timepicker","icons","listColumns","popup","refid","$proxy","listToTree","filterMode","showSubItems","textValue","display_field","tableId","table_name","onSearchIconClick","getFormView","fieldExpression","datapost","masothue","toUpperCase","onIconButtonClick","getAttribute","tableShowEditWindow","value_suggest","field_expression","displayField","columnName","scroll","autoheight","datatype","dataFeed","filtervalue","pathUrl","urldata","encodeURIComponent","onValueSuggest","selectedItem","getSelectedItem","fields","array","updateItem","fn","Function","CreatItemMaterFromData","windowno","timeStamp","labelPosition","label_position","label_width","data_width","placeholder","formatNumberMaster","formatdvtt","decimal","parseInt","maxlength","styleinput","style","readonly","labelRight","inputAlign","valid_rule","rule","onKeyPress","alert","REF_ID","master","parentItem","mst","icon","showEditWindow","sql","command","parameter","editorId","formId","res_a","searchId","valueField","windowconfig","txtSearch","selectwindow","initUI","getHead","setHTML","oldv","ExeCuteCheckReadCurencyTV","checkReadTV","total_amount","type_curency","sync","c_result","tthdon","CanhBaoTinhTien","tong_tien_all","tong_tien","canh_bao","lech","lech2","table_t","isVisible","entry","kmai","tgtttbso","decimalDigits","includes","abs","tgtttbso_last","GetBienLaiChon","GetHoaDonChon","GetHoaDonChonOfTableId","ExcuteShowPopupNotifyErrorInvoice","huyhoadon","datafrm","cungshd","loai","ladhddt","tctbao","setEditMode","tongquat","so","stbao","ntbccqt","ntbao","setValuesTongQuat","mcqtcap","mccqthue","khieu_temp","shdon_temp","ngay","nlap_temp","hdon_id_old","ExcuteReplaceInvoice","kyHieuHoaDon","invoiceForms","invoiceFormsCode","invoiceFormsCodeMTT","arrayString","tblMatHang","chons","detailForm","cctbao_id_temp","cctbao_id","tthdon_old","tthdon_original","tthai_old","nky","loaihdlq","tgia","sdhang","tienthuegtgtgiam","tiletienthuegtgtgiam","giamthuebanhang20","initUINew","tableDetail_phi","refreshColumns","tableDetail","cthdon_id","uid","content","editable","ExcuteChonInvoice","itemSL","assign","sbmat","setModeChangeView","copyValues","ExcuteReplaceInvoice_32","ExcuteIncreaseChangeInvoice_32","ExcuteReduceChangeInvoice_32","ghichu","ExcuteInfoChangeInvoice_32","obj_detail","ten","shdclquan","moment","nlhdclquan","khhdclquan","ExcuteIncreaseChangeInvoice","ExcuteReduceChangeInvoice","note","ExcuteInfoChangeInvoice","ngay_hoa_don","ExcuteCancellingInvoice","totalHuy","strHoaDonSelect","confirm","cancel","hoaDonHuy","idHoaDon","ExcuteCancellingInvoicetncn","ExcuteHUyInvoicebienlai","ExcuteCancellingInvoicebienlai","DuyetHoaDon","renderFormat","changeValue","table_chitiet","table_phi","arrayString_chitiet","field_name","decimal_format","format_numeric","formatSoDefault","formatSo","format_config","getColumnConfig","row","editStop","clearSelection","isNumber","CheckExistKeySession","getAllHD_ValidateHD","returnData","commonHD","mau04","fmNumber","mess","tooltip","fullscreen","move","onBeforeShow","rows","onTimedKeyPress","re","scrollX","tabbar","cells","padding-bottom","onItemClick","isUndefined","getEditState","unselect","showColumn","hideColumn","drag","data->onStoreUpdated","each","stt","onAfterLoad","ck","onCheck","onAfterAdd","tong_tien_tt_dp","tong_tien_thue_dp","tong_tien_ck_dp","tong_tien_dp","onAfterDelete","tien_tt_all","tien_thue_all","tien_ck_all","tien_tt_10","tien_thue_10","tien_ck_10","tong_tien_10","tien_tt_5","tien_thue_5","tien_ck_5","tong_tien_5","tien_tt_0","tien_thue_0","tien_ck_0","tong_tien_0","tien_tt_k","tien_thue_k","tien_ck_k","tong_tien_k","tien_tt_kct","tien_thue_kct","tien_ck_kct","tong_tien_kct","tien_tt_kkk","tien_thue_kkk","tien_ck_kkk","tong_tien_kkk","tien_chietkhauthuongmai","onAfterEditStop","table_inv_views","item_inv","item_note","getItem","columnId","so_luong","sluong","don_gia","dgia","tien_tt","thtien","pt_ck","tlckhau","tien_ck","stckhau","pt_thue","tsuat","tien_thue","tthue","tgtien","parseFloat","tsuatstr","tienphi","tien_phi_moi","padding-left","font-weight","background-color","labelAlign","oldValue","tong_tien_cu","record","it","bool","phi","item1","data_post","sign","nguoinhan","email","tieude","idMau04","_res","winconfig","tablePhi","urlPhi","getFormat","values","footer","scheme","sort","bangmotaloiCQT","rowLineHeight","fullScreen","fixedRowHeight","ShowResponseMessage","cell","time","mltdiep_gui","adjustRowHeight","row_id","getFirstId","bangkebanraForm","controls","rpParameter","box","file","Blob","fileURL","URL","createObjectURL","download","common","$level","treetable","$count","ky_hieu","colspan","so_hd","decimalOptional","pager","$group","by","openAll","size","group","convertTypeToFileFormat","fileFormat","handleProcessFileInfo","processFileInfo","fileInfo","loadingIcon","statusProcess","loading","actionIcon","actionProcess","process","fileType","clickAction","sucessEvent","listFileProcess","onSuccess","errorEvent","paramRequest","param","me","choose","removeItem","onDownLoad","checkFileProcess","rs","itemId","getIdByIndex","checkItemLoading","isLoading","closeWindow","genHeader","headerComp","manager-file-down","className","htmlElement","contains","manager-file-close-button","DataCollection","getIconFile","bodyComp","elementId","closest","handleFileDownLoad","fileProcessInfor","isCheckAdd","headerTitle","autohide","handleFile","formatDate","dd","getDate","padStart","MM","YYYY","hh","getHours","mm","getMinutes","ss","getSeconds","formattedDate","textErr","newWindow","revokeObjectURL","startYear","endYear","years","newYear","currentFromDate","currentToDate","setFullYear","isquy","danhsachgiamtru","fm","decimalSizeDefault","lstTemp","putData","lhhoa","errorMessenger","frm","tong_gt","tong_phi","minWidth","minHeight","setParams","bangdanhsachhoadon","getNgay","day","ds_hdon","limit","apiIndex","tgtcthue","tgtthue","tgtttoan","tgtkhac","tgtphi","lanDau","loaiHangHoa","bangtonghopform","hoadonHistory","exportExcelMulti","selectedItems","idItems","par","datafetch","continue","property","columnType","filterType","urlTemp","tax_code","trang_thai","$el","databth","datachon","khData","btnRefresh","newWin","write","dataTable","selectedRecords","exportType","ldau","ket_qua","tableexcel","urlget","toExcel","rawValues","tableDK","layoutDK","data_id","data_id_xd","parameters_list","DowloadBTHLDRep","InBTHDLRep","ShowHistory","onItemDblClick","btnEdit","loai_tbao","closed","batch","groupText","loaibth","xml_nhan","setId","bangtonghop_id","bangtonghopdl_68_id","tel","address","connectToSignalR","urlIndex","urls","hubConnection","useDefaultPath","createHubProxy","disconnected","isConnected","isLocked","connection","userApp","chon1","isWindowXP","ws","WebSocket","onclose","onClose","str2","onopen","execCommand","OPEN","fn_in","onmessage","onOpen","setLocked","locked","getLocked","autowidth","ttchuc","seri","tngay","dngay","hthuc","ctsHSM","ltkhai","cks","manage","dangkysudung","mau01_id","dowloadXmlDKSD","btndowloadXMLRep","btndowloadXMLRepTiepNhan","ketqua_tiepnhan","InMau01","InMau02","InMau03","onBeforeLoad","showOverlay","hideOverlay","report_id","infoWindowId","infoparam","infowindow_id","tlhdunhiem","khmhdon","khhdunhiem","mstunhiem","ttcdunhiem","mdunhiem","thunhiem","pttthdunhiem","tableUyNhiem","uynhiems","urlUyNhiem","xml_thongdiep","grid","tlbParams","childViews","child","historyid","reg_id","datatable","items","onblur","ldo","onBeforeEditStart","check_HSM","cqt_ql","city","manage_tax_authorities","controls2","dateFormatStr","pagination","ttthue_total","tckhau_total","tthue_total","ttsthue_total","mau04form","huyhoadonchitietform","hoadonform","multiview","onBeforeTabClick","builder","onAfterRender","huyhoadon_1","subChucNang","padding","btnPlus","$template","ExceptionMessage","sendemail","nguoi_gui","sender","subject","noidung","mat_khau","pass","inv_invoiceauth_id","his_email","lst_email","hdon68","alias","invs","tlbparam_s","countkyHieu","urlMiniDashBoard","onColumnResize","onSubViewCreate","subView","fitBiggest","error_status","rcheckbox","checked","mini_dashboard","combo","uploadForm","excel_id","onChangeKhmbl","dt","yearlast","khhdon","loaikh","onchange","khm","khhd","kyhieuForm","selectedselectedItem","value_field","tt_sd","qlkhsdung_id","regText","lhdon","khdon","donginmau","sdmau","kyhieu","dataPost","loaihd","signMode","cqt","setValuesEdit","form_0405","headerRowHeight","Dowload0405","Dowload0405Rep","InMau0405","InMau0405Rep","checkHD78","table1","detail","is_hdon78","arrid","errarr","erri","hasError","tttnhan","cqtphoi","link","accept","autosend","multiple","onUploadComplete","onFileUploadError","mauthietkeform","loaimau","dmmauhoadon_id","checkmaubangke","donVi","tlbParam","subBangKe","subPhieuThu","checkmauphieuthu","decimal_point","thousand_point","phanhoadon_78_id","isActiveDbClick","arrayParam","branchcode","sosudung","total","find","used","available","removeView","addView","tien","toLocaleString","kyhieu_id","columnlst","arrcolumn","exporttype","preventDefault","stopPropagation","lsHodonId","ttthdon","htmlSoBanGhi","first","prev","last","startDate","hoursDiff","getTimezoneOffset","minutesDiff","setHours","setMinutes","endDate","dataCount","window_type","email_sso","itemData","dtChuKySo","dtMauHoaDon","dtDonvi","is_new_user","is_sign_invoice","is_sign_invoice_hsm","is_view_user","is_edit_user","is_del_user","resizeRow","ngay_bd_sd","dtMauHoaDon68","ckspermission","invtemppermission","invoicepermission","issigninvoice","issigninvoicehsm","isviewuser","isedituser","isdeluser","isnewuser","dmwindowform","account_hsm","accountpermission","cb","is_sso","store_code","inputNode","getInputNode","inputType","onBlur","passwordRegex","errorLabel","createElement","color","marginTop","appendChild","newpass","confirmpass","proxy","gravity","string","ten_dvcs","ms_thue","nguoi_lien_he","sdt","teamview","noi_dung","sdt_nguoi_lien_he","ultra_teamview","getWarning","getInfocompany","getMST","GetSchema","otp","apiUrl","sso","userData","userInfo","changepass","chat","hotroform","link_sso","autofit","dataList","tgian_gui","contentnotify","borderRadius","showNotify","Touch","background","padding-top","openAction","onMenuItemClick","getMenuItem","window_id","_URL","subsign","getApiHost","protoUI","$skin","defaults","aheight","_set_inner_size","tree","folder","dir","profile","notify","menuBar","apiHost","dvcs","bear","owner","Message","mainToolbar","js","_originalShow","bangkebanra","wininfoparam","_date","wb_infowindow_id","window_width","window_height","view_extension","formValues","rows_max","el","default_value","defaultValue","wb_references_id","radio_id","win_id","radio","menuitem","formvalues","setParentValue","windowId","formParent","col","rp","max_row","vc_window","tabs","Tabs","after_save","COLUMN_TYPE","tab_type","subCols","Fields","parentView","childview","DEFAULT_VALUE","tab_table","tab_id","select_change","list","old","onSelectChange","getSelectedId","tab_row","windowid","tableParent","setFocus","toolbar","btnChon","masterTab","hide_in_grid","type_filter","getObjects","objects","findAndReplace","object","getKeys","editwindow","findJson","REFID","editorvalue","res_b","doc_id","model","parentCodeParam","keepViews","detail_layout","layoutdetail","layout_element","json_layout","jsonElement","topParentView","field_express","font-size","formData","wb_excel_id","cell_editstop","after_addrow","after_delrow","oncheck","btnMinus","btnCopy","myJsonString","before_save","focusFirstElement","dataParam","infowindow","windowform","initData","parentParamter","parentParameter","parentRow","PARAMETERS","getContext","MA_CT","WINDOW_ID","DOC_ID","a_result","ctx","detailreport","MENU_ID","$change","BOLD","$css","onBeforeContextMenu","mn","setTableId","REPORT_ID","CAPTION","attachTo","REPORTCOLUMN_FIELD","REPORTCOLUMN_NAME","REPORTCOLUMN_WIDTH","HIDDEN","HEADER","hd","initTable","wb_report_id","isFooter","header_title","data_type","cbReport","reportItem","export_name","getText","headermenu","tu_ngay","den_ngay","server_cert","popupText","certs","paddingTop","tokenSerial","upload","phone","user_id","lstError","pop","CSS","p_id","dien_giai","quyen","barWidth","radius","gradient","preset","xAxis","lines","yAxis","step","legend","valign","marker","eventRadius","series","alpha","borderColor","linkSSO","dashline_license","dashline78new","dashline_bienlai","dashline_chungtu","chart","thongbaosso","changeweakpass","noti","notes","form_filter","border-radius","lastday","loadUrl_HD","loadUrl_BL","loadUrl_CT","winthongbaosso","template_code","invoice_series","item3","remaining","datecert","convertcert","checkdatecert","datenow","convernow","checkdatenow","ngayhethan","checkdate","lisence_to","SetData","GetData","ClearData","listKey","dmfieldform","loadData","tabId","submenu","numberRow","wb_tab_id","tabCombo","loadahead","dmhvform","ten_hv","dmtabform","language_code","key_lang","op","ID","WINDOW_NAME","wb_window_id","tab_name","loadDmWindowData","signOnServerFile","refUri","certSerial","signId","signTag","inv_InvoiceAuth_id","gia_tri","signOnServer","exportExcel","exportFormat","KyHoaDon","wintable","cert_type","resultTime","origin","lstCert","laySoHoaDon","TuChoiHoaDon","invoice_issued_date","ngay_hd","showPopup","ma","btnReject","fName","WinParams","loaichuyendai_id","hoadonSaveChangePath","hoadonSaveChange","saveCustomerPath","saveCustomer","hoadon68CallApis","customerCallApis","dataFormHd78","modeChangeView","tongtienHDonBke","tongtienthueHDonBke","isSaveCustomerInfo","tongtienBangKeCT","tongtienthueBangKeCT","mauso","tudongtinhtien","isHasDiscount","mnmuaValue","tenValue","mstValue","dchiValue","checkMessage","showConfirmUI","afterSaveInvoiceSuccess","afterSaveInvoiceError","TTKhac","ttruong","kdlieu","dlieu","TTKhacItem","buyer_name","bank_account","bank_name","name_label","address_label","catch","editgiatri","docngoaitetv","urlKhac","setValuesBangKe","setNewInvoice","newInvoice","foreign_key","item_inf","ignore","SetDefaultValue","onresize","once","onBeforeRender","StringToFunc","funcReg","StringToFunc2","svban","nvban","lydo","setValuesBienBan","setHideBtnDelete","btnPrint","dowloadXml","bienbanForm","hoadonlq","on_click","checksobangke","excel_id_param","hasBienBan","after_new","after_edit","lstDataChooseSort","ShowHistory2","sizeToContent","donvitien","sub_col","kihieuRefId","initComponents","_windowconfig","columnAlias","column_alias","columnFormat","value_filter","isDefault","has_default","comboId","validateFunc","onEnter","loadUrl","menus","is_group_function","btnChucNang","khID","$onDestruct","Clear","lhdclquan","khmshdclquan","case","dvtte","htttoan","isn","hdonids","_hdonids","countObj","inputWidth","_countObj","countAll","countSuccess","countFailure","winForm","maxsoluong","newselectedItem","list_number","head_name","col1","hvData","tlkthu","setcompany","phanloaihd","record_phi","checkmtt","showWarningMessage","inv_InvoiceCode_id","promises","arrays","cerSerial","txtCer","signCertFile","inv","d1","tableHD","sl_dk_them","interVal","clearInterval","key_license","sl_hd","checkHasComp","multiComboBranch","multiComboKH","toLowerCase","files","fileDialog","onBeforeFileAdd","typeList","onAfterFileAdd","reader","FileReader","arrayBuffer","Uint8Array","array1","from","ten_file","file_data","loai_file","readAsArrayBuffer","apiOnly","txtHinhThuc","sttMau","ten_cty","dia_chi","unbind","stopUpload","sizetext","fileSize","txtSolien","sl_invoice_type_id","txtMauso","so_lien","mau_so","txtLoaihd","hinhthuc","ma_loai","wb_nhomquyen_id","idKey","parentId","trtChucNang","wb_role_id","checkItem","trtBaoCao","threeState","checkbox","onHeaderClick","chk","getElementById","uncheckItem","tblChucnang","tblBaoCao","checkedItems","getChecked","wb_ctquyen","wb_ctquyenrp","wb_menu_id","them","sua","xoa","box-shadow","quantity","createdondate","toUTCString","pl_licence_branch_id","fitMaster","itemdoc","newValues","separator","window_name","WINDOWNO","TAB_TYPE","row_tab","borderWidth","tokhai_thang","tokhai_quy","mau_312","mau_310","nguoi_dai_dien","nguoi_lap","Conten-type","editaction","render","dataBC","ngay_lap","input","bc_soluong","urlCheck","uploader","removeChild","endsWith","checkTien","fileData","workbook","XLSX","read","firstSheetName","SheetNames","firstSheet","Sheets","range","utils","decode_range","totalColumns","cellAddress","encode_cell","checkErro","isGiamTru","columnIds","parent_code","schema","schema_name","content-type","ma_dt","code_customer","image","serialNumber","signOnCertFile","invoice_number","ngayvb","sovb","ghi_chu","xmlData","nhom","licenseForm","framePdf","floderId","isEmpty","quenmk","rememberme","_ma_dvcs","host_name","realm_name","client_id","response_type","temlate","getParameterByName","currentUrl","urlParams","URLSearchParams","login_type","redirect_uri_api","invoiceNumber","fileUrl","clearTimeout","totalAmountWithoutVat","vatAmount","trang_thai_mau","template_status","newwin","c_results","token_serial","invoice_type","copy_number","row_print_template","queryView","$obj","tableAlias","inv_content","activeTitle","onBeforeSelect","onAfterSelect","itemValue","branch_id","tblData","branchCode","btnEditRegister","setItemValue","loadDataReport","reportTable","searchForm","paramFilter","typingFilter","ma_ct","parentToolBar","toolBarParams","vc_infowindow_id","cbMauIn","CODE","detailTables","onSubViewOpen","getSubView","notEditMode","tinhhinhsudungform","donvi","thangcb","cbnam","ssk","year2","month2","date2","firstDay2","lastDay2","tokens","serial_number","tlbparam","url1","loadDataCustom","defaultBody","mergeObject","obj1","obj2","mergedObj","dataParams","url_help","isPlusIcon","formatColumn","FORMAT","prCodeComp","parent_id","nodeId","margin-top","formUpdate","tabview","MA","TEN_DM","TEN_CT","_waitEditor","defer","_init_ckeditor_once","tid","textAreaID","innerHTML","_3rd_editor","CKEDITOR","$width","$height","_render_ckeditor","initMethod","editorType","disableAutoInline","barHeight","$setSize","setData","getData","_focus_await","getEditor","waitEditor","EditAbility","templateCommon","dataview","_contentobj","firstChild","$ready","google","maps","_initMap","script","Map","zoom","center","LatLng","mapTypeId","MapTypeId","mapType","_ldGMap","center_setter","setCenter","mapType_setter","setMapTypeId","zoom_setter","setZoom","printf","changeMultiChoice","toArray","insertAt","removeAt","deleteMultiChoice","eachRow","colMultiChoice","fix_left","fix_right","original_invoice_id","buyer_email","cbTypeIn","wb_mauin_id","mimetype","trang_thai_hd","dadung","cloneItem","suffix","mauin","leftSplit","rightSplit","hover","hideItem","showItem","insert_cmd","update_cmd","delete_cmd","decimal_place","maximumValue","minValue","codewindow","TUCHOI","dangnhap","DONVI","DANGKY","QUENMK","USERNAME","PASSWORD","REMEMBERME","DANGNHAP","DANGNHAPSSO","THEM","SUA","XOA","COPY","MAU_HD","KY_HIEU","MAUIN","SO_HDON","NGAY_HDON","TEN_DON_VI","TEN_NGUOI_MUA","SO_DH","MA_DT","MS_THUE","DIA_CHI","TK_BEN_MUA","NGAN_HANG_BEN_MUA","TK_BEN_BAN","NGAN_HANG_BEN_BAN","HT_TT","PRINT","MA_HV","TEN_HV","DVT","SO_LUONG","GIA","TIEN","PT_CK","TIEN_CK","MA_THUE","TIEN_THUE","THANH_TIEN","TEN","DUYET","PHAN_QUYEN","CHUC_NANG","BAO_CAO","TEN_CHUC_NANG","TEN_MAU","LOAI_HOA_DON","HINH_THUC","MAU_SO","SO_LIEN","DA_KY","TRANG_THAI_MAU","NGAY_TB","NGUOI_DAI_DIEN_PL","DON_VI_CHU_QUAN","CO_QUAN_THUE_NHAN_TB","TRANG_THAI","MA_LOAI","TEN_LOAI","TU_SO","DEN_SO","NGAY_BD_SD","DN_IN","MAU_HDON","TEN_DT","CHUC_VU","DIEN_THOAI","DAI_DIEN","SU_DUNG","EXPORT_XML","NGUOI_KY","SO_SERIAL","MA_DVT","TEN_DVT","CHU_KY_SO","CHON","TINH_THANH","NGAY_BD_NAM_TC","TAI_KHOAN","TAI_NH","EMAIL","SUBJECTNAME","SIGN","KY_HOA_DON","DC_DINH_DANH","SOVB","NGAYVB","DIEN_GIAI","SEARCH","TIM_CHI_TIET","NGUOI_LAP","TRANG_THAI_HDON","TU_NGAY","DEN_NGAY","NGUOI_NHAN","TIEU_DE","NOI_DUNG","SEND_EMAIL_INVOICE","KHUYEN_MAI","TIEU_THUC","DC_TANG","DC_GIAM","HDON_THAY_THE","REFRESH","EXPORT","EXPORT_EXCEL","XOA_BO","MST_BEN_BAN","MST_BEN_MUA","HDON_CT_BRA","TIEN_TRUOC_THUE","TIEN_THUE_10","TIEN_THUE_05","TIEN_THUE_00","KHONG_CHIU_THUE","KHONG_KK","GHI_CHU","IMPORT_EXCEL","NGUOI_GUI","KY_HOA_DON_CHO_KY","SMTP_SERVER","SMTP_PORT","enableSSL","LOAI","SEND_EMAIL_CONFIRM","NHOM","GIA_BAN","DANG_KY","SL_HD_DK","KEY_LICENSE","SL_HD_THEM","GIA_TRI","NGAY_BAT_DAU","NGAY_KET_THUC","TOKEN_SERIAL","CHUYEN_DOI","SO_TK","from_number","to_number","amount_to_word","INVOICE_STATUS","buyer_taxcode","buyer_legal_name","total_amount_without_vat","discount_amount","vat_amount","buyer_bank_account","buyer_bank_name","buyer_address_line","customer_code","item_name","item_code","unit_code","unit_price","discount_percentage","tax_type","promotion","buyer_display_name","payment_method_name","NAME","PL_CUSTOMER_GROUP_ID","TAX_CODE","BUYER_NAME","TEL","MOBILE","ADDRESS","PL_GOODS_GROUP_ID","UNIT_CODE","VAT_TYPE","UNIT_PRICE","VAT_PERCENTAGE","BANK_ACCOUNT","BANK_NAME","COMPANY_NAME","NOTIFICATION_DATE","TAXCODE","INVOICE_TYPE","QUANTITY","INVOICE_SERIES","FROM_NUMBER","TO_NUMBER","TEMPLATE_CODE","QUANTITY_DECIMAL","PRICE_DECIMAL","BEGIN_DATE","MST","TEN_NCC","THUONG_HIEU","LINK_TRACUU","Bạn chưa chọn hóa đơn","IMPORT_EXCEL_CT","ten_dt","BRANCH_CODE","REGISTER_LICENCE","NGAY_HET_HAN","CHON_BOCHON","QUYEN_TRUY_CAP_HD","IS_VIEW_USER","IS_EDIT_USER","IS_DEL_USER","IS_NEW_USER","KY_HOA_DON_HSM","DANG_KY_LAN_DAU","DANG_KY_THEM","THONG_BAO","TAI_FILE_MAU","MA_NT","TEN_NT","TY_GIA","TEN_NH","IN_CHUYEN_DOI","NGUOI_IN_CDOI","NGAY_IN_CDOI","PHAN_CACH_HANG_NGHIN","PHAN_CACH_THAP_PHAN","PRINT_INVOICE_HTML","DEL_CACHE","LOGOUT","CHANGE_PASS","CHANGE_PASS_SSO","SO_BANG_KE","TAO_HD","LIST_DATE","LIST_NUMBER","MA_CHUNGTU","NGAY_CHUNGTU","SO_CHUNGTU","PT_THUE","TEN_DV","TONG_TIEN","MA_DVCS","TEN_NHV","USER_TRACUU","MA_HANG","TEN_HANG","DON_GIA","DOANH_THU","THUE_SUAT","GIO_TB","PHUONG_PHAP_HUY","NGAY_LAP_TB","NGUOI_LAP_BIEU","PATH","KET_XUAT_EXCEL","PARENT_ID","CURRENT_NUMBER","is_main","LINK_SSO"],"mappings":"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","file":"app.js","sourcesContent":["\n/**\r\n * @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\r\n * Available via the MIT or new BSD license.\r\n * see: http://github.com/jrburke/almond for details\r\n */\r\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\r\n//be followed.\r\n/*jslint sloppy: true */\r\n/*global setTimeout: false */\r\n\r\nvar requirejs, require, define;\r\n(function (undef) {\r\n var main, req, makeMap, handlers,\r\n defined = {},\r\n waiting = {},\r\n config = {},\r\n defining = {},\r\n hasOwn = Object.prototype.hasOwnProperty,\r\n aps = [].slice,\r\n jsSuffixRegExp = /\\.js$/;\r\n\r\n function hasProp(obj, prop) {\r\n return hasOwn.call(obj, prop);\r\n }\r\n\r\n /**\r\n * Given a relative module name, like ./something, normalize it to\r\n * a real name that can be mapped to a path.\r\n * @param {String} name the relative name\r\n * @param {String} baseName a real name that the name arg is relative\r\n * to.\r\n * @returns {String} normalized name\r\n */\r\n function normalize(name, baseName) {\r\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\r\n foundI, foundStarMap, starI, i, j, part,\r\n baseParts = baseName && baseName.split(\"/\"),\r\n map = config.map,\r\n starMap = (map && map['*']) || {};\r\n\r\n //Adjust any relative paths.\r\n if (name && name.charAt(0) === \".\") {\r\n //If have a base name, try to normalize against it,\r\n //otherwise, assume it is a top-level require that will\r\n //be relative to baseUrl in the end.\r\n if (baseName) {\r\n //Convert baseName to array, and lop off the last part,\r\n //so that . matches that \"directory\" and not name of the baseName's\r\n //module. For instance, baseName of \"one/two/three\", maps to\r\n //\"one/two/three.js\", but we want the directory, \"one/two\" for\r\n //this normalization.\r\n baseParts = baseParts.slice(0, baseParts.length - 1);\r\n name = name.split('/');\r\n lastIndex = name.length - 1;\r\n\r\n // Node .js allowance:\r\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\r\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\r\n }\r\n\r\n name = baseParts.concat(name);\r\n\r\n //start trimDots\r\n for (i = 0; i < name.length; i += 1) {\r\n part = name[i];\r\n if (part === \".\") {\r\n name.splice(i, 1);\r\n i -= 1;\r\n } else if (part === \"..\") {\r\n if (i === 1 && (name[2] === '..' || name[0] === '..')) {\r\n //End of the line. Keep at least one non-dot\r\n //path segment at the front so it can be mapped\r\n //correctly to disk. Otherwise, there is likely\r\n //no path mapping for a path starting with '..'.\r\n //This can still fail, but catches the most reasonable\r\n //uses of ..\r\n break;\r\n } else if (i > 0) {\r\n name.splice(i - 1, 2);\r\n i -= 2;\r\n }\r\n }\r\n }\r\n //end trimDots\r\n\r\n name = name.join(\"/\");\r\n } else if (name.indexOf('./') === 0) {\r\n // No baseName, so this is ID is resolved relative\r\n // to baseUrl, pull off the leading dot.\r\n name = name.substring(2);\r\n }\r\n }\r\n\r\n //Apply map config if available.\r\n if ((baseParts || starMap) && map) {\r\n nameParts = name.split('/');\r\n\r\n for (i = nameParts.length; i > 0; i -= 1) {\r\n nameSegment = nameParts.slice(0, i).join(\"/\");\r\n\r\n if (baseParts) {\r\n //Find the longest baseName segment match in the config.\r\n //So, do joins on the biggest to smallest lengths of baseParts.\r\n for (j = baseParts.length; j > 0; j -= 1) {\r\n mapValue = map[baseParts.slice(0, j).join('/')];\r\n\r\n //baseName segment has config, find if it has one for\r\n //this name.\r\n if (mapValue) {\r\n mapValue = mapValue[nameSegment];\r\n if (mapValue) {\r\n //Match, update name to the new value.\r\n foundMap = mapValue;\r\n foundI = i;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (foundMap) {\r\n break;\r\n }\r\n\r\n //Check for a star map match, but just hold on to it,\r\n //if there is a shorter segment match later in a matching\r\n //config, then favor over this star map.\r\n if (!foundStarMap && starMap && starMap[nameSegment]) {\r\n foundStarMap = starMap[nameSegment];\r\n starI = i;\r\n }\r\n }\r\n\r\n if (!foundMap && foundStarMap) {\r\n foundMap = foundStarMap;\r\n foundI = starI;\r\n }\r\n\r\n if (foundMap) {\r\n nameParts.splice(0, foundI, foundMap);\r\n name = nameParts.join('/');\r\n }\r\n }\r\n\r\n return name;\r\n }\r\n\r\n function makeRequire(relName, forceSync) {\r\n return function () {\r\n //A version of a require function that passes a moduleName\r\n //value for items that may need to\r\n //look up paths relative to the moduleName\r\n return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync]));\r\n };\r\n }\r\n\r\n function makeNormalize(relName) {\r\n return function (name) {\r\n return normalize(name, relName);\r\n };\r\n }\r\n\r\n function makeLoad(depName) {\r\n return function (value) {\r\n defined[depName] = value;\r\n };\r\n }\r\n\r\n function callDep(name) {\r\n if (hasProp(waiting, name)) {\r\n var args = waiting[name];\r\n delete waiting[name];\r\n defining[name] = true;\r\n main.apply(undef, args);\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\r\n throw new Error('No ' + name);\r\n }\r\n return defined[name];\r\n }\r\n\r\n //Turns a plugin!resource to [plugin, resource]\r\n //with the plugin being undefined if the name\r\n //did not have a plugin prefix.\r\n function splitPrefix(name) {\r\n var prefix,\r\n index = name ? name.indexOf('!') : -1;\r\n if (index > -1) {\r\n prefix = name.substring(0, index);\r\n name = name.substring(index + 1, name.length);\r\n }\r\n return [prefix, name];\r\n }\r\n\r\n /**\r\n * Makes a name map, normalizing the name, and using a plugin\r\n * for normalization if necessary. Grabs a ref to plugin\r\n * too, as an optimization.\r\n */\r\n makeMap = function (name, relName) {\r\n var plugin,\r\n parts = splitPrefix(name),\r\n prefix = parts[0];\r\n\r\n name = parts[1];\r\n\r\n if (prefix) {\r\n prefix = normalize(prefix, relName);\r\n plugin = callDep(prefix);\r\n }\r\n\r\n //Normalize according\r\n if (prefix) {\r\n if (plugin && plugin.normalize) {\r\n name = plugin.normalize(name, makeNormalize(relName));\r\n } else {\r\n name = normalize(name, relName);\r\n }\r\n } else {\r\n name = normalize(name, relName);\r\n parts = splitPrefix(name);\r\n prefix = parts[0];\r\n name = parts[1];\r\n if (prefix) {\r\n plugin = callDep(prefix);\r\n }\r\n }\r\n\r\n //Using ridiculous property names for space reasons\r\n return {\r\n f: prefix ? prefix + '!' + name : name, //fullName\r\n n: name,\r\n pr: prefix,\r\n p: plugin\r\n };\r\n };\r\n\r\n function makeConfig(name) {\r\n return function () {\r\n return (config && config.config && config.config[name]) || {};\r\n };\r\n }\r\n\r\n handlers = {\r\n require: function (name) {\r\n return makeRequire(name);\r\n },\r\n exports: function (name) {\r\n var e = defined[name];\r\n if (typeof e !== 'undefined') {\r\n return e;\r\n } else {\r\n return (defined[name] = {});\r\n }\r\n },\r\n module: function (name) {\r\n return {\r\n id: name,\r\n uri: '',\r\n exports: defined[name],\r\n config: makeConfig(name)\r\n };\r\n }\r\n };\r\n\r\n main = function (name, deps, callback, relName) {\r\n var cjsModule, depName, ret, map, i,\r\n args = [],\r\n callbackType = typeof callback,\r\n usingExports;\r\n\r\n //Use name if no relName\r\n relName = relName || name;\r\n\r\n //Call the callback to define the module, if necessary.\r\n if (callbackType === 'undefined' || callbackType === 'function') {\r\n //Pull out the defined dependencies and pass the ordered\r\n //values to the callback.\r\n //Default to [require, exports, module] if no deps\r\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\r\n for (i = 0; i < deps.length; i += 1) {\r\n map = makeMap(deps[i], relName);\r\n depName = map.f;\r\n\r\n //Fast path CommonJS standard dependencies.\r\n if (depName === \"require\") {\r\n args[i] = handlers.require(name);\r\n } else if (depName === \"exports\") {\r\n //CommonJS module spec 1.1\r\n args[i] = handlers.exports(name);\r\n usingExports = true;\r\n } else if (depName === \"module\") {\r\n //CommonJS module spec 1.1\r\n cjsModule = args[i] = handlers.module(name);\r\n } else if (hasProp(defined, depName) ||\r\n hasProp(waiting, depName) ||\r\n hasProp(defining, depName)) {\r\n args[i] = callDep(depName);\r\n } else if (map.p) {\r\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\r\n args[i] = defined[depName];\r\n } else {\r\n throw new Error(name + ' missing ' + depName);\r\n }\r\n }\r\n\r\n ret = callback ? callback.apply(defined[name], args) : undefined;\r\n\r\n if (name) {\r\n //If setting exports via \"module\" is in play,\r\n //favor that over return value and exports. After that,\r\n //favor a non-undefined return value over exports use.\r\n if (cjsModule && cjsModule.exports !== undef &&\r\n cjsModule.exports !== defined[name]) {\r\n defined[name] = cjsModule.exports;\r\n } else if (ret !== undef || !usingExports) {\r\n //Use the return value from the function.\r\n defined[name] = ret;\r\n }\r\n }\r\n } else if (name) {\r\n //May just be an object definition for the module. Only\r\n //worry about defining if have a module name.\r\n defined[name] = callback;\r\n }\r\n };\r\n\r\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\r\n if (typeof deps === \"string\") {\r\n if (handlers[deps]) {\r\n //callback in this case is really relName\r\n return handlers[deps](callback);\r\n }\r\n //Just return the module wanted. In this scenario, the\r\n //deps arg is the module name, and second arg (if passed)\r\n //is just the relName.\r\n //Normalize module name, if it contains . or ..\r\n return callDep(makeMap(deps, callback).f);\r\n } else if (!deps.splice) {\r\n //deps is a config object, not an array.\r\n config = deps;\r\n if (config.deps) {\r\n req(config.deps, config.callback);\r\n }\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n if (callback.splice) {\r\n //callback is an array, which means it is a dependency list.\r\n //Adjust args if there are dependencies\r\n deps = callback;\r\n callback = relName;\r\n relName = null;\r\n } else {\r\n deps = undef;\r\n }\r\n }\r\n\r\n //Support require(['a'])\r\n callback = callback || function () {};\r\n\r\n //If relName is a function, it is an errback handler,\r\n //so remove it.\r\n if (typeof relName === 'function') {\r\n relName = forceSync;\r\n forceSync = alt;\r\n }\r\n\r\n //Simulate async callback;\r\n if (forceSync) {\r\n main(undef, deps, callback, relName);\r\n } else {\r\n //Using a non-zero value because of concern for what old browsers\r\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\r\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\r\n //If want a value immediately, use require('id') instead -- something\r\n //that works in almond on the global level, but not guaranteed and\r\n //unlikely to work in other AMD implementations.\r\n setTimeout(function () {\r\n main(undef, deps, callback, relName);\r\n }, 4);\r\n }\r\n\r\n return req;\r\n };\r\n\r\n /**\r\n * Just drops the config on the floor, but returns req in case\r\n * the config return value is used.\r\n */\r\n req.config = function (cfg) {\r\n return req(cfg);\r\n };\r\n\r\n /**\r\n * Expose module registry for debugging and tooling\r\n */\r\n requirejs._defined = defined;\r\n\r\n define = function (name, deps, callback) {\r\n\r\n //This module may not have dependencies\r\n if (!deps.splice) {\r\n //deps is not an array, so probably means\r\n //an object literal or factory function for\r\n //the value. Adjust args.\r\n callback = deps;\r\n deps = [];\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\r\n waiting[name] = [name, deps, callback];\r\n }\r\n };\r\n\r\n define.amd = {\r\n jQuery: true\r\n };\r\n}());\ndefine(\"libs/almond.js\", function(){});\n\n/*!\r\n * routie - a tiny hash router\r\n * v0.3.2\r\n * http://projects.jga.me/routie\r\n * copyright Greg Allen 2013\r\n * MIT License\r\n*/\r\n(function(n){var e=[],t={},r=\"routie\",o=n[r],i=function(n,e){this.name=e,this.path=n,this.keys=[],this.fns=[],this.params={},this.regex=a(this.path,this.keys,!1,!1)};i.prototype.addHandler=function(n){this.fns.push(n)},i.prototype.removeHandler=function(n){for(var e=0,t=this.fns.length;t>e;e++){var r=this.fns[e];if(n==r)return this.fns.splice(e,1),void 0}},i.prototype.run=function(n){for(var e=0,t=this.fns.length;t>e;e++)this.fns[e].apply(this,n)},i.prototype.match=function(n,e){var t=this.regex.exec(n);if(!t)return!1;for(var r=1,o=t.length;o>r;++r){var i=this.keys[r-1],a=\"string\"==typeof t[r]?decodeURIComponent(t[r]):t[r];i&&(this.params[i.name]=a),e.push(a)}return!0},i.prototype.toURL=function(n){var e=this.path;for(var t in n)e=e.replace(\"/:\"+t,\"/\"+n[t]);if(e=e.replace(/\\/:.*\\?/g,\"/\").replace(/\\?/g,\"\"),-1!=e.indexOf(\":\"))throw Error(\"missing parameters for url: \"+e);return e};var a=function(n,e,t,r){return n instanceof RegExp?n:(n instanceof Array&&(n=\"(\"+n.join(\"|\")+\")\"),n=n.concat(r?\"\":\"/?\").replace(/\\/\\(/g,\"(?:/\").replace(/\\+/g,\"__plus__\").replace(/(\\/)?(\\.)?:(\\w+)(?:(\\(.*?\\)))?(\\?)?/g,function(n,t,r,o,i,a){return e.push({name:o,optional:!!a}),t=t||\"\",\"\"+(a?\"\":t)+\"(?:\"+(a?t:\"\")+(r||\"\")+(i||r&&\"([^/.]+?)\"||\"([^/]+?)\")+\")\"+(a||\"\")}).replace(/([\\/.])/g,\"\\\\$1\").replace(/__plus__/g,\"(.+)\").replace(/\\*/g,\"(.*)\"),RegExp(\"^\"+n+\"$\",t?\"\":\"i\"))},s=function(n,r){var o=n.split(\" \"),a=2==o.length?o[0]:null;n=2==o.length?o[1]:o[0],t[n]||(t[n]=new i(n,a),e.push(t[n])),t[n].addHandler(r)},h=function(n,e){if(\"function\"==typeof e)s(n,e),h.reload();else if(\"object\"==typeof n){for(var t in n)s(t,n[t]);h.reload()}else e===void 0&&h.navigate(n)};h.lookup=function(n,t){for(var r=0,o=e.length;o>r;r++){var i=e[r];if(i.name==n)return i.toURL(t)}},h.remove=function(n,e){var r=t[n];r&&r.removeHandler(e)},h.removeAll=function(){t={},e=[]},h.navigate=function(n,e){e=e||{};var t=e.silent||!1;t&&l(),setTimeout(function(){window.location.hash=n,t&&setTimeout(function(){p()},1)},1)},h.noConflict=function(){return n[r]=o,h};var f=function(){return window.location.hash.substring(1)},c=function(n,e){var t=[];return e.match(n,t)?(e.run(t),!0):!1},u=h.reload=function(){for(var n=f(),t=0,r=e.length;r>t;t++){var o=e[t];if(c(n,o))return}},p=function(){n.addEventListener?n.addEventListener(\"hashchange\",u,!1):n.attachEvent(\"onhashchange\",u)},l=function(){n.removeEventListener?n.removeEventListener(\"hashchange\",u):n.detachEvent(\"onhashchange\",u)};p(),n[r]=h})(window);\ndefine(\"libs/routie\", function(){});\n\ndefine('libs/core',[\r\n\t\"libs/routie\"\r\n],function(){\r\n\r\n\tfunction show(path, config){\r\n\t\tif (config == -1)\r\n\t\t\treturn render_sub_stack(this, path);\r\n\t\tif (this._subs[path])\r\n\t\t\treturn render_sub_stack(this._subs[path], config);\r\n\t\t\r\n\r\n\t\tvar scope = get_app_scope(this);\r\n\t\tvar index = this.index;\r\n\r\n\t\tif (typeof path == \"string\"){\r\n\t\t\tvar index = index;\r\n\r\n\t\t\t//child page\r\n\t\t\tif (path.indexOf(\"./\") === 0){\r\n\t\t\t\tindex++;\r\n\t\t\t\tpath = path.substr(2);\r\n\t\t\t}\r\n\r\n\t\t\t//route to page\r\n\t\t\tvar parsed = parse_parts(path);\r\n\t\t\tscope.path = scope.path.slice(0, index).concat(parsed);\r\n\t\t} else {\r\n\t\t\t//set parameters\r\n\t\t\twebix.extend(scope.path[index].params, path, true);\r\n\t\t}\r\n\r\n\t\tscope.show(url_string(scope.path), -1);\r\n\t}\r\n\r\n\tfunction get_app_scope(scope){\r\n\t\twhile(scope){\r\n\t\t\tif (scope.app)\r\n\t\t\t\treturn scope;\r\n\t\t\tscope = scope.parent;\r\n\t\t}\r\n\t\treturn app;\r\n\t}\r\n\r\n\tfunction url_string(stack){\r\n\t\tvar url = [];\r\n\t\tvar start = app.config.layout ? 1 : 0;\r\n\r\n\t\tfor (; start -1 ? test.substr(0, pos) : test), params:result };\r\n\t\t}\r\n\r\n\t\t//return array of page objects\r\n\t\treturn chunks;\r\n\t}\r\n\r\n\tfunction copy(obj, target, config){\r\n\t\tif (obj.$oninit)\r\n\t\t\tconfig._init.push(obj.$oninit);\r\n\t\tif (obj.$ondestroy)\r\n\t\t\tconfig._destroy.push(obj.$ondestroy);\r\n\t\tif (obj.$subview){\r\n\t\t\tif (typeof obj.$subview == \"string\"){\r\n\t\t\t\tvar tname = (config.name + \":subview:\"+obj.$subview);\r\n\t\t\t\tvar tobj = config._subs[obj.$subview] = { \r\n\t\t\t\t\tparent:this,\r\n\t\t\t\t\troot: tname,\r\n\t\t\t\t\tsub:subui,\r\n\t\t\t\t\tindex:0,\r\n\t\t\t\t\tapp:true\r\n\t\t\t\t};\r\n\r\n\t\t\t\tobj.id = tname;\r\n\t\t\t} else {\r\n\t\t\t\tobj = { id: (config.name + \":subview\") };\r\n\t\t\t\tconfig.$layout = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (obj.$ui)\r\n\t\t\tobj = obj.$ui;\r\n\t\tif (obj.$init){\r\n\t\t\treturn obj;\r\n\t\t}\r\n\t\r\n\t\ttarget = target || (webix.isArray(obj)?[]:{});\r\n\t\tfor (var method in obj){\r\n\t\t\tif(obj[method] && typeof obj[method] == \"object\" && !webix.isDate(obj[method])){\r\n\t\t\t\ttarget[method] = copy(obj[method], (webix.isArray(obj[method])?[]:{}), config);\r\n\t\t\t} else {\r\n\t\t\t\ttarget[method] = obj[method];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tfunction render_sub_stack(scope, path){\r\n\t\tif (scope.root)\r\n\t\t\tscope.root = webix.$$(scope.root);\r\n\r\n\t\tvar parts = parse_parts(path);\r\n\t\tscope.path = [].concat(parts);\r\n\t\trender_stack(scope, parts);\r\n\t}\r\n\r\n\tfunction render_stack(layout, stack){\r\n\t\tvar line = stack[0];\r\n\t\tif (line){\r\n\t\t\tvar url = line.page;\r\n\t\t\tvar issubpage = url.indexOf(\".\") === 0;\r\n\r\n\t\t\tif (issubpage)\r\n\t\t\t\turl = (layout.fullname||\"\")+url;\r\n\t\t\turl = url.replace(/\\./g,\"/\");\r\n\r\n\t\t\tif (run_plugins(require_plugins, url, line, stack, layout) === false) return;\r\n\r\n\t\t\trequire([\"views/\" + url], function(ui){\r\n\t\t\t\tstack.shift();\r\n\r\n\t\t\t\tvar next = layout.sub(ui, line, stack);\r\n\t\t\t\tif (next){\r\n\t\t\t\t\tnext.fullname = (issubpage ? (layout.fullname || \"\") : \"\") + line.page;\r\n\t\t\t\t\trender_stack(next, stack);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twebix.ui.$freeze = false;\r\n\t\t\t\t\twebix.ui.resize();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\twebix.ui.$freeze = false;\r\n\t\t\twebix.ui.resize();\r\n\t\t}\r\n\t}\r\n\r\n\tvar ui_plugins = [];\r\n\tvar url_plugins = [];\r\n\tvar require_plugins = [];\r\n\tfunction run_plugins(plugins, ui, name, stack, scope){\r\n\t\tfor (var i = 0; i < plugins.length; i++)\r\n\t\t\tif (plugins[i](ui, name, stack, scope) === false) return false;\r\n\t\treturn true;\r\n\t}\r\n\r\n\tvar app = {\r\n\t\tcreate:function(config){\r\n\t\t\t//init config\r\n\t\t\tapp.config = webix.extend({\r\n\t\t\t\tname:\"App\",\r\n\t\t\t\tversion:\"1.0\",\r\n\t\t\t\tcontainer: document.body,\r\n\t\t\t\tstart:\"/home\"\r\n\t\t\t}, config, true);\r\n\r\n\t\t\t//init self\r\n\t\t\tapp.debug = config.debug;\r\n\t\t\tapp.$layout = {\r\n\t\t\t\tsub:subui,\r\n\t\t\t\troot: app.config.container,\r\n\t\t\t\tindex:0,\r\n\t\t\t\tadd:true\r\n\t\t\t};\r\n\t\t\twebix.extend(app, webix.EventSystem);\r\n\r\n\t\t\t//show start page\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\twebix.ready(function(){\r\n\t\t\t\t\tapp.start();\r\n\t\t\t\t});\r\n\t\t\t},1);\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tvar node = app.config.container;\r\n\t\t\twebix.html.addCss(node, \"webixappstart\");\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\twebix.html.removeCss(node, \"webixappstart\");\r\n\t\t\t\twebix.html.addCss(node, \"webixapp\");\r\n\t\t\t}, 10);\r\n\r\n\t\t\treturn app;\r\n\t\t},\r\n\r\n\t\tui:create_temp_ui,\r\n\r\n\r\n\t\t//navigation\r\n\t\trouter:function(name){\r\n\t\t\tvar parts = parse_parts(name);\r\n\t\t\tapp.path = [].concat(parts);\r\n\r\n\t\t\t//webix.ui.$freeze = true;\r\n\t\t\trender_stack(app.$layout, parts);\r\n\t\t},\r\n\t\tshow:function(name, options){\r\n\t\t\troutie.navigate(\"!\"+name, options);\r\n\t\t},\r\n\t\tstart:function(name){\r\n\t\t\t//init routing\r\n\t\t\troutie(\"!*\",\t\tapp.router);\r\n\r\n\t\t\tif (!window.location.hash)\r\n\t\t\t\tapp.show(app.config.start);\r\n\t\t\t else {\r\n\t\t\t\twebix.ui.$freeze = false;\r\n\t\t\t\twebix.ui.resize();\r\n \t\t\t}\r\n \t\t},\r\n\r\n\r\n\t\t//plugins\r\n\t\tuse:function(handler, config){\r\n\t\t\tif (handler.$oninit)\r\n\t\t\t\thandler.$oninit(this, (config || {}) );\r\n\r\n\t\t\tif (handler.$onurlchange)\r\n\t\t\t\turl_plugins.push(handler.$onurlchange);\r\n\t\t\tif (handler.$onurl)\r\n\t\t\t\trequire_plugins.push(handler.$onurl);\r\n\t\t\tif (handler.$onui)\r\n\t\t\t\tui_plugins.push(handler.$onui);\r\n\t\t},\r\n\r\n\r\n\t\t//event helpers\r\n\t\ttrigger:function(name){\r\n\t\t\tapp.apply(name, [].splice.call(arguments, 1));\r\n\t\t},\r\n\t\tapply:function(name, data){\r\n\t\t\tapp.callEvent(name, data);\r\n\t\t},\r\n\t\taction:function(name){\r\n\t\t\treturn function(){\r\n\t\t\t\tapp.apply(name, arguments);\r\n\t\t\t};\r\n\t\t},\r\n\t\ton:function(name, handler){\r\n\t\t\tthis.attachEvent(name, handler);\r\n\t\t},\r\n\r\n\t\t_uis:[],\r\n\t\t_handlers:[]\r\n\t};\r\n\r\n\tfunction create_temp_event(obj, name, code){\r\n\t\tvar id = obj.attachEvent(name, code);\r\n\t\tthis._handlers.push({ obj:obj, id:id });\r\n\t\treturn id;\r\n\t}\r\n\r\n\tfunction create_temp_ui(module, container){\r\n\t\tvar view;\r\n\t\tvar temp = { _init:[], _destroy:[] };\r\n\t\tvar ui = copy(module, null, temp);\r\n\t\t\tui.$scope = this;\r\n\r\n\t\tif (ui.id)\r\n\t\t\tview = $$(ui.id);\r\n\t\t\t\r\n\t\tif (!view){\r\n\t\t\tview = webix.ui(ui, container);\r\n\t\t\tthis._uis.push(view);\r\n\t\t\trun_handlers(temp._init, view, this);\r\n\t\t}\r\n\r\n\t\treturn view;\r\n\t}\r\n\r\n\tfunction run_handlers(arr, view, scope){\r\n\t\tif (arr)\r\n\t\t\tfor (var i = 0; i < arr.length; i++)\r\n\t\t\t\tarr[i](view, scope);\r\n\t}\r\n\r\n\tfunction destroy(){\r\n\t\tif (!this._ui) return;\r\n\r\n\t\tif (this.$layout)\r\n\t\t\tdestroy.call(this.$layout);\r\n\r\n\t\tvar handlers = this._handlers;\r\n\t\tfor (var i = handlers.length - 1; i >= 0; i--)\r\n\t\t\thandlers[i].obj.detachEvent( handlers[i].id );\r\n\t\tthis._handlers = [];\r\n\r\n\t\tvar uis = this._uis;\r\n\t\tfor (var i = uis.length - 1; i >= 0; i--)\r\n\t\t\tif (uis[i] && uis[i].destructor) uis[i].destructor();\r\n\t\tthis._uis = [];\r\n\r\n\t\trun_handlers(this._destroy, this._ui, this);\r\n\r\n\t\tif (!this.parent && this._ui)\r\n\t\t\tthis._ui.destructor();\r\n\t}\r\n\r\n\r\n\tfunction delete_ids(view){\r\n\t\tdelete webix.ui.views[view.config.id];\r\n\t\tview.config.id = \"\";\r\n\t\tvar childs = view.getChildViews();\r\n\t\tfor (var i = childs.length - 1; i >= 0; i--)\r\n\t\t\tdelete_ids(childs[i]);\r\n\t}\r\n\tfunction create(subview){\r\n\t\tthis._uis=[];\r\n\t\tthis._handlers=[];\r\n\r\n\t\t//naive solution for id dupplication\r\n\t\tif (this.root && this.root.config)\r\n\t\t\tdelete_ids(this.root);\r\n\r\n\t\tthis._ui = webix.ui(subview, this.root);\r\n\t\tif (this.parent)\r\n\t\t\tthis.root = this._ui;\r\n\r\n\t\trun_handlers(this._init, this._ui, this);\r\n\t}\r\n\r\n\tfunction invalid_url(err){\r\n\t\tif (app.debug)\r\n\t\t\tconsole.log(err.stack);\r\n\r\n\t\tif (!err.requireModules) throw(err);\r\n\t\tif (app.debug)\r\n\t\t\twebix.message({ type:\"error\", expire:5000, text:\"Can't load \"+err.requireModules.join(\", \") });\r\n\r\n\t\tapp.show(app.config.start);\r\n\t}\r\n\r\n\trequirejs.onError = invalid_url;\r\n\treturn app;\r\n});\ndefine('helpers/menu',[], function () {\r\n function select_menu(menu_id, id) {\r\n var menu = $$(menu_id);\r\n if (menu.setValue) menu.setValue(id);\r\n else if (menu.select && menu.exists(id)) menu.select(id);\r\n }\r\n\r\n function get_menu(scope) {\r\n if (scope.parent) return scope.parent.module.$menu || get_menu(scope.parent);\r\n }\r\n\r\n return {\r\n $onurlchange: function (ui, name, url, scope) {\r\n if ($$(\"head-title\") !== undefined) $$(\"head-title\").reconstruct();\r\n if ($$(\"title\") !== undefined) $$(\"title\").parse({ title: \"\", details: \"\" });\r\n //menu handling\r\n if (ui.$menuid) {\r\n var id = ui.$menuid.call ? ui.$menuid.call(ui, ui, name, url) : ui.$menuid;\r\n var menu = get_menu(scope);\r\n if (menu && id) select_menu(menu, id);\r\n }\r\n },\r\n\r\n $onui: function (ui, name, url, scope) {\r\n //menu handling\r\n if (ui.$menu && url.length) select_menu(ui.$menu, url[0].page);\r\n },\r\n };\r\n});\r\n\n// (c) 2012 Airbnb, Inc.\r\n//\r\n// polyglot.js may be freely distributed under the terms of the BSD\r\n// license. For all licensing information, details, and documention:\r\n// http://airbnb.github.com/polyglot.js\r\n//\r\n//\r\n// Polyglot.js is an I18n helper library written in JavaScript, made to\r\n// work both in the browser and in Node. It provides a simple solution for\r\n// interpolation and pluralization, based off of Airbnb's\r\n// experience adding I18n functionality to its Backbone.js and Node apps.\r\n//\r\n// Polylglot is agnostic to your translation backend. It doesn't perform any\r\n// translation; it simply gives you a way to manage translated phrases from\r\n// your client- or server-side JavaScript application.\r\n//\r\n\r\n!function(root) {\r\n \r\n\r\n // ### Polyglot class constructor\r\n function Polyglot(options) {\r\n options = options || {};\r\n this.phrases = {};\r\n this.extend(options.phrases || {});\r\n this.currentLocale = options.locale || 'en';\r\n this.allowMissing = !!options.allowMissing;\r\n this.warn = options.warn || warn;\r\n }\r\n\r\n // ### Version\r\n Polyglot.VERSION = '0.4.1';\r\n\r\n // ### polyglot.locale([locale])\r\n //\r\n // Get or set locale. Internally, Polyglot only uses locale for pluralization.\r\n Polyglot.prototype.locale = function(newLocale) {\r\n if (newLocale) this.currentLocale = newLocale;\r\n return this.currentLocale;\r\n };\r\n\r\n // ### polyglot.extend(phrases)\r\n //\r\n // Use `extend` to tell Polyglot how to translate a given key.\r\n //\r\n // polyglot.extend({\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\"\r\n // });\r\n //\r\n // The key can be any string. Feel free to call `extend` multiple times;\r\n // it will override any phrases with the same key, but leave existing phrases\r\n // untouched.\r\n //\r\n // It is also possible to pass nested phrase objects, which get flattened\r\n // into an object with the nested keys concatenated using dot notation.\r\n //\r\n // polyglot.extend({\r\n // \"nav\": {\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\",\r\n // \"sidebar\": {\r\n // \"welcome\": \"Welcome\"\r\n // }\r\n // }\r\n // });\r\n //\r\n // console.log(polyglot.phrases);\r\n // // {\r\n // // 'nav.hello': 'Hello',\r\n // // 'nav.hello_name': 'Hello, %{name}',\r\n // // 'nav.sidebar.welcome': 'Welcome'\r\n // // }\r\n //\r\n // `extend` accepts an optional second argument, `prefix`, which can be used\r\n // to prefix every key in the phrases object with some string, using dot\r\n // notation.\r\n //\r\n // polyglot.extend({\r\n // \"hello\": \"Hello\",\r\n // \"hello_name\": \"Hello, %{name}\"\r\n // }, \"nav\");\r\n //\r\n // console.log(polyglot.phrases);\r\n // // {\r\n // // 'nav.hello': 'Hello',\r\n // // 'nav.hello_name': 'Hello, %{name}'\r\n // // }\r\n //\r\n // This feature is used internally to support nested phrase objects.\r\n Polyglot.prototype.extend = function(morePhrases, prefix) {\r\n var phrase;\r\n\r\n for (var key in morePhrases) {\r\n if (morePhrases.hasOwnProperty(key)) {\r\n phrase = morePhrases[key];\r\n if (prefix) key = prefix + '.' + key;\r\n if (typeof phrase === 'object') {\r\n this.extend(phrase, key);\r\n } else {\r\n this.phrases[key] = phrase;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // ### polyglot.clear()\r\n //\r\n // Clears all phrases. Useful for special cases, such as freeing\r\n // up memory if you have lots of phrases but no longer need to\r\n // perform any translation. Also used internally by `replace`.\r\n Polyglot.prototype.clear = function() {\r\n this.phrases = {};\r\n };\r\n\r\n // ### polyglot.replace(phrases)\r\n //\r\n // Completely replace the existing phrases with a new set of phrases.\r\n // Normally, just use `extend` to add more phrases, but under certain\r\n // circumstances, you may want to make sure no old phrases are lying around.\r\n Polyglot.prototype.replace = function(newPhrases) {\r\n this.clear();\r\n this.extend(newPhrases);\r\n };\r\n\r\n\r\n // ### polyglot.t(key, options)\r\n //\r\n // The most-used method. Provide a key, and `t` will return the\r\n // phrase.\r\n //\r\n // polyglot.t(\"hello\");\r\n // => \"Hello\"\r\n //\r\n // The phrase value is provided first by a call to `polyglot.extend()` or\r\n // `polyglot.replace()`.\r\n //\r\n // Pass in an object as the second argument to perform interpolation.\r\n //\r\n // polyglot.t(\"hello_name\", {name: \"Spike\"});\r\n // => \"Hello, Spike\"\r\n //\r\n // If you like, you can provide a default value in case the phrase is missing.\r\n // Use the special option key \"_\" to specify a default.\r\n //\r\n // polyglot.t(\"i_like_to_write_in_language\", {\r\n // _: \"I like to write in %{language}.\",\r\n // language: \"JavaScript\"\r\n // });\r\n // => \"I like to write in JavaScript.\"\r\n //\r\n Polyglot.prototype.t = function(key, options) {\r\n var result;\r\n options = options == null ? {} : options;\r\n // allow number as a pluralization shortcut\r\n if (typeof options === 'number') {\r\n options = {smart_count: options};\r\n }\r\n var phrase = this.phrases[key] || options._ || (this.allowMissing ? key : '');\r\n if (phrase === '') {\r\n this.warn('Missing translation for key: \"'+key+'\"');\r\n result = key;\r\n } else {\r\n options = clone(options);\r\n result = choosePluralForm(phrase, this.currentLocale, options.smart_count);\r\n result = interpolate(result, options);\r\n }\r\n return result;\r\n };\r\n\r\n\r\n // #### Pluralization methods\r\n // The string that separates the different phrase possibilities.\r\n var delimeter = '||||';\r\n\r\n // Mapping from pluralization group plural logic.\r\n var pluralTypes = {\r\n chinese: function(n) { return 0; },\r\n german: function(n) { return n !== 1 ? 1 : 0; },\r\n french: function(n) { return n > 1 ? 1 : 0; },\r\n russian: function(n) { return n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2; },\r\n czech: function(n) { return (n === 1) ? 0 : (n >= 2 && n <= 4) ? 1 : 2; },\r\n polish: function(n) { return (n === 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); },\r\n icelandic: function(n) { return (n % 10 !== 1 || n % 100 === 11) ? 1 : 0; }\r\n };\r\n\r\n // Mapping from pluralization group to individual locales.\r\n var pluralTypeToLanguages = {\r\n chinese: ['fa', 'id', 'ja', 'ko', 'lo', 'ms', 'th', 'tr', 'zh'],\r\n german: ['da', 'de', 'en', 'es', 'fi', 'el', 'he', 'hu', 'it', 'nl', 'no', 'pt', 'sv'],\r\n french: ['fr', 'tl', 'pt-br'],\r\n russian: ['hr', 'ru', 'be'],\r\n czech: ['cs'],\r\n polish: ['pl'],\r\n icelandic: ['is']\r\n };\r\n\r\n function langToTypeMap(mapping) {\r\n var type, langs, l, ret = {};\r\n for (type in mapping) {\r\n if (mapping.hasOwnProperty(type)) {\r\n langs = mapping[type];\r\n for (l in langs) {\r\n ret[langs[l]] = type;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // Trim a string.\r\n function trim(str){\r\n var trimRe = /^\\s+|\\s+$/g;\r\n return str.replace(trimRe, '');\r\n }\r\n\r\n // Based on a phrase text that contains `n` plural forms separated\r\n // by `delimeter`, a `locale`, and a `count`, choose the correct\r\n // plural form, or none if `count` is `null`.\r\n function choosePluralForm(text, locale, count){\r\n var ret, texts, chosenText;\r\n if (count != null && text) {\r\n texts = text.split(delimeter);\r\n chosenText = texts[pluralTypeIndex(locale, count)] || texts[0];\r\n ret = trim(chosenText);\r\n } else {\r\n ret = text;\r\n }\r\n return ret;\r\n }\r\n\r\n function pluralTypeName(locale) {\r\n var langToPluralType = langToTypeMap(pluralTypeToLanguages);\r\n return langToPluralType[locale] || langToPluralType.en;\r\n }\r\n\r\n function pluralTypeIndex(locale, count) {\r\n return pluralTypes[pluralTypeName(locale)](count);\r\n }\r\n\r\n // ### interpolate\r\n //\r\n // Does the dirty work. Creates a `RegExp` object for each\r\n // interpolation placeholder.\r\n function interpolate(phrase, options) {\r\n for (var arg in options) {\r\n if (arg !== '_' && options.hasOwnProperty(arg)) {\r\n // We create a new `RegExp` each time instead of using a more-efficient\r\n // string replace so that the same argument can be replaced multiple times\r\n // in the same phrase.\r\n phrase = phrase.replace(new RegExp('%\\\\{'+arg+'\\\\}', 'g'), options[arg]);\r\n }\r\n }\r\n return phrase;\r\n }\r\n\r\n // ### warn\r\n //\r\n // Provides a warning in the console if a phrase key is missing.\r\n function warn(message) {\r\n root.console && root.console.warn && root.console.warn('WARNING: ' + message);\r\n }\r\n\r\n // ### clone\r\n //\r\n // Clone an object.\r\n function clone(source) {\r\n var ret = {};\r\n for (var prop in source) {\r\n ret[prop] = source[prop];\r\n }\r\n return ret;\r\n }\r\n\r\n\r\n // Export for Node, attach to `window` for browser.\r\n if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = Polyglot;\r\n } else {\r\n root.Polyglot = Polyglot;\r\n }\r\n\r\n}(this);\r\n\ndefine(\"libs/polyglot\", function(){});\n\ndefine('models/user',[], function () {\r\n var user = null,\r\n credentials = {},\r\n oauthUrl = \"\";\r\n var host = \"\";\r\n var start = \"\";\r\n\r\n require([\"app\"], function (app) {\r\n host = app.config.host;\r\n start = app.config.start;\r\n });\r\n\r\n credentials = Cookies.getJSON(\"appCookie\") || {};\r\n\r\n function saveSetting(key, value, reload) {\r\n if (current_user) {\r\n var id = current_user.id,\r\n settings = current_user.settings;\r\n\r\n if (!settings[key] || value != settings[key]) {\r\n if (reload) document.location.reload();\r\n }\r\n }\r\n }\r\n\r\n return {\r\n saveSetting: saveSetting,\r\n getDvcsID: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.ma_dvcs;\r\n },\r\n getCurrentUser: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.username;\r\n },\r\n getLanguage: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie == null) {\r\n return null;\r\n }\r\n\r\n return cookie.language;\r\n },\r\n getAccessToken: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie === null || cookie === undefined) {\r\n return null;\r\n }\r\n\r\n if (cookie.access_token === undefined) {\r\n return null;\r\n }\r\n\r\n if (cookie.expires_in + cookie.timestamp < Date.now() / 1000) {\r\n return null;\r\n }\r\n\r\n return cookie.access_token;\r\n },\r\n getRefreshToken: function () {\r\n var cookie = this.getAppCookie();\r\n\r\n if (cookie === null || cookie === undefined) {\r\n return;\r\n }\r\n\r\n if (cookie.refresh_token === undefined) {\r\n return;\r\n }\r\n\r\n if (5400 + cookie.timestamp < Date.now() / 1000) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n host + \"/Account/GetTokenByRefreshToken\",\r\n {\r\n refresh_token: cookie.wb_user_id,\r\n wb_user_id: cookie.wb_user_id\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n \r\n if (result.error != null) {\r\n //webix.message(result.error, \"error\");\r\n return;\r\n }\r\n var credentials = getCredentials();\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n credentials.access_token = result.token;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n }\r\n );\r\n }\r\n },\r\n getCredentials: function () {\r\n return credentials;\r\n },\r\n getAppCookie: function () {\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n var cookie = webix.storage.local.get(\"appCookie\");\r\n return cookie;\r\n } else {\r\n var cookie = Cookies.getJSON(\"appCookie\");\r\n return cookie;\r\n }\r\n },\r\n setCurrentUser: function (userId) {\r\n user = userId;\r\n return true;\r\n },\r\n login: function (username, password, ma_dvcs, language, component) {\r\n webix.extend(component, webix.ProgressBar);\r\n component.disable();\r\n component.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/Login\",\r\n {\r\n username: username,\r\n password: password,\r\n ma_dvcs: ma_dvcs,\r\n is_sso_login: \"0\"\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n component.enable();\r\n component.hideProgress();\r\n return;\r\n }\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.remove(\"inactive\");\r\n\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n credentials = {\r\n access_token: result.token,\r\n refresh_token: result.refresh_token,\r\n expires_in: 86400,\r\n token_type: \"Bearer\",\r\n scope: null,\r\n username: username,\r\n language: language,\r\n ma_dvcs: ma_dvcs,\r\n wb_user_id: result.wb_user_id,\r\n noti_sso: result.noti_sso,\r\n notes_sso: result.notes_sso,\r\n is_link_sso: result.is_link_sso,\r\n is_weak_pass: result.isWeakPass\r\n };\r\n\r\n if (result.ma_dvcs != null) {\r\n credentials.ma_dvcs = result.ma_dvcs;\r\n }\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n\r\n component.$scope.show(\"./\" + start);\r\n }\r\n )\r\n .then(null, function () {\r\n component.enable();\r\n component.hideProgress();\r\n });\r\n },\r\n loginsso: function (sso_code, redirect_uri, ma_dvcs, language) {\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/LoginSSO\",\r\n {\r\n sso_code: sso_code,\r\n redirect_uri: redirect_uri\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n window.location.href = \"/#!\" + start;\r\n return;\r\n }\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.remove(\"inactive\");\r\n\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n credentials = {\r\n access_token: result.token,\r\n refresh_token: result.refresh_token,\r\n expires_in: 86400,\r\n token_type: \"Bearer\",\r\n scope: null,\r\n username: result.username,\r\n language: language,\r\n ma_dvcs: ma_dvcs,\r\n wb_user_id: result.wb_user_id,\r\n id_token: result.id_token,\r\n sid: result.sid\r\n };\r\n\r\n if (result.ma_dvcs != null) {\r\n credentials.ma_dvcs = result.ma_dvcs;\r\n }\r\n\r\n credentials.timestamp = (Date.now() / 1000) | 0;\r\n\r\n var baseUrl = document.location.href;\r\n\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.put(\"appCookie\", credentials);\r\n } else {\r\n Cookies.set(\"appCookie\", credentials);\r\n }\r\n window.location.href = \"/#!\" + start;\r\n }\r\n )\r\n .then(null, function () {\r\n window.location.href = \"/#!\" + start;\r\n });\r\n },\r\n\r\n logout: function () {\r\n credentials = {};\r\n var cookie = this.getAppCookie();\r\n if (cookie != null) {\r\n var id_token = cookie.id_token;\r\n var refresh_token = cookie.refresh_token;\r\n webix\r\n .ajax()\r\n .post(\r\n host + \"/Account/Logout\",\r\n {\r\n id_token: id_token,\r\n refresh_token : refresh_token\r\n },\r\n function (text, data) {\r\n var result = JSON.parse(text);\r\n \r\n if (result.error != null) {\r\n webix.message(result.error, \"error\");\r\n return;\r\n }\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n );\r\n } else {\r\n debugger;\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n\r\n },\r\n session: {\r\n status: function () {\r\n return new Promise(function (resolve, reject) {\r\n console.log(\"Getting user-status\");\r\n resolve(true);\r\n });\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('helpers/locale',[\r\n\t\"libs/polyglot\",\r\n\t\"models/user\"\t\r\n], function(polyglot, users){\r\n\r\n\tvar defaultlang = \"vi\";\r\n\tvar key = \"--:app:lang\";\r\n\tvar current_lang = \"\";\r\n\r\n\tfunction _get_lang(){\r\n\t\treturn webix.storage.local.get(key) || defaultlang;\r\n\t}\r\n\r\n\tfunction _set_lang(lang, init){\r\n\t\twebix.storage.local.put(key, lang);\r\n\t\tdocument.location.reload();\r\n\t}\r\n\r\n\tfunction create_locale(lang,host){\r\n\t\tcurrent_lang = lang;\r\n\t\tdefine(\"locale\", [\r\n\t\t\t\"locales/\"+lang\r\n\t\t], function(data){\r\n\t\t\tvar poly = new Polyglot({ phrases:data });\r\n\t\t\t\tpoly.locale(lang);\r\n\r\n\t\t\tvar t = webix.bind(poly.t, poly);\r\n\t\t\tt.template = function(a){\r\n\t\t\t\treturn a.replace(/%([a-zA-Z0-9.]+)%/g, function(_, match){\r\n\t\t\t\t\treturn poly.t(match);\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t\treturn t;\r\n\t\t});\t\r\n\t\t\t\t\r\n\t\t\r\n\t}\r\n\r\n\treturn {\r\n\t\t$oninit:function(app, config){\r\n\t\t\tkey = (app.config.id || \"\")+key;\r\n\r\n\t\t\tvar lang = _get_lang();\r\n\t\t\tcreate_locale(lang,app.config.host);\r\n\t\t},\r\n\t\tsetLang: _set_lang,\r\n\t\tgetLang: _get_lang,\r\n\t\tisNow:function(val){ return val == current_lang; }\r\n\t};\r\n});\ndefine('helpers/theme',[\r\n\t\"models/user\"\r\n], function(users){\r\n\r\n\tvar key = \"--:app:theme\";\r\n\tvar current_theme = webix.storage.local.get(key) || \"siberia:webix\";\r\n\r\n\tfunction _get_theme(){\r\n\t\tif(users.getCurrentUser())\r\n\t\t\treturn users.getCurrentUser().settings.theme;\r\n\r\n\t\treturn current_theme;\r\n\t}\r\n\r\n\tfunction _set_theme(theme){\r\n\t\twebix.storage.local.put(key, theme);\r\n\t\tif(users.getCurrentUser())\r\n\t\t\tusers.saveSetting(\"theme\", theme, theme != current_theme);\r\n\t\telse\r\n\t\t\tdocument.location.reload();\r\n\r\n\t\tcurrent_theme = theme;\r\n\t}\r\n\r\n\treturn {\r\n\t\tsetTheme: _set_theme,\r\n\t\tgetTheme: _get_theme,\r\n\t\tisNow:function(val){ return val == current_theme; }\r\n\t};\r\n});\ndefine('libs/rollbar',['require','exports','module'],function(require,exports,module){function _isUndefined(a){return\"undefined\"==typeof a}function computeStackTraceWrapper(a){function b(a){if(!t)return\"\";try{var b=function(){try{return new window.XMLHttpRequest}catch(a){return new window.ActiveXObject(\"Microsoft.XMLHTTP\")}},c=b();return c.open(\"GET\",a,!1),c.send(\"\"),c.responseText}catch(d){return\"\"}}function c(a){if(!s.hasOwnProperty(a)){var c=\"\";-1!==a.indexOf(document.domain)&&(c=b(a)),s[a]=c?c.split(\"\\n\"):[]}return s[a]}function d(a,b){var d,e=/function ([^(]*)\\(([^)]*)\\)/,f=/['\"]?([0-9A-Za-z$_]+)['\"]?\\s*[:=]\\s*(function|eval|new Function)/,g=\"\",h=10,i=c(a);if(!i.length)return UNKNOWN_FUNCTION;for(var j=0;h>j;++j)if(g=i[b-j]+g,!_isUndefined(g)){if(d=f.exec(g))return d[1];if(d=e.exec(g))return d[1]}return UNKNOWN_FUNCTION}function e(a,b){var d=c(a);if(!d.length)return null;var e=[],f=Math.floor(u/2),g=f+u%2,h=Math.max(0,b-f-1),i=Math.min(d.length,b+g-1);b-=1;for(var j=h;i>j;++j)_isUndefined(d[j])||e.push(d[j]);return e.length>0?e:null}function f(a){return a.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#]/g,\"\\\\$&\")}function g(a){return f(a).replace(\"<\",\"(?:<|<)\").replace(\">\",\"(?:>|>)\").replace(\"&\",\"(?:&|&)\").replace('\"','(?:\"|")').replace(/\\s+/g,\"\\\\s+\")}function h(a,b){for(var d,e,f=0,g=b.length;g>f;++f)if((d=c(b[f])).length&&(d=d.join(\"\\n\"),e=a.exec(d)))return{url:b[f],line:d.substring(0,e.index).split(\"\\n\").length,column:e.index-d.lastIndexOf(\"\\n\",e.index)-1};return null}function i(a,b,d){var e,g=c(b),h=new RegExp(\"\\\\b\"+f(a)+\"\\\\b\");return d-=1,g&&g.length>d&&(e=h.exec(g[d]))?e.index:null}function j(a){for(var b,c,d,e,i=[window.location.href],j=document.getElementsByTagName(\"script\"),k=\"\"+a,l=/^function(?:\\s+([\\w$]+))?\\s*\\(([\\w\\s,]*)\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,m=/^function on([\\w$]+)\\s*\\(event\\)\\s*\\{\\s*(\\S[\\s\\S]*\\S)\\s*\\}\\s*$/,n=0;nl;++l){if(b=g.exec(h[l]))c={url:b[3],func:b[1]||UNKNOWN_FUNCTION,args:b[2]?b[2].split(\",\"):\"\",line:+b[4],column:b[5]?+b[5]:null};else{if(!(b=f.exec(h[l])))continue;c={url:b[2],func:b[1]||UNKNOWN_FUNCTION,line:+b[3],column:b[4]?+b[4]:null}}!c.func&&c.line&&(c.func=d(c.url,c.line)),c.line&&(c.context=e(c.url,c.line)),j.push(c)}return j[0]&&j[0].line&&!j[0].column&&k&&(j[0].column=i(k[1],j[0].url,j[0].line)),j.length?{mode:\"stack\",name:a.name,message:a.message,url:document.location.href,stack:j,useragent:navigator.userAgent}:null}function l(a){for(var b,c=a.stacktrace,f=/ line (\\d+), column (\\d+) in (?:]+)>|([^\\)]+))\\((.*)\\) in (.*):\\s*$/i,g=c.split(\"\\n\"),h=[],i=0,j=g.length;j>i;i+=2)if(b=f.exec(g[i])){var k={line:+b[1],column:+b[2],func:b[3]||b[4],args:b[5]?b[5].split(\",\"):[],url:b[6]};if(!k.func&&k.line&&(k.func=d(k.url,k.line)),k.line)try{k.context=e(k.url,k.line)}catch(l){}k.context||(k.context=[g[i+1]]),h.push(k)}return h.length?{mode:\"stacktrace\",name:a.name,message:a.message,url:document.location.href,stack:h,useragent:navigator.userAgent}:null}function m(a){var b=a.message.split(\"\\n\");if(b.length<4)return null;var f,i,j,k,l=/^\\s*Line (\\d+) of linked script ((?:file|http|https)\\S+)(?:: in function (\\S+))?\\s*$/i,m=/^\\s*Line (\\d+) of inline#(\\d+) script in ((?:file|http|https)\\S+)(?:: in function (\\S+))?\\s*$/i,n=/^\\s*Line (\\d+) of function script\\s*$/i,o=[],p=document.getElementsByTagName(\"script\"),q=[];for(i in p)p.hasOwnProperty(i)&&!p[i].src&&q.push(p[i]);for(i=2,j=b.length;j>i;i+=2){var r=null;if(f=l.exec(b[i]))r={url:f[2],func:f[3],line:+f[1]};else if(f=m.exec(b[i])){r={url:f[3],func:f[4]};var s=+f[1],t=q[f[2]-1];if(t&&(k=c(r.url))){k=k.join(\"\\n\");var u=k.indexOf(t.innerText);u>=0&&(r.line=s+k.substring(0,u).split(\"\\n\").length)}}else if(f=n.exec(b[i])){var v=window.location.href.replace(/#.*$/,\"\"),w=f[1],x=new RegExp(g(b[i+1]));k=h(x,[v]),r={url:v,line:k?k.line:w,func:\"\"}}if(r){r.func||(r.func=d(r.url,r.line));var y=e(r.url,r.line),z=y?y[Math.floor(y.length/2)]:null;r.context=y&&z.replace(/^\\s*/,\"\")===b[i+1].replace(/^\\s*/,\"\")?y:[b[i+1]],o.push(r)}}return o.length?{mode:\"multiline\",name:a.name,message:b[0],url:document.location.href,stack:o,useragent:navigator.userAgent}:null}function n(a,b,c,f){var g={url:b,line:c};if(g.url&&g.line){a.incomplete=!1,g.func||(g.func=d(g.url,g.line)),g.context||(g.context=e(g.url,g.line));var h=/ '([^']+)' /.exec(f);if(h&&(g.column=i(h[1],g.url,g.line)),a.stack.length>0&&a.stack[0].url===g.url){if(a.stack[0].line===g.line)return!1;if(!a.stack[0].line&&a.stack[0].func===g.func)return a.stack[0].line=g.line,a.stack[0].context=g.context,!1}return a.stack.unshift(g),a.partial=!0,!0}return a.incomplete=!0,!1}function o(a,b){for(var c,e,f,g=/function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,h=[],k={},l=!1,m=o.caller;m&&!l;m=m.caller)if(m!==p&&m!==v){if(e={url:null,func:UNKNOWN_FUNCTION,line:null,column:null},m.name?e.func=m.name:(c=g.exec(m.toString()))&&(e.func=c[1]),f=j(m)){e.url=f.url,e.line=f.line,e.func===UNKNOWN_FUNCTION&&(e.func=d(e.url,e.line));var q=/ '([^']+)' /.exec(a.message||a.description);q&&(e.column=i(q[1],f.url,f.line))}k[\"\"+m]?l=!0:k[\"\"+m]=!0,h.push(e)}b&&h.splice(0,b);var r={mode:\"callers\",name:a.name,message:a.message,url:document.location.href,stack:h,useragent:navigator.userAgent};return n(r,a.sourceURL||a.fileName,a.line||a.lineNumber,a.message||a.description),r}function p(a,b){var c=null;b=null==b?0:+b;try{if(c=l(a))return c}catch(d){if(r)throw d}try{if(c=k(a))return c}catch(d){if(r)throw d}try{if(c=m(a))return c}catch(d){if(r)throw d}try{if(c=o(a,b+1))return c}catch(d){if(r)throw d}return{mode:\"failed\"}}function q(a){a=(null==a?0:+a)+1;try{throw new Error}catch(b){return p(b,a+1)}}var r=!1,s={},t=a.remoteFetching,u=a.linesOfContext,v=a.tracekitReport;return p.augmentStackTraceWithInitialElement=n,p.guessFunctionName=d,p.gatherContext=e,p.ofCaller=q,p}function Notifier(a){_topLevelNotifier=_topLevelNotifier||this;var b=window.location.protocol;0!==b.indexOf(\"http\")&&(b=\"https:\");var c=b+\"//\"+Notifier.DEFAULT_ENDPOINT;this.options={enabled:!0,endpoint:c,environment:\"production\",scrubFields:Util.copy(Notifier.DEFAULT_SCRUB_FIELDS),checkIgnore:null,logLevel:Notifier.DEFAULT_LOG_LEVEL,reportLevel:Notifier.DEFAULT_REPORT_LEVEL,uncaughtErrorLevel:Notifier.DEFAULT_UNCAUGHT_ERROR_LEVEL,payload:{}},this.lastError=null,this.plugins={},this.parentNotifier=a,this.logger=function(){if(window.console&&\"function\"==typeof window.console.log){var a=[\"Rollbar:\"].concat(Array.prototype.slice.call(arguments,0));window.console.log(a)}},a&&(a.hasOwnProperty(\"shimId\")?a.notifier=this:(this.logger=a.logger,this.configure(a.options)))}function _wrapNotifierFn(a,b){return function(){var c=b||this;try{return a.apply(c,arguments)}catch(d){c&&c.logger(d)}}}function _guessErrorClass(a){if(!a)return[\"Unknown error. There was no error message to display.\",\"\"];var b=a.match(ERR_CLASS_REGEXP),c=\"(unknown)\";return b&&(c=b[b.length-1],a=a.replace((b[b.length-2]||\"\")+c+\":\",\"\"),a=a.replace(/(^[\\s]+|[\\s]+$)/g,\"\")),[c,a]}function _payloadProcessorTimer(a){for(var b;b=window._rollbarPayloadQueue.shift();)_processPayload(b.endpointUrl,b.accessToken,b.payload,b.callback);a||(payloadProcessorTimeout=setTimeout(_payloadProcessorTimer,1e3))}function _processPayload(a,b,c,d){d=d||function(){};var e=(new Date).getTime();e-rateLimitStartTime>=6e4&&(rateLimitStartTime=e,rateLimitPerMinCounter=0);var f=window._globalRollbarOptions.maxItems,g=window._globalRollbarOptions.itemsPerMinute,h=function(){return!c.ignoreRateLimit&&f>=1&&rateLimitCounter>=f},i=function(){return!c.ignoreRateLimit&&g>=1&&rateLimitPerMinCounter>=g};return h()?(d(new Error(f+\" max items reached\")),void 0):i()?(d(new Error(g+\" items per minute reached\")),void 0):(rateLimitCounter++,rateLimitPerMinCounter++,h()&&_topLevelNotifier._log(_topLevelNotifier.options.uncaughtErrorLevel,\"maxItems has been hit. Ignoring errors for the remainder of the current page load.\",null,{maxItems:f},null,!1,!0),c.ignoreRateLimit&&delete c.ignoreRateLimit,XHR.post(a,b,c,function(a,b){return a?d(a):d(null,b)}),void 0)}function _rollbarWindowOnError(a,b,c){!c[4]&&window._rollbarWrappedError&&(c[4]=window._rollbarWrappedError,window._rollbarWrappedError=null),globalNotifier.uncaughtError.apply(globalNotifier,c),b&&b.apply(window,c)}function _extendListenerPrototype(a,b){if(b.hasOwnProperty&&b.hasOwnProperty(\"addEventListener\")){var c=b.addEventListener;b.addEventListener=function(b,d,e){c.call(this,b,a.wrap(d),e)};var d=b.removeEventListener;b.removeEventListener=function(a,b,c){d.call(this,a,b._wrapped||b,c)}}}var setupCustomJSON=function(JSON){function f(a){return 10>a?\"0\"+a:a}function quote(a){return escapable.lastIndex=0,escapable.test(a)?'\"'+a.replace(escapable,function(a){var b=meta[a];return\"string\"==typeof b?b:\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})+'\"':'\"'+a+'\"'}function str(a,b){var c,d,e,f,g,h=gap,i=b[a];switch(i&&\"object\"==typeof i&&\"function\"==typeof i.toJSON&&(i=i.toJSON(a)),\"function\"==typeof rep&&(i=rep.call(b,a,i)),typeof i){case\"string\":return quote(i);case\"number\":return isFinite(i)?String(i):\"null\";case\"boolean\":case\"null\":return String(i);case\"object\":if(!i)return\"null\";if(gap+=indent,g=[],\"[object Array]\"===Object.prototype.toString.apply(i)){for(f=i.length,c=0;f>c;c+=1)g[c]=str(c,i)||\"null\";return e=0===g.length?\"[]\":gap?\"[\\n\"+gap+g.join(\",\\n\"+gap)+\"\\n\"+h+\"]\":\"[\"+g.join(\",\")+\"]\",gap=h,e}if(rep&&\"object\"==typeof rep)for(f=rep.length,c=0;f>c;c+=1)\"string\"==typeof rep[c]&&(d=rep[c],e=str(d,i),e&&g.push(quote(d)+(gap?\": \":\":\")+e));else for(d in i)Object.prototype.hasOwnProperty.call(i,d)&&(e=str(d,i),e&&g.push(quote(d)+(gap?\": \":\":\")+e));return e=0===g.length?\"{}\":gap?\"{\\n\"+gap+g.join(\",\\n\"+gap)+\"\\n\"+h+\"}\":\"{\"+g.join(\",\")+\"}\",gap=h,e}}\"function\"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+\"-\"+f(this.getUTCMonth()+1)+\"-\"+f(this.getUTCDate())+\"T\"+f(this.getUTCHours())+\":\"+f(this.getUTCMinutes())+\":\"+f(this.getUTCSeconds())+\"Z\":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var cx=/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,escapable=/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,gap,indent,meta={\"\\b\":\"\\\\b\",\"\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"},rep;\"function\"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(gap=\"\",indent=\"\",\"number\"==typeof c)for(d=0;c>d;d+=1)indent+=\" \";else\"string\"==typeof c&&(indent=c);if(rep=b,b&&\"function\"!=typeof b&&(\"object\"!=typeof b||\"number\"!=typeof b.length))throw new Error(\"JSON.stringify\");return str(\"\",{\"\":a})}),\"function\"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(a,b){var c,d,e=a[b];if(e&&\"object\"==typeof e)for(c in e)Object.prototype.hasOwnProperty.call(e,c)&&(d=walk(e,c),void 0!==d?e[c]=d:delete e[c]);return reviver.call(a,b,e)}var j;if(text=String(text),cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(a){return\"\\\\u\"+(\"0000\"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\\],:{}\\s]*$/.test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\")))return j=eval(\"(\"+text+\")\"),\"function\"==typeof reviver?walk({\"\":j},\"\"):j;throw new SyntaxError(\"JSON.parse\")})},UNKNOWN_FUNCTION=\"?\",Util={merge:function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!0;for(\"object\"!=typeof g&&\"function\"!=typeof g&&(g={});i>h;h++)if(null!==(a=arguments[h]))for(b in a)a.hasOwnProperty(b)&&(c=g[b],d=a[b],g!==d&&(j&&d&&(d.constructor==Object||(e=d.constructor==Array))?(e?(e=!1,f=[]):f=c&&c.constructor==Object?c:{},g[b]=Util.merge(f,d)):void 0!==d&&(g[b]=d)));return g},copy:function(a){var b;return\"object\"==typeof a&&(a.constructor==Object?b={}:a.constructor==Array&&(b=[])),Util.merge(b,a),b},parseUriOptions:{strictMode:!1,key:[\"source\",\"protocol\",\"authority\",\"userInfo\",\"user\",\"password\",\"host\",\"port\",\"relative\",\"path\",\"directory\",\"file\",\"query\",\"anchor\"],q:{name:\"queryKey\",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\\/?#]+):)?(?:\\/\\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?))?((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/}},parseUri:function(a){if(!a||\"string\"!=typeof a&&!(a instanceof String))throw new Error(\"Util.parseUri() received invalid input\");for(var b=Util.parseUriOptions,c=b.parser[b.strictMode?\"strict\":\"loose\"].exec(a),d={},e=14;e--;)d[b.key[e]]=c[e]||\"\";return d[b.q.name]={},d[b.key[12]].replace(b.q.parser,function(a,c,e){c&&(d[b.q.name][c]=e)}),d},sanitizeUrl:function(a){if(!a||\"string\"!=typeof a&&!(a instanceof String))throw new Error(\"Util.sanitizeUrl() received invalid input\");var b=Util.parseUri(a);return\"\"===b.anchor&&(b.source=b.source.replace(\"#\",\"\")),a=b.source.replace(\"?\"+b.query,\"\")},traverse:function(a,b){var c,d,e,f=\"object\"==typeof a,g=[];if(f)if(a.constructor===Object)for(c in a)a.hasOwnProperty(c)&&g.push(c);else if(a.constructor===Array)for(e=0;ea;a++)try{b=c[a]();break}catch(e){}return b},post:function(a,b,c,d){if(\"object\"!=typeof c)throw new Error(\"Expected an object to POST\");c=RollbarJSON.stringify(c),d=d||function(){};var e=XHR.createXMLHTTPObject();if(e)try{try{var f=function(){try{f&&4===e.readyState&&(f=void 0,200===e.status?d(null,RollbarJSON.parse(e.responseText)):\"number\"==typeof e.status&&e.status>=400&&e.status<600?d(new Error(e.status.toString())):d(new Error))}catch(a){var b;b=\"object\"==typeof a&&a.stack?a:new Error(a),d(b)}};e.open(\"POST\",a,!0),e.setRequestHeader&&(e.setRequestHeader(\"Content-Type\",\"application/json\"),e.setRequestHeader(\"X-Rollbar-Access-Token\",b)),e.onreadystatechange=f,e.send(c)}catch(g){if(\"undefined\"!=typeof XDomainRequest){var h=function(){d(new Error)},i=function(){d(new Error)},j=function(){d(null,RollbarJSON.parse(e.responseText))};e=new XDomainRequest,e.onprogress=function(){},e.ontimeout=h,e.onerror=i,e.onload=j,e.open(\"POST\",a,!0),e.send(c)}}}catch(k){d(k)}}};Notifier.NOTIFIER_VERSION=\"1.1.9\",Notifier.DEFAULT_ENDPOINT=\"api.rollbar.com/api/1/\",Notifier.DEFAULT_SCRUB_FIELDS=[\"passwd\",\"password\",\"secret\",\"confirm_password\",\"password_confirmation\"],Notifier.DEFAULT_LOG_LEVEL=\"debug\",Notifier.DEFAULT_REPORT_LEVEL=\"debug\",Notifier.DEFAULT_UNCAUGHT_ERROR_LEVEL=\"warning\",Notifier.DEFAULT_ITEMS_PER_MIN=60,Notifier.DEFAULT_MAX_ITEMS=0,Notifier.LEVELS={debug:0,info:1,warning:2,error:3,critical:4},window._rollbarPayloadQueue=[],window._globalRollbarOptions={startTime:(new Date).getTime(),maxItems:Notifier.DEFAULT_MAX_ITEMS,itemsPerMinute:Notifier.DEFAULT_ITEMS_PER_MIN};var TK=computeStackTraceWrapper({remoteFetching:!1,linesOfContext:3}),_topLevelNotifier;Notifier._generateLogFn=function(a){return _wrapNotifierFn(function(){var b=this._getLogArgs(arguments);return this._log(a||b.level||this.options.logLevel||Notifier.DEFAULT_LOG_LEVEL,b.message,b.err,b.custom,b.callback)})},Notifier.prototype._getLogArgs=function(a){for(var b,c,d,e,f,g,h,i=this.options.logLevel||Notifier.DEFAULT_LOG_LEVEL,j=0;jb;++b)a=c[b],e.push({name:a.name,description:a.description});this._browserPlugins=e}return this._browserPlugins},Notifier.prototype._scrub=function(a){function b(a,b,c,d,e,f){return b+Util.redact(f)}function c(a){var c;if(\"string\"==typeof a)for(c=0;cj;j++){if(d=c.frames[j],e=d.filename,\"string\"!=typeof e)return!0;for(k=0;h>k;k++)if(g=b[k],i=new RegExp(g),i.test(e))return!0}}catch(l){return this.configure({hostWhiteList:null}),this.error(\"Error while reading your configuration's hostWhiteList option. Removing custom hostWhiteList.\",l),!0}return!1},Notifier.prototype._messageIsIgnored=function(a){var b,c,d,e,f,g,h;try{if(f=!1,d=this.options.ignoredMessages,h=a.data.body.trace,!d||0===d.length)return!1;if(!h)return!1;for(b=h.exception.message,e=d.length,c=0;e>c&&(g=new RegExp(d[c],\"gi\"),!(f=g.test(b)));c++);}catch(i){this.configure({ignoredMessages:null}),this.error(\"Error while reading your configuration's ignoredMessages option. Removing custom ignoredMessages.\")}return f},Notifier.prototype._enqueuePayload=function(a,b,c,d){var e={callback:d,accessToken:this.options.accessToken,endpointUrl:this._route(\"item/\"),payload:a},f=function(){if(d){var a=\"This item was not sent to Rollbar because it was ignored. This can happen if a custom checkIgnore() function was used or if the item's level was less than the notifier' reportLevel. See https://rollbar.com/docs/notifier/rollbar.js/configuration for more details.\";d(null,{err:0,result:{id:null,uuid:null,message:a}})}};if(this._internalCheckIgnore(b,c,a))return f(),void 0;try{if(this.options.checkIgnore&&\"function\"==typeof this.options.checkIgnore&&this.options.checkIgnore(b,c,a))return f(),void 0}catch(g){this.configure({checkIgnore:null}),this.error(\"Error while calling custom checkIgnore() function. Removing custom checkIgnore().\",g)}if(this._urlIsWhitelisted(a)&&!this._messageIsIgnored(a)){if(this.options.verbose){if(a.data&&a.data.body&&a.data.body.trace){var h=a.data.body.trace,i=h.exception.message;this.logger(i)}this.logger(\"Sending payload -\",e)}\"function\"==typeof this.options.logFunction&&this.options.logFunction(e);try{\"function\"==typeof this.options.transform&&this.options.transform(a)}catch(g){this.configure({transform:null}),this.error(\"Error while calling custom transform() function. Removing custom transform().\",g)}this.options.enabled&&window._rollbarPayloadQueue.push(e)}},Notifier.prototype._internalCheckIgnore=function(a,b,c){var d=b[0],e=Notifier.LEVELS[d]||0,f=Notifier.LEVELS[this.options.reportLevel]||0;if(f>e)return!0;var g=this.options?this.options.plugins:{};return g&&g.jquery&&g.jquery.ignoreAjaxErrors&&c.body.message?c.body.messagejquery_ajax_error:!1},Notifier.prototype._log=function(a,b,c,d,e,f,g){var h=null;if(c){if(h=c._tkStackTrace?c._tkStackTrace:TK(c),c===this.lastError)return;this.lastError=c}var i=this._buildPayload(new Date,a,b,h,d);g&&(i.ignoreRateLimit=!0),this._enqueuePayload(i,f?!0:!1,[a,b,c,d],e)},Notifier.prototype.log=Notifier._generateLogFn(),Notifier.prototype.debug=Notifier._generateLogFn(\"debug\"),Notifier.prototype.info=Notifier._generateLogFn(\"info\"),Notifier.prototype.warn=Notifier._generateLogFn(\"warning\"),Notifier.prototype.warning=Notifier._generateLogFn(\"warning\"),Notifier.prototype.error=Notifier._generateLogFn(\"error\"),Notifier.prototype.critical=Notifier._generateLogFn(\"critical\"),Notifier.prototype.uncaughtError=_wrapNotifierFn(function(a,b,c,d,e,f){if(f=f||null,e&&e.stack)return this._log(this.options.uncaughtErrorLevel,a,e,f,null,!0),void 0;if(b&&b.stack)return this._log(this.options.uncaughtErrorLevel,a,b,f,null,!0),void 0;var g={url:b||\"\",line:c};g.func=TK.guessFunctionName(g.url,g.line),g.context=TK.gatherContext(g.url,g.line);var h={mode:\"onerror\",message:a||\"uncaught exception\",url:document.location.href,stack:[g],useragent:navigator.userAgent};e&&(h=e._tkStackTrace||TK(e));var i=this._buildPayload(new Date,this.options.uncaughtErrorLevel,a,h);this._enqueuePayload(i,!0,[this.options.uncaughtErrorLevel,a,b,c,d,e])}),Notifier.prototype.global=_wrapNotifierFn(function(a){a=a||{},Util.merge(window._globalRollbarOptions,a),void 0!==a.maxItems&&(rateLimitCounter=0),void 0!==a.itemsPerMinute&&(rateLimitPerMinCounter=0)}),Notifier.prototype.configure=_wrapNotifierFn(function(a){Util.merge(this.options,a)}),Notifier.prototype.scope=_wrapNotifierFn(function(a){var b=new Notifier(this);return Util.merge(b.options.payload,a),b}),Notifier.prototype.wrap=function(a,b){var c;if(c=\"function\"==typeof b?b:function(){return b||{}},\"function\"!=typeof a)return a;if(a._isWrap)return a;if(!a._wrapped){a._wrapped=function(){try{a.apply(this,arguments)}catch(b){throw b.stack||(b._tkStackTrace=TK(b)),b._rollbarContext=c(),b._rollbarContext._wrappedSource=a.toString(),window._rollbarWrappedError=b,b}},a._wrapped._isWrap=!0;for(var d in a)a.hasOwnProperty(d)&&(a._wrapped[d]=a[d])}return a._wrapped};var ERR_CLASS_REGEXP=new RegExp(\"^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): \"),payloadProcessorTimeout;Notifier.processPayloads=function(a){(!payloadProcessorTimeout||a)&&_payloadProcessorTimer(a)};var rateLimitStartTime=(new Date).getTime(),rateLimitCounter=0,rateLimitPerMinCounter=0,globalNotifier=new Notifier;window._rollbarWrappedError=null,globalNotifier.init=function(a){if(this.configure(a),a.captureUncaught){var b=window.onerror;window.onerror=function(){var a=Array.prototype.slice.call(arguments,0);_rollbarWindowOnError(globalNotifier,b,a)};var c,d,e=[\"EventTarget\",\"Window\",\"Node\",\"ApplicationCache\",\"AudioTrackList\",\"ChannelMergerNode\",\"CryptoOperation\",\"EventSource\",\"FileReader\",\"HTMLUnknownElement\",\"IDBDatabase\",\"IDBRequest\",\"IDBTransaction\",\"KeyOperation\",\"MediaController\",\"MessagePort\",\"ModalWindow\",\"Notification\",\"SVGElementInstance\",\"Screen\",\"TextTrack\",\"TextTrackCue\",\"TextTrackList\",\"WebSocket\",\"WebSocketWorker\",\"Worker\",\"XMLHttpRequest\",\"XMLHttpRequestEventTarget\",\"XMLHttpRequestUpload\"];for(c=0;c= 0;\r\n };\r\n\r\n webix.rules.isSpecialCharacter = function (value) {\r\n var patt = /^[a-zA-Z0-9\\$%\\^\\&*\\)\\(+=._-]+$/;\r\n return patt.test(value);\r\n };\r\n\r\n webix.rules.isPhoneNumber = function (value) {\r\n if (value == \"\") return true;\r\n\r\n var patt = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s\\./0-9]*$/;\r\n return patt.test(value);\r\n };\r\n\r\n webix.rules.isTaxCode = function (value) {\r\n var patt = /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$/;\r\n\r\n if (value.length > 10) {\r\n patt = /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][-][0-9][0-9][0-9]$/;\r\n }\r\n\r\n if (value == \"\") return true;\r\n\r\n if (patt.test(value) == false) {\r\n return false;\r\n }\r\n\r\n var number =\r\n Number(value.charAt(0)) * 31 +\r\n Number(value.charAt(1)) * 29 +\r\n Number(value.charAt(2)) * 23 +\r\n Number(value.charAt(3)) * 19 +\r\n Number(value.charAt(4)) * 17 +\r\n Number(value.charAt(5)) * 13 +\r\n Number(value.charAt(6)) * 7 +\r\n Number(value.charAt(7)) * 5 +\r\n Number(value.charAt(8)) * 3;\r\n\r\n return 10 - (number % 11) == Number(value.charAt(9));\r\n };\r\n\r\n if (!webix.env.touch && webix.ui.scrollSize && webix.CustomScroll) webix.CustomScroll.init();\r\n\r\n //configuration\r\n var app = core.create({\r\n id: \"admin-demo\",\r\n name: \"Webix Admin\",\r\n version: \"0.1\",\r\n debug: true,\r\n start: \"/app/dashboard\",\r\n host: \"http://localhost:18374\",\r\n //host:\t\"http://apiketoan.vacom.vn\"\r\n });\r\n\r\n var port = \"\";\r\n\r\n if (document.location.protocol == \"file:\") {\r\n app.config.host = \"http://localhost:18374\";\r\n } else if (document.location.hostname == \"localhost\" || document.location.hostname == \"127.0.0.1\") {\r\n app.config.host = \"http://localhost:18374\";\r\n } else {\r\n if (document.location.port != 80 && document.location.port != 445) {\r\n port = \":\" + document.location.port.toString();\r\n }\r\n\r\n app.config.host = document.location.protocol + \"//\" + document.location.hostname + port + \"/api\";\r\n }\r\n\r\n //alert(app.host);\r\n\r\n document.onkeydown = function () {\r\n var x = event.keyCode;\r\n if (((x == 70 || x == 78 || x == 79 || x == 80) && event.ctrlKey) || (x > 111 && x < 124)) {\r\n //alert (\"No new window\")\r\n event.cancelBubble = true;\r\n event.returnValue = false;\r\n event.keyCode = false;\r\n return false;\r\n }\r\n };\r\n\r\n webix.UIManager.addHotKey(\"any\", function (view, ev) {\r\n if (typeof view.getTopParentView !== \"function\") return;\r\n\r\n var topParent = view.getTopParentView();\r\n\r\n var elButtons = topParent.$view.getElementsByClassName(\"webix_el_button\");\r\n\r\n if (elButtons.length > 0) {\r\n for (var i = 0; i < elButtons.length; i++) {\r\n var element = elButtons[i];\r\n var viewId = element.attributes[\"view_id\"].value;\r\n var button = webix.$$(viewId);\r\n\r\n if (button.config.shortcut != \"undefined\") {\r\n var shortcut = button.config.shortcut;\r\n if (shortcut == ev.code) {\r\n button.callEvent(\"onClick\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n webix.UIManager.addHotKey(\"esc\", function (view) {\r\n if (typeof view.getTopParentView !== \"function\") return;\r\n\r\n var topParent = view.getTopParentView();\r\n\r\n var elButtons = topParent.$view.getElementsByClassName(\"webix_el_button\");\r\n\r\n if (elButtons.length > 0) {\r\n for (var i = 0; i < elButtons.length; i++) {\r\n var element = elButtons[i];\r\n var viewId = element.attributes[\"view_id\"].value;\r\n var button = webix.$$(viewId);\r\n\r\n if (button.config.shortcut == \"esc\") {\r\n button.callEvent(\"onClick\");\r\n return;\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (webix.storage.local.get(\"APP_CACHE\") == null) {\r\n var app_cache = {};\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n }\r\n app.use(menu);\r\n app.use(locale);\r\n app.use(theme);\r\n app.use(user);\r\n\r\n return app;\r\n});\r\n\ndefine('views/forms/68_bangkebanraForm',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n id: \"multicombo_kyhieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/commonHD',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n var fmHoaDon123 = function (number, keyValue) {\r\n number = number.toString().replaceAll(\",\", \"\");\r\n if (typeof number == \"string\") if (keyValue === undefined || keyValue === null || keyValue === \"\") keyValue = \"hoadon123\";\r\n var dsFieldFormat = webix.storage.local.get(\"dsFieldFormat\");\r\n var decimalSizeLeght = 0;\r\n if (dsFieldFormat !== undefined && dsFieldFormat !== null && dsFieldFormat[keyValue] !== undefined) {\r\n decimalSizeLeght = dsFieldFormat[keyValue];\r\n }\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeLeght,\r\n });\r\n\r\n return k(number);\r\n };\r\n\r\n var fmHoaDon123number = function (number, keyValue) {\r\n if (typeof number == \"string\") if (keyValue === undefined || keyValue === null || keyValue === \"\") keyValue = \"hoadon123\";\r\n var dsFieldFormat = webix.storage.local.get(\"dsFieldFormat\");\r\n var decimalSizeLeght = 0;\r\n if (dsFieldFormat !== undefined && dsFieldFormat !== null && dsFieldFormat[keyValue] !== undefined) {\r\n decimalSizeLeght = dsFieldFormat[keyValue];\r\n }\r\n var k = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeLeght,\r\n };\r\n\r\n if (keyValue == \"tgtttbso\" || keyValue == \"tgtthue\" || keyValue == \"tgtcthue\" || keyValue == \"ttcktmai\" || keyValue == \"tkcktmn\" || keyValue == \"tgtphi\" || keyValue == \"tgtttbso_last\") {\r\n number = number.toString().replaceAll(\",\", \"\");\r\n\r\n number = roundNumber(number, decimalSizeLeght);\r\n }\r\n\r\n return webix.Number.parse(number.toString(), k);\r\n };\r\n\r\n var roundNumber = function (num, decimals) {\r\n var n = Number(num).toFixed(decimals);\r\n return n;\r\n };\r\n\r\n var numberFormat = function (keyValue) {\r\n return {\r\n edit: function (v) {\r\n if ((v === undefined || v === null || v === \"\" || v === NaN) && !isNaN(v)) {\r\n return v;\r\n }\r\n return fmHoaDon123(v, keyValue);\r\n },\r\n parse: function (v) {\r\n if ((v === undefined || v === null || v === \"\" || v === NaN) && !isNaN(v)) {\r\n return v;\r\n }\r\n return fmHoaDon123number(v, keyValue);\r\n },\r\n };\r\n };\r\n\r\n var CheckKhacNull = function (value) {\r\n if (value === undefined || value === null || value === \"\") return false;\r\n else return true;\r\n };\r\n\r\n function getDecimalPlace(val, callback) {\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n \r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n \r\n // Sau khi lấy dữ liệu từ API, tiếp tục gọi callback\r\n callback(arr);\r\n });\r\n }\r\n\r\n // var formatSoDefault = {\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 2,\r\n // };\r\n\r\n // function f(a) {\r\n // return webix.Number.format(a, formatSoDefault);\r\n // }\r\n // function g(a) {\r\n // return webix.Number.parse(a, formatSoDefault);\r\n // }\r\n\r\n // var fmNumber = {\r\n // parse: function (a) {\r\n // return g(a);\r\n // },\r\n // edit: function (a) {\r\n // if (a !== undefined) return f(a);\r\n // return a;\r\n // },\r\n // };\r\n\r\n return {\r\n $ui: {},\r\n\r\n clear_filter: function (table) {\r\n webix.storage.local.remove(\"currentFilter\");\r\n table.eachColumn(function (id, col) {\r\n var filter = this.getFilter(id);\r\n if (filter) {\r\n if (filter.setValue) filter.setValue(\"\"); // suggest-based filters\r\n else filter.value = \"\"; // html-based: select & text\r\n }\r\n });\r\n },\r\n\r\n validate_HD_ReturnListHdonId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn dòng để xử lý!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n\r\n if (\r\n lstDataChoose.filter(function (p) {\r\n return p.tthai != \"Chờ ký\";\r\n }).length > 0\r\n ) {\r\n webix.message(\"Danh sách đã chọn tồn tại dòng không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id = [];\r\n }\r\n else if (lstDataChoose.filter(function (p) {\r\n var check = true;\r\n var today = new Date();\r\n var nlap = new Date(Date.parse(p.nlap));\r\n if (nlap > today) {\r\n check = false\r\n }\r\n return check;\r\n }) == false\r\n ) {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn có ngày hóa đơn sau ngày ký!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n lsthdon_id = $.map(lstDataChoose, function (item) {\r\n return item.hdon_id;\r\n });\r\n }\r\n }\r\n return lsthdon_id;\r\n },\r\n validate_HD_ReturnListHdonId_notSign: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn dòng để xử lý!\", \"error\");\r\n lsthdon_id = [];\r\n } else {\r\n lsthdon_id = $.map(lstDataChoose, function (item) {\r\n return item.hdon_id;\r\n });\r\n }\r\n return lsthdon_id;\r\n },\r\n validate_HD_ReturnListHdonKhongMaVaCoMaId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null;\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1;\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0;\r\n });\r\n\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" hóa đơn không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa];\r\n },\r\n validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1 && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0 && p.khieu.substring(4, 5) !== 'M';\r\n });\r\n var lstDataChooseMTT = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.khieu.substring(4, 5) === 'M';\r\n });\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseMTT.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" hóa đơn không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n lstDataChooseMTT = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại hóa đơn không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n lstDataChooseMTT = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lstDataChooseMTT = $.map(lstDataChooseMTT, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa, lstDataChooseMTT];\r\n },\r\n validate_BL_ReturnListHdonKhongMaVaCoMaId: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id_coMa = [];\r\n var lsthdon_id_khongMa = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n var lstDataChooseKhongRoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === null;\r\n });\r\n\r\n var lstDataChooseCoMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 1;\r\n });\r\n var lstDataChooseKhongMa = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true && p.is_hdcma === 0;\r\n });\r\n\r\n if (lstDataChoose.length === 0) {\r\n webix.message(\"Vui lòng chọn biên lai để xử lý!\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n if (\r\n lstDataChooseCoMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongMa.filter(function (p) {\r\n return p.tthai !== \"Chờ ký\";\r\n }).length > 0 ||\r\n lstDataChooseKhongRoMa.length > 0\r\n ) {\r\n if (lstDataChooseKhongRoMa.length > 0) {\r\n webix.message(\"Danh sách đã chọn tồn tại \" + lstDataChooseKhongRoMa.length + \" biên lai không rõ trạng thái mã !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n } else {\r\n webix.message(\"Danh sách đã chọn tồn tại biên lai không ở trạng thái chờ ký !\", \"error\");\r\n lsthdon_id_coMa = [];\r\n lsthdon_id_khongMa = [];\r\n }\r\n } else {\r\n lsthdon_id_coMa = $.map(lstDataChooseCoMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n lsthdon_id_khongMa = $.map(lstDataChooseKhongMa, function (item) {\r\n return {\r\n hdon_id: item.hdon_id,\r\n is_hdcma: item.is_hdcma,\r\n };\r\n });\r\n }\r\n }\r\n return [lsthdon_id_coMa, lsthdon_id_khongMa];\r\n },\r\n\r\n ExcuteHoaDon: function (lsthdon_id, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n var isCompleted = false;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .timeout(180000)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n // if (result.tthai == \"Đã ký\") {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(\r\n // app.config.host + \"/System/ExecuteCommand\",\r\n // {\r\n // command: \"CM00025\",\r\n // parameter: {},\r\n // },\r\n // function (text) {\r\n // var json = JSON.parse(text);\r\n // // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].value == \"C\") {\r\n // var data = {\r\n // lsthdon_id: lsthdon_id,\r\n // nguoinhan: result.email,\r\n // tieude: \"Thông báo xuất hóa đơn điện tử\",\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // } else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n // }\r\n // );\r\n\r\n // // webix.modalbox.hide();\r\n // }\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n isCompleted = true;\r\n })\r\n .fail(function (xhr) {\r\n if (!isCompleted) {\r\n // Xử lý lỗi khi timeout hoặc lỗi khác xảy ra\r\n if (xhr.status === 0) {\r\n webix.message({ type: \"error\", text: \"Hết thời gian yêu cầu chờ ký!\" });\r\n } else {\r\n webix.message({ type: \"error\", text: \"Lỗi xảy ra: \" + xhr.statusText });\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n function excuteHdPlugin(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: checkHasCode == true ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n parameters.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n ExcuteHoaDonMTT: function (lsthdon_id, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n var checkGuiCQT = true;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: 206,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //SignMTTFileMem(lsthdon_id,cert);\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n function SignMTTFileMem(lsthdon_id, cert) {\r\n var postData = {\r\n cert_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n mltdiep: '206',\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\"\r\n })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: res.error\r\n });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n function SignMTTToKenHSM(idhoadon, k) {\r\n var hdon_id = idhoadon;\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceMTTXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID()\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n function excuteHdPlugin(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: 206,\r\n };\r\n\r\n parameters.guiCQT = \"NotSend\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error + json.shdon, \"error\");\r\n k++;\r\n excuteHdPlugin(k);\r\n } else {\r\n SignMTTToKenHSM(idhoadon, k);\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n \r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: 206,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_MTT_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n //SignMTTToKenHSM(lsthdon_id,true,false);\r\n });\r\n } else {\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress() \r\n },\r\n TongHopHoaDonMTT: function (lsthdon_id, tagSign) {\r\n var checkGuiCQT = true;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n var postData = {\r\n editmode: 1,\r\n data: [\r\n {\r\n details: $.map(lsthdon_id, function (item) {\r\n return { hdon_id: item };\r\n })\r\n }\r\n ]\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveTongHopMTT\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var id = json[\"id\"];\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postDataMTT = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: id,\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT\", postDataMTT, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: id,\r\n type_cmd: 206,\r\n CheckHSM: resultscheckSigHSM[0].json()\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT_HSM\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n tblInvoice.clearAll();\r\n tblInvoice.load(tblInvoice.config.url);\r\n return;\r\n }\r\n });\r\n\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlTongHopMTT?id=\" + id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Bạn chưa được phân quyền chứng thư số\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: json.error\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: id\r\n // shdon: json.shdon,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlTongHopMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n shdon: 0,\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(json.error, \"error\");\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress();\r\n tableHdon.clearAll();\r\n tableHdon.load(tableHdon.config.url);\r\n }\r\n },\r\n\r\n });\r\n\r\n tableHdon.enable();\r\n ui.enable();\r\n tableHdon.hideProgress();\r\n },\r\n KyTongHopXml: function (ids) {\r\n var checkGuiCQT = true;\r\n var tblInvoice = webix.$$(\"bangtonghop\");\r\n var ui = tblInvoice.getTopParentView();\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('bangtonghop').enable();\r\n webix.$$('bangtonghop').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n ids.forEach(function (id) {\r\n var postDataMTT = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: id,\r\n };\r\n\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress(); \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT\", postDataMTT, function (text) {\r\n var result = JSON.parse(text); \r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\"); \r\n table.clearAll();\r\n table.load(table.config.url);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n });\r\n })\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n ids.forEach(function (id) {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: id,\r\n type_cmd: 206,\r\n CheckHSM: resultscheckSigHSM[0].json()\r\n };\r\n\r\n if (!checkGuiCQT) postData.guiCQT = \"NotSend\"; \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignTongHopMTT_HSM\", postData, function (text) {\r\n var res = JSON.parse(text); \r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n })\r\n \r\n } else {\r\n function excuteHdPluginMTT(k) {\r\n if (k < ids.length) {\r\n var id = ids[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlTongHopMTT?id=\" + id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n \r\n webix.promise.all([a, b, id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({\r\n type: \"error\",\r\n text: \"Bạn chưa được phân quyền chứng thư số\"\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(tblInvoice.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: json.error\r\n });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n \r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: id\r\n // shdon: json.shdon,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlTongHopMTT\", parameters, function (text) {\r\n var result = JSON.parse(text); \r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\"); \r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPluginMTT(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n shdon: 0,\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n \r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPluginMTT(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // tblInvoice.enable();\r\n // ui.enable();\r\n // tblInvoice.hideProgress(); \r\n },\r\n ExcuteHoaDonMTT_NotSign: function (lsthdon_id, havesign, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n cert_serial: cert.cer_serial,\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n mltdiep: '206',\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\"\r\n })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: res.error\r\n });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n tblInvoice.showProgress();\r\n ui.disable();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n lsthdon_id: lsthdon_id,\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID(),\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_MTT_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n function excuteHdPluginMTT(k) {\r\n if (k < lsthdon_id.length) {\r\n var hdon_id = lsthdon_id[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceMTTXml?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n var idhoadon = results[2];\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: idhoadon,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: '206',\r\n branch_code: user.getDvcsID()\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMTT\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPluginMTT(k);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: json[\"signid\"],\r\n xml: json[\"InvoiceXmlData\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: json[\"seller\"],\r\n tagSign: json[\"signingTag\"],\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPluginMTT(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n ExcuteHoaDonForHasCodeAndNotHaveAnyCode: function (lsthdon_id, checkGuiCQT, checkHasCode, tagSign) {\r\n if (tagSign == undefined) tagSign = \"NBan\";\r\n checkHasCode = checkHasCode || false;\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var ui = tableHdon.getTopParentView();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n webix.$$('invoiceViews').enable();\r\n webix.$$('invoiceViews').hideProgress();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDon = lsCoMa.concat(lsKhongMa);\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n lsthdon_id: dsHoaDon,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n ui.disable();\r\n tableHdon.showProgress();\r\n var urlApi = \"\";\r\n urlApi = \"/Invoice68/SignInvoiceCertFile68ForHasCodeAndNotHaveAnyCode\";\r\n var dataPut = { data: [postData] };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + urlApi, dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n ui.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n webix.message(\"Đã thực hiện xong\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var tblInvoice = webix.$$(\"invoiceViews\");\r\n webix.extend(tblInvoice, webix.ProgressBar);\r\n tblInvoice.disable();\r\n ui.disable();\r\n tblInvoice.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDon = lsCoMa.concat(lsKhongMa);\r\n\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n lsthdon_id: dsHoaDon,\r\n AllHoaDon: \"All\",\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n postData.guiCQT = \"NotSend\";\r\n }\r\n\r\n var url = app.config.host + \"/Invoice68/SignListInvoiceCertFile_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var lsCoMa = lsthdon_id[0];\r\n var lsKhongMa = lsthdon_id[1];\r\n var dsHoaDonXL = lsCoMa.concat(lsKhongMa);\r\n function excuteHdPlugin(k, dsHoaDon) {\r\n if (k < dsHoaDon.length) {\r\n // debugger;\r\n var hoadon = dsHoaDon[k];\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice68/ExportInvoiceXml?id=\" + hoadon.hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hoadon]).then(function (results) {\r\n var json = results[0].json();\r\n var item = results[2];\r\n\r\n if (item.is_hdcma !== 0 && item.is_hdcma !== 1) {\r\n webix.message({ type: \"error\", text: \"Kiểm tra lại loại hóa đơn\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n if (json.InvoiceXmlData == \"\") {\r\n webix.message({ type: \"error\", text: \"Hóa đơn chưa có chi tiết. Vui lòng kiểm tra lại\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n var listcerts = results[1].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n tblInvoice.enable();\r\n tblInvoice.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n return;\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n xmlbangke: json.xmlbangke,\r\n hdon_id: item.hdon_id,\r\n // shdon: json.shdon,\r\n username: user.getCurrentUser(),\r\n type_cmd: item.is_hdcma === 1 ? 200 : 203,\r\n };\r\n\r\n if (!checkGuiCQT) {\r\n parameters.guiCQT = \"NotSend\";\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n //var table = webix.$$(\"invoiceViews\");\r\n //table.clearAll();\r\n //table.load(table.config.url);\r\n }\r\n k++;\r\n excuteHdPlugin(k, dsHoaDon);\r\n });\r\n }\r\n //tblInvoice.enable();\r\n //tblInvoice.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"InvoiceXmlData\"],\r\n xmlbangke: json[\"InvoiceXmlBangKe\"],\r\n shdon: json[\"shdon\"],\r\n idSigner: \"seller\",\r\n tagSign: tagSign,\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n tblInvoice.enable();\r\n ui.enable();\r\n tblInvoice.hideProgress();\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n excuteHdPlugin(0, dsHoaDonXL);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n CommonOnclickTaskOfHD: function (self) {\r\n if ($$(\"kyhieu_id\") != undefined) {\r\n if ($$(\"kyhieu_id\").getPopup().getList().serialize().length > 0 ? true : false) self.callEvent(\"onClick\");\r\n else webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n } else {\r\n webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n }\r\n },\r\n CommonOnclickTaskOfHDTT32: function (self) {\r\n self.callEvent(\"onClick\");\r\n },\r\n\r\n CreatItemFromData: function (field, tab) {\r\n var format = field.format;\r\n var isFmNumber = false;\r\n\r\n var formatNumberDetails = field.format;\r\n if (formatNumberDetails !== undefined && formatNumberDetails !== \"\" && formatNumberDetails !== null) {\r\n var formatNumberArray = formatNumberDetails.split(\":\");\r\n if (formatNumberArray[0] === \"fmNumber\") isFmNumber = true;\r\n }\r\n\r\n // field.format = isFmNumber === true ? null : format;\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption != null ? _(field.caption) : _(field.column_name),\r\n editor: field.type_editor,\r\n hidden: field.hidden,\r\n value_change: field.value_change,\r\n isFmNumber: isFmNumber,\r\n formatOriginal: field.format,\r\n };\r\n\r\n if (field.read_only == \"C\" || field.type_editor == \"checkbox\") {\r\n delete subCol.editor;\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n subCol.template = \"{common.checkbox()}\";\r\n subCol.checkValue = true;\r\n subCol.uncheckValue = false;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n\r\n if (field.type_editor == \"autonumeric\") {\r\n if (field.data_decimal >= 0) {\r\n var decimal = Array(field.data_decimal + 1).join(\"9\");\r\n\r\n subCol.numericConfig = {\r\n //maximumValue: Number(\"999999999999.\" + decimal),\r\n //minValue: Number(\"-999999999999.\" + decimal),\r\n decimalPlaces: field.data_decimal,\r\n };\r\n }\r\n }\r\n // if (field.data_decimal === \"fmNumber\") subCol.format = fmNumber;\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n if (field.type_editor == \"combo\" || field.type_editor == \"multiselect\") {\r\n if (field.ref_id !== undefined && field.ref_id !== null && field.ref_id !== \"\") {\r\n subCol.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n subCol.optionslist = true;\r\n } else {\r\n subCol.options = JSON.parse(field.list_column);\r\n subCol.value = \"1\";\r\n }\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n\r\n if (field.type_editor == \"datepicker\") {\r\n subCol.editor = \"date\";\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.type_editor == \"treesuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"treesuggest\",\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"gridsuggest\",\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n textValue: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n if (field.type_editor == \"search\") {\r\n subCol.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(JSON.stringify(json));\r\n form.setValues(json);\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n if (field.type_editor == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id.toUpperCase());\r\n }\r\n\r\n subCol.editor = \"textsearch\";\r\n subCol.tableId = \"edit_\" + tab.table_name;\r\n subCol.onIconButtonClick = function (e) {\r\n var tableId = this.getAttribute(\"tableId\");\r\n var table = $$(tableId);\r\n tableShowEditWindow(table, 1);\r\n };\r\n\r\n subCol.suggest = {\r\n view: \"gridsuggest\",\r\n value_suggest: field.value_suggest,\r\n fieldExpression: field.field_expression,\r\n displayField: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n columnName: field.column_name,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1 && field.column_name != \"tlkthu\") return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n if (this.config.fieldExpression != null) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var fields = this.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n selectedItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n }\r\n return subCol;\r\n },\r\n\r\n //FormMater Tạo item form trên trang từ data\r\n CreatItemMaterFromData: function (field, windowno) {\r\n var timeStamp = Date.now();\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n //keepViews: true,\r\n name: field.column_name,\r\n label: _(field.caption),\r\n id: field.column_name,\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n hidden: field.hidden,\r\n placeholder: field.placeholder,\r\n };\r\n\r\n var formatNumberMaster = item.format;\r\n var formatdvtt = false;\r\n if (formatNumberMaster !== undefined && formatNumberMaster !== \"\" && formatNumberMaster !== null) {\r\n var formatNumberArray = formatNumberMaster.split(\":\");\r\n if (formatNumberArray[0] === \"fmNumber\") {\r\n item.format = numberFormat(field.column_name);\r\n formatdvtt = true;\r\n }\r\n }\r\n if ((field.column_type == \"numeric\" && formatdvtt == false) || field.column_name == \"tgtkhac\" || field.column_name == \"tgtkcthue\") {\r\n var decimal = \"\";\r\n if (field.data_decimal >= 0) {\r\n for (var i = 0; i < parseInt(field.data_decimal); i++) {\r\n decimal += \"0\";\r\n }\r\n }\r\n item.format = \"1,111.\" + decimal;\r\n item.attributes.onClick = \"this.select();\";\r\n }\r\n\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.readonly == \"C\") {\r\n item.readonly = true;\r\n }\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n if (windowno != undefined && (windowno == \"WIN00791\" || windowno == \"WIN00792\" || windowno == \"WIN00793\")) {\r\n item.inputAlign = \"left\";\r\n } else {\r\n item.inputAlign = \"right\";\r\n }\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n } else if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n } else if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n } else if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n } else if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n } else {\r\n if (rule.trim() !== \"\") {\r\n item.validate = Function(\"value\", field.valid_rule);\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n }\r\n if (item.id === \"stknmua\" || item.id === \"stknban\") {\r\n item.invalidMessage = item.label + \" không được vượt quá 30 ký tự\";\r\n }\r\n if (item.id === \"sdtnmua\") {\r\n item.invalidMessage = item.label + \" không được vượt quá 20 ký tự\";\r\n }\r\n if (item.id === \"email\") {\r\n item.invalidMessage = item.label + \" không đúng định dạng hoăc vượt quá 50 ký tự\";\r\n }\r\n if (item.id === \"dchi\") {\r\n item.invalidMessage = item.label + \" không hợp lệ hoặc vượt quá 400 ký tự\";\r\n }\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n template: field.display_field,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n if (item.view == \"search\") {\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1 && field.column_name != \"tlkthu\") return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n // if (this.config.validate != null) {\r\n // this.validate();\r\n // }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n if (this.config.value_change != null) {\r\n var fn = Function(\"newv\", \"oldv\", \"id\", \"timeStamp\", this.config.value_change);\r\n fn(newv, oldv, this.config.id, timeStamp);\r\n }\r\n };\r\n }\r\n if (item.css === \"txtTongtien\") item.label = \"\";\r\n return item;\r\n },\r\n\r\n ExeCuteCheckReadCurencyTV: function (checkReadTV) {\r\n if (checkReadTV != 0) {\r\n // if ($$(\"docngoaitetv\") != null) $$(\"docngoaitetv\").setValue(1);\r\n }\r\n\r\n var total_amount = $$(\"tgtttbso_last\").getValue();\r\n var type_curency = \"VND\";\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if ($$(\"dvtte\") != null) {\r\n var type_curency = $$(\"dvtte\").getValue();\r\n }\r\n if (\r\n total_amount !== undefined &&\r\n total_amount !== null &&\r\n total_amount.toString() !== \" \" &&\r\n total_amount.toString() !== \"\" &&\r\n total_amount.toString() !== \"0\" &&\r\n CheckKhacNull(checkReadTV) &&\r\n checkReadTV.toString() !== \"true\"\r\n ) {\r\n var url = \"\";\r\n if (type_curency == \"VND\") {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n } else if (type_curency == \"JPY\") {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_JPY?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n }else {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n }\r\n\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n if (type_curency == \"GBP\") {\r\n c_result.data = c_result.data.replace('đô la Mỹ','bảng Anh').replace('dollars','pounds');\r\n } else if (type_curency == \"SGD\") {\r\n c_result.data = c_result.data.replace('Mỹ','Singapore').replace('dollars','Singapore dollars');\r\n } else if (type_curency == \"JPY\") {\r\n c_result.data = c_result.data.replace('đô la Mỹ','yên Nhật');\r\n }\r\n if (item != undefined) {\r\n if (item.tthdon == 21) {\r\n c_result.data = c_result.data.replace('Âm','Điều chỉnh giảm');\r\n }\r\n }\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n } else {\r\n if (type_curency === \"USD\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero dollars.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không đô la Mỹ.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"GBP\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero pounds.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không bảng Anh.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('đô la Mỹ','bảng Anh').replace('dollars','pounds');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"JPY\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"平和がない\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không yên Nhật.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_JPY?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('đô la Mỹ','yên Nhật');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else if (type_curency === \"SGD\") {\r\n if (Number(total_amount) == 0) {\r\n if (checkReadTV == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Zero Singapore dollar.\");\r\n } else {\r\n $$(\"tgtttbchu\").setValue(\"Không đô la Singapore.\");\r\n }\r\n } else {\r\n checkReadTV = \"\" || \" \" || undefined || null ? 0 : checkReadTV;\r\n url = app.config.host + \"/Invoice68/Amount_ToWord_New?number=\" + total_amount + \"&checkReadTV=\" + checkReadTV;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n c_result.data = c_result.data.replace('Mỹ','Singapore').replace('dollars','Singapore dollars');\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n } else {\r\n if (Number(total_amount) == 0) {\r\n $$(\"tgtttbchu\").setValue(\"Không đồng.\");\r\n } else {\r\n url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n var xhr = webix.ajax().sync().get(url);\r\n\r\n var c_result = JSON.parse(xhr.responseText);\r\n\r\n if (c_result.error == undefined || c_result.error == null) {\r\n if (c_result.data != undefined && c_result.data != null) {\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n CanhBaoTinhTien: function () {\r\n var tong_tien_all = 0;\r\n var tong_tien = 0;\r\n var canh_bao = \"\";\r\n var khieu =\"\";\r\n var tthdon = \"\";\r\n var lech = 0;\r\n var lech2 = 0;\r\n var table = $$(\"hoadon68_chitiet\");\r\n var table_t = webix.$$(\"invoiceViews\");\r\n var item = table_t.getSelectedItem();\r\n if (item != undefined) {\r\n khieu = item.khieu;\r\n tthdon = item.tthdon;\r\n }\r\n if ($$(\"tudongtinhtien\") !== undefined && $$(\"tudongtinhtien\").isVisible()) {\r\n if ($$(\"tudongtinhtien\").getValue()==true){\r\n $$(\"lblCanhbao\").hide();\r\n return;\r\n }\r\n }\r\n if (table !== undefined) {\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n });\r\n\r\n if ($$(\"tgtttbso\") !== undefined && $$(\"tgtttbso\").isVisible()) {\r\n var tgtttbso = Number($$(\"tgtttbso\").getValue());\r\n var decimalDigits = 0;\r\n if (tgtttbso.toString().includes(\".\")) {\r\n var parts = tgtttbso.toString().split(\".\");\r\n decimalDigits = parts[1].length;\r\n }\r\n if(tgtttbso !== tong_tien_all)\r\n {\r\n lech = Math.abs(tgtttbso - tong_tien_all.toFixed(decimalDigits));\r\n }\r\n }\r\n }\r\n var tong_tien = 0;\r\n if ($$(\"tgtttbso\") !== undefined && $$(\"tgtttbso\").isVisible()) {\r\n if ($$(\"tgtttbso\").getValue() != null) tong_tien += Number($$(\"tgtttbso\").getValue());\r\n } else {\r\n tong_tien += tong_tien_all;\r\n }\r\n if ($$(\"tgtphi\") !== undefined) {\r\n if ($$(\"tgtphi\").getValue() != null) tong_tien += Number($$(\"tgtphi\").getValue());\r\n }\r\n if ($$(\"tgtkhac\") !== undefined) {\r\n if ($$(\"tgtkhac\").getValue() != null) tong_tien -= Number($$(\"tgtkhac\").getValue());\r\n }\r\n if ($$(\"tgtkcthue\") !== undefined) {\r\n if ($$(\"tgtkcthue\").getValue() != null) tong_tien -= Number($$(\"tgtkcthue\").getValue());\r\n }\r\n if ($$(\"tgtttbso_last\") !== undefined && $$(\"tgtttbso_last\").isVisible()){\r\n var tgtttbso_last = Number($$(\"tgtttbso_last\").getValue());\r\n var decimalDigits = 0;\r\n if (tgtttbso_last.toString().includes(\".\")) {\r\n var parts = tgtttbso_last.toString().split(\".\");\r\n decimalDigits = parts[1].length;\r\n }\r\n if( tgtttbso_last !== tong_tien)\r\n {\r\n lech2 = Math.abs(tgtttbso_last - tong_tien.toFixed(decimalDigits));\r\n }\r\n }\r\n if ( lech <= 0 && lech2 <= 0){\r\n //$$(\"lblCanhbao\").type = 0;\r\n $$(\"lblCanhbao\").hide();\r\n return;\r\n } else {\r\n /*if (lech > 100 || lech2 > 100) {\r\n $$(\"lblCanhbao\").type = 1;\r\n } else {\r\n $$(\"lblCanhbao\").type = 0;\r\n }*/\r\n if (lech > 0 && lech2 > 0) {\r\n canh_bao = \"Cảnh báo: Trường tổng tiền sau thuế tính lệch \" + lech + \" và trường thành tiền tính lệch \" + lech2 + \" \"+ $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n } else if (lech > 0) {\r\n canh_bao = \"Cảnh báo: Trường tổng tiền sau thuế tính lệch \" + lech + \" \" + $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n }\r\n else if (lech2 > 0) {\r\n canh_bao = \"Cảnh báo: Trường thành tiền tính lệch \" + lech2 + \" \" + $$(\"dvtte\").getValue();\r\n $$(\"lblCanhbao\").setValue(canh_bao);\r\n }\r\n $$(\"lblCanhbao\").show();\r\n return\r\n }\r\n },\r\n GetBienLaiChon: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn biên lai để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n GetHoaDonChon: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n GetHoaDonChonOfTableId: function (params) {\r\n var tableHdon = webix.$$(params.id);\r\n var datafrmAll = tableHdon.serialize();\r\n // get list được chọn\r\n var lsthdon_id = [];\r\n\r\n var lstDataChoose = datafrmAll\r\n .filter(function (p) {\r\n return p != undefined;\r\n })\r\n .filter(function (p) {\r\n return p.chon == true;\r\n });\r\n\r\n if (lstDataChoose.length == 0) {\r\n webix.message(\"Vui lòng chọn hóa đơn để xử lý!\", \"error\");\r\n }\r\n return lstDataChoose;\r\n },\r\n ExcuteShowPopupNotifyErrorInvoice: function () {\r\n require([\"views/forms/68_huyhoadon\", \"app\"], function (huyhoadon, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item.tthdon == 11 || item.tthdon == 17) {\r\n webix.message(\"Hóa đơn đã điều chỉnh không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu_temp,\r\n shdon: item.shdon_temp,\r\n ngay: item.nlap_temp,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.hdon_id_old,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon_temp,\r\n ngay: item.nlap_temp,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.hdon_id_old,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n });\r\n },\r\n ExcuteReplaceInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n \"tgtkcthue\",\r\n \"tgtkhac\"\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 2) ||\r\n (item.tthai == \"Chờ phản hồi\" && item.tthdon == 3)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n \r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần thay thế\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750, \r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n \r\n var chons = [];\r\n \r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n tblMatHang.destructor();\r\n \r\n // var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.loaihdlq = kyHieuHoaDon.loaihdlq;\r\n item.tgia = 1;\r\n item.sdhang = \"\";\r\n item.tienthuegtgtgiam = 0;\r\n item.tiletienthuegtgtgiam = \"\";\r\n item.giamthuebanhang20 = false;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n \r\n console.log(item.khieu);\r\n console.log(item.khieu_temp);\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n \r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteChonInvoice: function (kyHieuHoaDon, mode) {\r\n mode = (typeof mode !== 'undefined') ? mode : null;\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var itemSL = table.getSelectedItem();\r\n\r\n if (itemSL == null || itemSL == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n // var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n\r\n var item = Object.assign({}, itemSL);\r\n item.shdon = null;\r\n item.sbmat = null;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n \r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setModeChangeView(mode);\r\n invoiceFormsCodeMTT.copyValues(item);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setModeChangeView(mode);\r\n invoiceFormsCode.copyValues(item);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setModeChangeView(mode);\r\n invoiceForms.copyValues(item);\r\n }\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteReplaceInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var detailForm;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteIncreaseChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteReduceChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var detailForm;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n ExcuteInfoChangeInvoice_32: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n // var item = table.getSelectedItem();\r\n var btn = $$(\"btnPlus\");\r\n // btn.callEvent(\"onClick\");\r\n //var detailForm = $$(\"invoiceForms\");\r\n for (var i = 0; i < arrayString.length; i++) {\r\n kyHieuHoaDon[arrayString[i]] = 0;\r\n }\r\n kyHieuHoaDon[\"tgtttbchu\"] = \"\";\r\n var detailForm;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n if (kyHieuHoaDon.khieu.charAt(1) == \"C\") {\r\n if (kyHieuHoaDon.khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(kyHieuHoaDon, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(kyHieuHoaDon, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(kyHieuHoaDon, null);\r\n }\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + kyHieuHoaDon.shdclquan + \" ngày \" + moment(kyHieuHoaDon.nlhdclquan).format(\"DD/MM/YYYY\") + \" ký hiệu \" + kyHieuHoaDon.khhdclquan,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n }\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n });\r\n },\r\n\r\n ExcuteIncreaseChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần điều chỉnh\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n\r\n var chons = [];\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n\r\n tblMatHang.destructor();\r\n\r\n webix.modalbox.hide();\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n // for (var i = 0; i < arrayString.length; i++) {\r\n // item[arrayString[i]] = 0;\r\n // }\r\n // item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n tableDetail.refreshColumns();\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteReduceChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn mặt hàng cần điều chỉnh\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n var tblMatHang = $$(\"tblMatHang\");\r\n var array = tblMatHang.serialize();\r\n\r\n var chons = [];\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var chon = array[i];\r\n if (chon.hasOwnProperty(\"chon\")) {\r\n if (chon.chon == true) {\r\n chons.push(chon);\r\n }\r\n }\r\n }\r\n tblMatHang.destructor();\r\n\r\n webix.modalbox.hide();\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.tthai_old = item.tthai;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n // for (var i = 0; i < arrayString.length; i++) {\r\n // item[arrayString[i]] = 0;\r\n // }\r\n // item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n for (var i = 0; i < chons.length; i++) {\r\n var chon = chons[i];\r\n chon.hdon_id = null;\r\n chon.cthdon_id = null;\r\n chon.id = webix.uid();\r\n tableDetail.add(chon);\r\n }\r\n tableDetail.refreshColumns();\r\n console.log(item.khieu);\r\n console.log(item.khieu_temp);\r\n detailForm.show();\r\n break;\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnMatHang\",\r\n id: \"tblMatHang\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [\r\n {\r\n text: \"\",\r\n content: \"masterCheckbox\",\r\n },\r\n ],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n });\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-type\": \"application/json\",\r\n })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var tblMatHang = $$(\"tblMatHang\");\r\n tblMatHang.parse(data);\r\n });\r\n });\r\n },\r\n ExcuteInfoChangeInvoice: function (kyHieuHoaDon) {\r\n require([\"views/forms/formhoadon78\", \"views/forms/formhoadoncode78\", \"views/forms/formhoadoncode78_mtt\", \"app\"], function (invoiceForms, invoiceFormsCode, invoiceFormsCodeMTT, app) {\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n \"tgtkcthue\",\r\n \"tgtkhac\"\r\n ];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"Chấp nhận TBSS\" ||\r\n item.tthai == \"Không chấp nhận TBSS\" ||\r\n item.tthai == \"TBSS sai định dạng\" ||\r\n item.tthai == \"Chờ phản hồi\") &&\r\n item.tthdon == 11)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n\r\n // var btnPlus = $$(\"btnPlus\");\r\n // btnPlus.callEvent(\"onClick\");\r\n // var detailForm = $$(\"invoiceForms\");\r\n var detailForm;\r\n var khieu = item.khieu;\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowconfig = app_cache[windowno];\r\n var ngay_hoa_don = item.nlap;\r\n item.cctbao_id_temp = item.cctbao_id;\r\n item.cctbao_id = kyHieuHoaDon.cctbao_id;\r\n item.khieu_temp = item.khieu;\r\n item.khieu = kyHieuHoaDon.khieu;\r\n item.nlap_temp = item.nlap;\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.tthai_old = item.tthai;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n item.tgia = 1;\r\n item.sdhang = \"\";\r\n item.tienthuegtgtgiam = 0;\r\n item.tiletienthuegtgtgiam = \"\";\r\n item.giamthuebanhang20 = false;\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n if (khieu.charAt(1) == \"C\") {\r\n if (khieu.charAt(4) == \"M\") {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCodeMTT.$ui);\r\n invoiceFormsCodeMTT.initUI(windowconfig);\r\n invoiceFormsCodeMTT.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCodeMTT.setEditMode(1);\r\n invoiceFormsCodeMTT.setValues(item, null);\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceFormsCode.$ui);\r\n invoiceFormsCode.initUI(windowconfig);\r\n invoiceFormsCode.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceFormsCode.setEditMode(1);\r\n invoiceFormsCode.setValues(item, null);\r\n }\r\n } else {\r\n detailForm = $$(\"invoiceViews\").$scope.ui(invoiceForms.$ui);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(kyHieuHoaDon.cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n }\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu_temp,\r\n };\r\n\r\n var tableDetail_phi = webix.$$(\"hoadon68_phi\");\r\n tableDetail_phi.clearAll();\r\n tableDetail_phi.refreshColumns();\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n while (!detailForm.isVisible()) {}\r\n\t $$(\"hoadon68_phi\").clearAll();\r\n });\r\n },\r\n ExcuteCancellingInvoice: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin hóa đơn!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại hóa đơn không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < data.length; i++) {\r\n if (i < data.length - 1) {\r\n strHoaDonSelect += data[i].shdon + \",\";\r\n } else {\r\n strHoaDonSelect += data[i].shdon;\r\n }\r\n }\r\n\r\n webix.confirm({\r\n text: \"Xác nhận hủy hóa đơn số \" + strHoaDonSelect + \" trên MobiFone Invoice.
Lưu ý: Cần làm thông báo 04/SS-HĐĐT để Hủy hóa đơn với CQT\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Hóa đơn hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn hóa đơn hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteCancellingInvoicetncn: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin chứng từ!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại chứng từ không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n webix.confirm({\r\n text: \"Hủy chứng từ trên MobiFone Invoice\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Chứng từ hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn chứng từ hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteHUyInvoicebienlai: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin biên lai!\", \"error\");\r\n }\r\n\r\n if (\r\n ((item.tthai == \"Đã ký\" ||\r\n item.tthai == \"CQT đã nhận\" ||\r\n item.tthai == \"CQT không tiếp nhận HĐ\" ||\r\n item.tthai == \"Chờ phản hồi\" ||\r\n item.tthai == \"Đã cấp mã\" ||\r\n item.tthai == \"CQT không cấp mã\") &&\r\n (item.tthdon == 0 || item.tthdon == 1)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && (item.tthdon == 19 || item.tthdon == 21 || item.tthdon == 23)) ||\r\n (item.tthai == \"CQT không tiếp nhận HĐ\" && item.tthdon == 2)\r\n ) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại biên lai không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var totalHuy = data.length;\r\n webix.confirm({\r\n text: \"Hủy biên lai trên MobiFone Invoice\",\r\n ok: \"Có\",\r\n width: \"500px\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var hoaDonHuy = data.length;\r\n for (var i = 0; i < hoaDonHuy; i++) {\r\n var idHoaDon = data[i].id;\r\n webix\r\n .ajax()\r\n .headers({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n .get(app.config.host + \"/Invoice68/uploadCanceledInv?id=\" + idHoaDon, function (text) {\r\n var response = JSON.parse(text);\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({\r\n type: \"error\",\r\n text: response.error,\r\n });\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n return;\r\n }\r\n\r\n totalHuy = totalHuy - 1;\r\n\r\n if (totalHuy == 0) {\r\n webix.message(\"Biên lai hủy thành công\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn biên lai hủy!\", \"error\");\r\n }\r\n },\r\n ExcuteCancellingInvoicebienlai: function () {\r\n require([\"views/forms/68_huyhoadon_bienlai\", \"app\"], function (huyhoadon, app) {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n var datafrm = table.serialize();\r\n var data = [];\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n var item = datafrm[i];\r\n if (item == null || item == undefined) {\r\n webix.message(\"Không tìm thấy thông tin biên lai!\", \"error\");\r\n }\r\n\r\n if (item.tthai == \"Đã ký\" && item.tthdon != 3 && item.tthdon != 27) {\r\n var check = true;\r\n } else {\r\n webix.message(\"Tồn tại biên lai không thể thực hiện chức năng này\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) {\r\n loai = 2;\r\n }\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].ladhddt == undefined || data[i].tctbao == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n webix.message(\"Chưa tích chọn biên lai !\", \"error\");\r\n }\r\n });\r\n },\r\n CheckKhacNull: function (value) {\r\n if (value === undefined || value === null || value === \"\") return false;\r\n else return true;\r\n },\r\n DuyetHoaDon: function (lsthdon_id, status) {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n var postData = {\r\n lsthdon_id: lsthdon_id,\r\n };\r\n\r\n webix.extend(tableHdon, webix.ProgressBar);\r\n tableHdon.disable();\r\n tableHdon.showProgress();\r\n\r\n var dataPut = { data: [postData], status: status };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/DuyetHoaDon\", dataPut, function (text) {\r\n var result = JSON.parse(text);\r\n var table = webix.$$(\"invoiceViews\");\r\n table.enable();\r\n table.hideProgress();\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.modalbox.hide();\r\n }\r\n });\r\n });\r\n },\r\n\r\n renderFormat: function (val, changeValue, data) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n getDecimalPlace(val, function (arr) {\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n case \"tienthuegtgtgiam\":\r\n field_name = \"tienthuegtgtgiam\";\r\n break; \r\n }\r\n\r\n //var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n if (format_config.isFmNumber === true) {\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config.isFmNumber === true) {\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n\r\n if (changeValue == true) {\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n\r\n table_chitiet.add(item);\r\n\r\n table_chitiet.select(item.id, \"ma\", false);\r\n table_chitiet.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n\r\n table_chitiet.editStop();\r\n\r\n table_chitiet.remove(item.id);\r\n table_chitiet.clearSelection();\r\n }\r\n var row = table_chitiet.serialize();\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n var selectedItem;\r\n for (var j = 0; j < row.length; j++) {\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n selectedItem = row[j];\r\n if (arrayString_chitiet[i] == \"tienphi\") {\r\n format_config = table_phi.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config !== undefined && format_config.format !== undefined && webix.rules.isNumber(selectedItem[arrayString_chitiet[i]])) {\r\n selectedItem[arrayString_chitiet[i]] = Number(format_config.format(selectedItem[arrayString_chitiet[i]]).replaceAll(\",\", \"\"));\r\n }\r\n table_chitiet.updateItem(selectedItem[\"id\"], selectedItem);\r\n table_chitiet.refresh();\r\n } else {\r\n format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n if (format_config !== undefined && format_config.format !== undefined && webix.rules.isNumber(selectedItem[arrayString_chitiet[i]])) {\r\n selectedItem[arrayString_chitiet[i]] = Number(format_config.format(selectedItem[arrayString_chitiet[i]]).replaceAll(\",\", \"\"));\r\n }\r\n table_chitiet.updateItem(selectedItem[\"id\"], selectedItem);\r\n table_chitiet.refresh();\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n CheckExistKeySession: function (key, check) {\r\n return true;\r\n var form = webix.$$(\"invoiceForms\");\r\n var newInvoice = form.config.newInvoice;\r\n var valueSession = sessionStorage.getItem(key);\r\n if (check != undefined) {\r\n return true;\r\n } else {\r\n if (valueSession == undefined || valueSession === null || valueSession === \"\") {\r\n valueSession = 0;\r\n valueSession++;\r\n sessionStorage.setItem(key, valueSession);\r\n if (newInvoice) {\r\n return true;\r\n }\r\n return true;\r\n }\r\n valueSession++;\r\n sessionStorage.setItem(key, valueSession);\r\n return true;\r\n }\r\n },\r\n\r\n roundNumber: function (num, decimals) {\r\n var n = Number(num).toFixed(decimals);\r\n return n;\r\n },\r\n\r\n getAllHD_ValidateHD: function () {\r\n var returnData = [];\r\n webix.ajax().sync().get(app.config.host + \"/Invoice68/GetListIDDataInvoiceDanhSachChoKy?start=0&count=1000&continue=null&filter=null&tlbparam=null&tthai=Chờ ký\", function (text) {\r\n var data = JSON.parse(text);\r\n returnData.push(data[0]);\r\n returnData.push(data[1]);\r\n });\r\n return returnData;\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/68_invoiceForms',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var mau04 = {};\r\n\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n function f(a) {\r\n return webix.Number.format(a, formatSoDefault);\r\n }\r\n function g(a) {\r\n return webix.Number.parse(a, formatSoDefault);\r\n }\r\n /*function fmNumber(a){\r\n if(a !== undefined)\r\n return f(a);\r\n return a;\r\n };*/\r\n var fmNumber = {\r\n parse: function (a) {\r\n return g(a);\r\n },\r\n edit: function (a) {\r\n if (a !== undefined) return f(a);\r\n return a;\r\n },\r\n };\r\n var mess = \"Tổng tiền chiết khấu lớn hơn tổng tiền hàng hóa thông thương trên hóa đơn. Vui lòng lập riêng hóa đơn chiết khấu mới.\";\r\n\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var decimal_place = Array(Number(arr[0][\"hoadon123\"]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][\"hoadon123\"]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n\r\n format_config.numericConfig = format_numeric;\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var format_config_phi = table_phi.getColumnConfig(\"tienphi\");\r\n format_config_phi.format = formatSo;\r\n format_config_phi.numericConfig = format_numeric;\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn 01GTGT
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlap\",\r\n label: \"Ngày hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"nlap\",\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"VND\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"VND\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 120 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.renderFormat(newv);\r\n var type_curency = $$(\"dvtte\").getValue();\r\n\r\n if (type_curency != \"VND\") {\r\n $$(\"docngoaitetv\").show();\r\n //$$(\"docngoaitetv\").setValue(1);\r\n } else {\r\n $$(\"docngoaitetv\").hide();\r\n }\r\n\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"docngoaitetv\",\r\n name: \"docngoaitetv\",\r\n value: 0,\r\n labelRight: _(\"Đọc ngoại tệ Tiếng Việt\"),\r\n labelWidth: 2,\r\n width: 180,\r\n hidden: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV(newv);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người bán\"), name: \"stknban\", id: \"stknban\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhban\", id: \"tnhban\" },\r\n ],\r\n },\r\n {},\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã khách hàng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"code\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00002\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"invoiceForms\");\r\n var selectedItem = $$(\"invoiceForms\").getValues();\r\n\r\n selectedItem[\"mnmua\"] = obj[\"code\"];\r\n selectedItem[\"tnmua\"] = obj[\"buyer_name\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"dchi\"] = obj[\"address\"];\r\n selectedItem[\"mst\"] = obj[\"tax_code\"];\r\n selectedItem[\"email\"] = obj[\"email\"];\r\n selectedItem[\"stknmua\"] = obj[\"bank_account\"];\r\n table.setValues(selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n {\r\n view: \"text\",\r\n label: _(\"Email\"),\r\n name: \"email\",\r\n id: \"email\",\r\n validate: function (value) {\r\n if (value) {\r\n var re = /\\S+@\\S+\\.\\S+/;\r\n return re.test(value);\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bạn nhập không đúng email\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Tên đơn vị\"),\r\n name: \"ten\",\r\n id: \"ten\",\r\n validate: function (value) {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item[\"mst\"] && item[\"mst\"] !== null && (!value || value === null)) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bắt buộc khi có mã số thuế\",\r\n },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhmua\", id: \"tnhmua\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số điện thoại\"),\r\n name: \"sdtnmua\",\r\n id: \"sdtnmua\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 300,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n selectedItem[\"tsuatstr\"] = obj[\"vat_name\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"combo\",\r\n //editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n if (newv == -1) selectedItem[\"tsuatstr\"] = \"KCT\";\r\n if (newv == -2) selectedItem[\"tsuatstr\"] = \"KKKNT\";\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00019\",\r\n optionslist: true,\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n name: \"kmai\",\r\n header: _(\"Tính chất\"),\r\n width: 200,\r\n editor: \"combo\",\r\n editable: true,\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hàng hóa dịch vụ\" },\r\n { id: \"2\", value: \"Khuyến mại\" },\r\n { id: \"3\", value: \"Chiếu khấu thương mại\" },\r\n { id: \"4\", value: \"Ghi chú\" },\r\n ],\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n });\r\n },\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n var table = $$(this.config.id);\r\n 1;\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"tsuatstr\" ||\r\n columnId == \"kmai\" ||\r\n columnId == \"ma\"\r\n ) {\r\n tien_tt += tien_ck;\r\n if (item_note != \"reduce_change_invoice\") {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n }\r\n\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (!(item_note == \"reduce_change_invoice\") && don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n } else tien_tt = so_luong * don_gia;\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (!(item_note == \"reduce_change_invoice\") && tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n if (selectedItem.kmai != 1) tien_ck = 0;\r\n tien_thue = ((tien_tt - tien_ck) * (pt_thue < 0 ? 0 : pt_thue)) / 100;\r\n tong_tien = tien_tt - tien_ck + parseFloat(tien_thue);\r\n\r\n if (item_note == \"reduce_change_invoice\") {\r\n if (don_gia > 0) {\r\n don_gia = don_gia * -1;\r\n tien_tt = so_luong * don_gia;\r\n tien_ck = tien_ck * -1;\r\n tien_thue = tien_thue * -1;\r\n tong_tien = tong_tien * -1;\r\n }\r\n }\r\n tien_tt -= tien_ck;\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n //selectedItem.tsuat = pt_thue;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n /*if(selectedItem.kmai.toString() !== \"3\"){\r\n }*/\r\n selectedItem.tgtien = tong_tien;\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n if (selectedItem.kmai.toString() === \"2\") {\r\n //selectedItem.sluong = null;\r\n //selectedItem.dgia = null;\r\n //selectedItem.tsuat = null;\r\n //selectedItem.tsuatstr = null;\r\n selectedItem.thtien = 0;\r\n //selectedItem.tlckhau = null;\r\n //selectedItem.stckhau = null;\r\n selectedItem.tthue = 0;\r\n selectedItem.tgtien = 0;\r\n if (columnId == \"kmai\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n }\r\n table.updateItem(selectedItem.id, selectedItem);\r\n } else if (selectedItem.kmai.toString() === \"3\") {\r\n //selectedItem.tsuat = \"0\";\r\n //selectedItem.tsuatstr = \"0%\";\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n //selectedItem.tthue = 0;\r\n /*if(columnId !== \"tgtien\"){\r\n selectedItem.tgtien = selectedItem.thtien\r\n }*/\r\n } else if (selectedItem.kmai.toString() === \"4\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.thtien = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n selectedItem.tthue = null;\r\n selectedItem.tgtien = null;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n var data = table.serialize();\r\n\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n columns: [\r\n {\r\n id: \"tnphi\",\r\n name: \"tnphi\",\r\n header: _(\"Tên phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n\r\n editable: true,\r\n },\r\n {\r\n id: \"tienphi\",\r\n name: \"tienphi\",\r\n header: _(\"Tiền phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n on: {\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất khác\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Thành tiền trước thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22, format: fmNumber },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuek\", name: \"tgtcthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaik\", name: \"ttcktmaik\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Tiền thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuek\", name: \"tgtthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"label\", label: \"Chiết khấu thương mại\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Tổng tiền phí/lệ phí\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Thành tiền\", labelAlign: \"right\", labelPosition: \"top\" },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsok\", name: \"tgtttbsok\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {\r\n id: \"tkcktmn\",\r\n view: \"text\",\r\n editor: \"numeric\",\r\n labelWidth: 200,\r\n width: 600,\r\n format: fmNumber,\r\n name: \"tkcktmn\",\r\n /*on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu += Number(oldValue);\r\n if (tong_tien_cu > $$(\"tkcktmn\").getValue()) {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu - newValue);\r\n $$(\"tkcktmn\").setValue(newValue);\r\n } else {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n }\r\n },\r\n },*/\r\n },\r\n {\r\n view: \"text\",\r\n format: fmNumber,\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n readonly: true,\r\n value: 0,\r\n on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu -= Number(oldValue);\r\n tong_tien_cu += Number(newValue);\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso_last\",\r\n name: \"tgtttbso_last\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n validate: function (value) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n if (item_note == \"reduce_change_invoice\") return true;\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n width: 140,\r\n label: \"Đọc tiền bằng chữ:\",\r\n css: { \"font-weight\": \"bold\", \"padding-left\": \"5px\" },\r\n height: 22,\r\n },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnHoadonSaveMau04\",\r\n hidden: true,\r\n label: \"Ký và gửi CQT\",\r\n align: \"center\",\r\n type: \"form\",\r\n width: 120,\r\n click: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var tableHoadon = $$(\"invoiceForms\");\r\n\r\n if (tableHoadon.validate()) {\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n var t = webix.$$(\"invoiceViews\");\r\n var k = t.getSelectedItem();\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n item[\"tthdon\"] = 2;\r\n item[\"hdon68_id_lk\"] = k.id;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n data_post.mau04 = mau04;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n // console.log(data_post);\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoi\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //gửi mail tới khách hàng sau khi Ký\r\n if (json.tthai == \"Đã ký\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n if (json[0].value == \"C\") {\r\n var data = {\r\n id: result.hdon_id,\r\n nguoinhan: result.email,\r\n tieude: \"Thông báo xuất hóa đơn điện tử\",\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/AutoSendInvoiceByEmail\",\r\n data,\r\n function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n\r\n webix.modalbox.hide();\r\n //webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoiUSB\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.idMau04);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n // tblInvoice.enable();\r\n // tblInvoice.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.idMau04,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n }\r\n });\r\n }\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"invoice68\").close();\r\n // $$(\"huyhoadonForms\").close();\r\n\r\n // app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var _res = JSON.parse(text);\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!_res.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, _res.data]);\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(_res.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n form.setValues(item);\r\n this.getFormat();\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n commonHD.renderFormat(val);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangmotaloiCQT',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Danh sách lỗi phản hồi từ CQT
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms1\",\r\n resize: true,\r\n width: 800,\r\n height: 400,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
DANH SÁCH LỖI PHẢN HỒI TỪ CQT
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n // {\r\n // paddingX: 30,\r\n // rows: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Ký hiệu\",\r\n // id: \"khieu\",\r\n // name: \"khieu\",\r\n // },\r\n // {\r\n // view: \"text\",\r\n // label: \"Số hóa đơn\",\r\n // labelWidth: 150,\r\n // id: \"shdon\",\r\n // name: \"shdon\",\r\n // },\r\n // ],\r\n // },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_message\",\r\n // height: 250,\r\n //name: \"danhsach_message\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if (hdon_id != \"\") {\r\n var url = app.config.host + \"/Invoice68/GetResponseMessage?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"maloi\",\r\n name: \"maloi\",\r\n header: \"Mã lỗi\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"motaloi\",\r\n name: \"motaloi\",\r\n header: \"Mô tả lỗi\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"huongdanxuly\",\r\n name: \"huongdanxuly\",\r\n header: \"Hướng dẫn xử lý\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms1\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_message\");\r\n table.load(table.config.url);\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var table = $$(\"danhsach_message\");\r\n table.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_hoadon_history',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_bangmotaloiCQT\"], function (app, _, user, invoiceForms, bangmotaloiCQT) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Lịch sử xử lý
\";\r\n },\r\n },\r\n ],\r\n },\r\n\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
LỊCH SỬ XỬ LÝ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n // height: 250,\r\n //name: \"danhsach_history\",\r\n // select: true,\r\n editable: true,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n select: \"row\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if (hdon_id != \"\") {\r\n var url = app.config.host + \"/Invoice68/GetHistoryInvoice?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowResponseMessage: function (event, cell, target) {\r\n //var win = table.$scope.ui(bangmotaloiCQT.$ui);\r\n webix.ui(bangmotaloiCQT.$ui);\r\n var ref_id = cell.row;\r\n\r\n bangmotaloiCQT.setEditMode(ref_id);\r\n // // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // // hoadonHistory.setEditMode(hdon_id);\r\n // $$(\"danhsach_history\").show();\r\n webix.ui(bangmotaloiCQT.$ui).show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n editor: \"text\",\r\n id: \"ref_id\",\r\n name: \"ref_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n css: \"rank\",\r\n },\r\n {\r\n id: \"tgian_gui\",\r\n name: \"tgian_gui\",\r\n header: \"Thời gian\",\r\n width: 200,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s.%S\");\r\n var time = new Date(text);\r\n text = removeTimeZoneT(time);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n name: \"nguoi_gui\",\r\n header: \"Nơi gửi\",\r\n width: 150,\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n name: \"mltdiep_gui\",\r\n header: \"Loại Thông điệp\",\r\n width: 150,\r\n template: function (obj) {\r\n if ((obj.mltdiep_gui == \"203\" || obj.mltdiep_gui == \"200\") && obj.note == \"app\") {\r\n return \"Gửi HDDT lên CQT\";\r\n } else if (obj.mltdiep_gui == \"400\" && obj.note == \"app\") {\r\n return \"Gửi BTHDL lên CQT\";\r\n } else if ((obj.mltdiep_gui == \"100\" || obj.mltdiep_gui == \"101\") && obj.note == \"app\") {\r\n return \"Gửi Tờ khai lên CQT\";\r\n }\r\n // else if(obj.mltdiep_gui == \"200\" && obj.note == \"app\"){\r\n // return \"Gửi HDDT có mã lên CQT\";\r\n // }\r\n else if ((obj.mltdiep_gui == \"300\" || obj.mltdiep_gui == \"301\") && obj.note == \"app\") {\r\n return \"Thông báo hóa đơn sai sót\";\r\n } else if (obj.mltdiep_gui == \"301\" && obj.note == \"saisot\") {\r\n return \"Kết quả tiếp nhận và xử lý hóa đơn sai sót\";\r\n } else if (obj.mltdiep_gui == \"202\" && obj.note == \"capma\") {\r\n return \"Cơ quan thuế cấp mã hóa đơn\";\r\n } else if (obj.note == \"phkt\") {\r\n return \"Phản hồi kĩ thuật\";\r\n } else if (obj.note == \"ktdl\") {\r\n return \"Kiểm tra dữ liệu\";\r\n } else if (obj.note == \"rasoat\") {\r\n return \"Thông báo HDDT cần rà soát\";\r\n } else {\r\n return \"Gửi HDDT lên CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"history\",\r\n name: \"history\",\r\n header: \"Nội dung\",\r\n width: 430,\r\n },\r\n // {\r\n // id: \"btnResponseMessage\",\r\n // name: \"View\",\r\n // header: \"Xem chi tiết\",\r\n // width: 100,\r\n // //editor: \"text\",\r\n // template: function (obj) {\r\n // if (obj.note == \"phkt\" || obj.note == \"ktdl\" || obj.note == \"rasoat\") {\r\n // return \" \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // },\r\n // },\r\n ],\r\n\r\n ready: function () {\r\n this.adjustRowHeight(\"history\", true);\r\n\r\n var row_id = this.getFirstId();\r\n this.select(row_id, false);\r\n this.unselect(row_id, false);\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkebanra',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangkebanraForm\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n hide: true,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFBangKeBanRa\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcelF\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintExcelBangKeBanRa_New\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"
Ký hiệu
\",\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.ky_hieu;\r\n },\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"ten_kh_hd\", header: \"
Tên người mua
\", width: 300 },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeBanRa\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/download_file_handle',[\"app\", \"locale\"], function (app, _) {\r\n // config thông tin window ui\r\n var statusProcess = {\r\n loading: 'fas fa-spinner fa-spin icon-loading',\r\n error: 'fas fa-exclamation-circle custom-color-red',\r\n success: 'fas fa-check-circle custom-color-green'\r\n }\r\n\r\n var actionProcess = {\r\n sync: \"fas fa-sync\",\r\n cancel: \"fas fa-times-circle\",\r\n download: \"fas fa-download\"\r\n }\r\n\r\n // Danh sách các file đnag trong quá trình xử lý\r\n var listFileProcess = new webix.DataCollection({\r\n data: [],\r\n });\r\n\r\n //Hàm support xử lý\r\n function convertTypeToFileFormat(type) {\r\n var fileFormat = \"application/pdf\";\r\n switch (type) {\r\n case \"PDF\":\r\n case \"pdf\":\r\n fileFormat = \"application/pdf\";\r\n break;\r\n case \"xlsx\":\r\n case \"XLSX\":\r\n fileFormat = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n break;\r\n }\r\n return fileFormat;\r\n }\r\n\r\n function handleProcessFileInfo(processFileInfo) {\r\n var request = null;\r\n // Add item\r\n var id = Math.floor(Math.random() * 1000000);\r\n var fileInfo = {\r\n id: id,\r\n name: processFileInfo.fileName,\r\n loadingIcon: statusProcess.loading,\r\n actionIcon: actionProcess.cancel,\r\n process: null,\r\n type: processFileInfo.fileType,\r\n data: null,\r\n clickAction: null,\r\n xhr: null\r\n }\r\n\r\n // gán event\r\n var sucessEvent = function (text, data, XmlHttpRequest) {\r\n fileInfo.loadingIcon = statusProcess.success;\r\n fileInfo.actionIcon = actionProcess.download;\r\n if(data != null) {\r\n fileInfo.data = new Blob([data], { type: convertTypeToFileFormat(fileInfo.fileType) });\r\n }\r\n\r\n listFileProcess.updateItem(fileInfo.id, fileInfo);\r\n if(processFileInfo.onSuccess != null) {\r\n processFileInfo.onSuccess(text, data, XmlHttpRequest);\r\n }\r\n }\r\n\r\n var errorEvent = function (text, data, XmlHttpRequest) {\r\n fileInfo.loadingIcon = statusProcess.error;\r\n fileInfo.actionIcon = actionProcess.sync;\r\n listFileProcess.updateItem(fileInfo.id, fileInfo);\r\n if(processFileInfo.onError != null) {\r\n processFileInfo.onError(text, data, XmlHttpRequest);\r\n }\r\n }\r\n\r\n // gán request ajax\r\n var paramRequest = JSON.parse(JSON.stringify(processFileInfo.param ? processFileInfo.param : {}));\r\n request = webix.ajax()\r\n .response(processFileInfo.response)\r\n .headers(processFileInfo.header); \r\n\r\n switch(processFileInfo.method) {\r\n case \"post\":\r\n case \"POST\":\r\n fileInfo.process = request.post.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n paramRequest,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n case \"get\":\r\n case \"GET\":\r\n fileInfo.process = request.get.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n }\r\n \r\n // Xử lý action\r\n fileInfo.clickAction = function () {\r\n var me = this;\r\n switch(this.actionIcon) {\r\n case actionProcess.sync:\r\n if(me.process) {\r\n me.actionIcon = actionProcess.cancel;\r\n me.loadingIcon = statusProcess.loading;\r\n switch(processFileInfo.method) {\r\n case \"post\":\r\n case \"POST\":\r\n fileInfo.process = request.post.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n paramRequest,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n case \"get\":\r\n case \"GET\":\r\n fileInfo.process = request.get.bind(request);\r\n fileInfo.process(\r\n processFileInfo.url,\r\n {\r\n error: errorEvent,\r\n success: sucessEvent,\r\n }\r\n );\r\n break;\r\n };\r\n listFileProcess.updateItem(me.id, me);\r\n }\r\n break;\r\n case actionProcess.cancel:\r\n if(me.process) {\r\n \r\n }\r\n webix.confirm({\r\n text: \"Bảng kê đang được kết xuất, bạn có muốn huỷ bỏ tiến trình?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n removeItem(me.id);\r\n }\r\n }\r\n })\r\n break;\r\n case actionProcess.download:\r\n if(processFileInfo.onDownLoad) {\r\n processFileInfo.onDownLoad(me.data);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Gán vào list process\r\n listFileProcess.add(fileInfo, 0);\r\n }\r\n\r\n function checkFileProcess() {\r\n var rs = false;\r\n var count = 0;\r\n for(var i = 0; i < listFileProcess.count(); i++) {\r\n var itemId = listFileProcess.getIdByIndex(i);\r\n var item = listFileProcess.getItem(itemId);\r\n if(item.loadingIcon == statusProcess.loading) {\r\n count++;\r\n }\r\n }\r\n rs = count < 3;\r\n return rs;\r\n }\r\n\r\n function checkItemLoading() {\r\n var isLoading = false;\r\n for(var i = 0; i < listFileProcess.count(); i++) {\r\n var itemId = listFileProcess.getIdByIndex(i);\r\n var item = listFileProcess.getItem(itemId);\r\n if(item.loadingIcon == statusProcess.loading) {\r\n isLoading = true;\r\n break;\r\n }\r\n }\r\n return isLoading;\r\n }\r\n\r\n function removeItem(id) {\r\n if(id) {\r\n listFileProcess.remove(id);\r\n if(listFileProcess.count() == 0) {\r\n closeWindow();\r\n }\r\n }\r\n }\r\n\r\n function closeWindow() {\r\n listFileProcess.clearAll();\r\n $$(\"download_window\").close();\r\n }\r\n\r\n // Vẽ header\r\n function genHeader(title) {\r\n title = title ? title : \"Kết xuất bảng kê\"; \r\n var headerComp = {\r\n view: \"toolbar\",\r\n css: \"manager-file-header\",\r\n elements: [\r\n {\r\n template:\r\n \"
\" + title + \"
\",\r\n borderless: true,\r\n },\r\n {\r\n view: \"template\",\r\n template:\r\n \"
\",\r\n borderless: true,\r\n css: \"manager-file-header-button\",\r\n onClick: {\r\n \"manager-file-down\": function () {\r\n var window = $$(\"download_window\"); \r\n var className = \"hide-custom-class\";\r\n \r\n var htmlElement = window.$view; \r\n if (htmlElement.classList.contains(className)) {\r\n htmlElement.classList.remove(className); \r\n } else {\r\n htmlElement.classList.add(className); \r\n }\r\n },\r\n \"manager-file-close-button\": function () {\r\n if(checkItemLoading()) {\r\n webix.confirm({\r\n text: \"Bảng kê đang được kết xuất, bạn có muốn huỷ bỏ tiến trình?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n closeWindow();\r\n }\r\n }\r\n })\r\n } else {\r\n closeWindow();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return headerComp;\r\n }\r\n\r\n // Vẽ body\r\n var getIconFile = function (type) {\r\n var icon = \"far fa-file\";\r\n switch (type) {\r\n case \"PDF\":\r\n case \"pdf\":\r\n icon = \"far fa-file-pdf custom-color-red\";\r\n break;\r\n case \"xlsx\":\r\n case \"XLSX\":\r\n icon = \"far fa-file-excel custom-color-green\";\r\n break;\r\n }\r\n return icon;\r\n };\r\n\r\n var bodyComp = {\r\n view: \"list\",\r\n css: \"manager-file-custom_list\",\r\n id: \"manager-file-custom_list\",\r\n template: function (obj) {\r\n var type = getIconFile(obj.type);\r\n var temp =\r\n '
' +\r\n '
' +\r\n '
' +\r\n obj.name +\r\n \"
\" +\r\n '
' +\r\n '
';\r\n return temp;\r\n },\r\n ready: function () {\r\n $$(\"manager-file-custom_list\").attachEvent(\"onItemClick\", function (id, e, node) {\r\n var item = this.getItem(id);\r\n var elementId = \"download-action-\" + item.id;\r\n \r\n // Kiểm tra xem có phải là phần tử action_icon được click hay không\r\n if (e.target && e.target.closest(\"#\" + elementId) && item) {\r\n item.clickAction();\r\n }\r\n });\r\n },\r\n data: listFileProcess,\r\n };\r\n\r\n return {\r\n handleFileDownLoad: function (fileProcessInfor) {\r\n\r\n var isCheckAdd = checkFileProcess();\r\n if(!isCheckAdd) {\r\n webix.message(\"Số file đang kết xuất đã đạt tối đa (3 file)\", \"error\");\r\n return;\r\n }\r\n\r\n var window = webix.$$(\"download_window\");\r\n if(fileProcessInfor == null) {\r\n return;\r\n } \r\n\r\n // Xử lý fileProcessInfor\r\n handleProcessFileInfo(fileProcessInfor);\r\n \r\n // Show window\r\n var headerTitle = fileProcessInfor[\"headerTitle\"];\r\n if(window == null || window == undefined) {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"download_window\",\r\n css: \"manager-file\",\r\n head: genHeader(headerTitle),\r\n body: bodyComp,\r\n autohide: false,\r\n hidden: true,\r\n })\r\n .show();\r\n }\r\n \r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangkebanraFormChiTiet',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n id: \"multicombo_kyhieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanrachitiet\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkebanrachitiet',[\"app\", \"locale\", \"models/user\", \"views/modules/download_file_handle\", \"views/forms/68_bangkebanraFormChiTiet\", \"views/forms/68_hoadon_history\" ], function (app, _, user, handleFile, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n\r\n function formatDate() {\r\n var date = new Date();\r\n \r\n var dd = String(date.getDate()).padStart(2, '0');\r\n var MM = String(date.getMonth() + 1).padStart(2, '0'); // Tháng bắt đầu từ 0\r\n var YYYY = date.getFullYear();\r\n var hh = String(date.getHours()).padStart(2, '0');\r\n var mm = String(date.getMinutes()).padStart(2, '0');\r\n var ss = String(date.getSeconds()).padStart(2, '0');\r\n \r\n var formattedDate = dd + \"_\" + MM + \"_\" + YYYY + \"_\" + hh + \"_\" + mm + \"_\" + ss;\r\n return formattedDate;\r\n }\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n \r\n var fileName = 'BangKeBanRa_' + formatDate();\r\n if (rpParameter != null) {\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/PrintPDFBangKeBanRaChiTiet\",\r\n param: rpParameter,\r\n onError: function (data, XmlHttpRequest) {\r\n var textErr = \"Đã có lỗi xảy ra\";\r\n if(XmlHttpRequest && XmlHttpRequest.statusText) {\r\n textErr = XmlHttpRequest.statusText;\r\n }\r\n webix.message(textErr, \"error\");\r\n },\r\n onDownLoad: function(data) {\r\n var fileURL = URL.createObjectURL(data);\r\n window.open(fileURL, \"_blank\");\r\n\r\n if (newWindow) {\r\n setTimeout(function() {\r\n URL.revokeObjectURL(fileURL);\r\n }, 100);\r\n }\r\n },\r\n fileName: fileName,\r\n fileType: rpParameter.type\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n return;\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var fileName = 'BangKeBanRa_' + formatDate();\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/PrintPDFBangKeBanRaChiTiet\",\r\n param: rpParameter,\r\n onError: function (text, data, XmlHttpRequest) {\r\n var textErr = \"Đã có lỗi xảy ra\";\r\n if(XmlHttpRequest && XmlHttpRequest.statusText) {\r\n textErr = XmlHttpRequest.statusText;\r\n }\r\n webix.message(textErr, \"error\");\r\n },\r\n onDownLoad: function (data) {\r\n webix.html.download(data, fileName + \".xlsx\");\r\n },\r\n fileName: fileName,\r\n fileType: rpParameter.type\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n return;\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"
Ký hiệu
\",\r\n width: 150\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"makh\", header: \"
Mã khách hàng
\", width: 150 },\r\n { id: \"ten_kh_hd\", header: \"
Tên người mua
\", width: 300 },\r\n { id: \"dia_chi\", header: \"
Địa chỉ
\", width: 300 },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"mat_hang\", header: \"
Mặt hàng
\", width: 150 },\r\n { id: \"mdvtinh\", header: \"
Mã đơn vị tính
\", width: 150 },\r\n { id: \"sluong\", header: \"
Số lượng
\", width: 150 },\r\n {\r\n id: \"dgia\",\r\n header: \"
Đơn giá
\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"don_vi_lap\", header: \"
Đơn vị lập hóa đơn
\", width: 200 },\r\n { id: \"ma_tra_cuu\", header: \"
Mã tra cứu hóa đơn
\", width: 200 },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanrachitiet\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeBanRaChiTiet\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_danhsachgiamtru',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n var startYear = 2010;\r\n var endYear = date.getFullYear();\r\n var years = [];\r\n for (var year = startYear; year <= endYear; year++) {\r\n years.push(year.toString());\r\n }\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n name: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n firstDay = new Date(nam, thang, 1);\r\n lastDay = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n firstDay = new Date($$(\"cbNam\").getValue(), date.getMonth(), 1);\r\n\r\n lastDay = new Date($$(\"cbNam\").getValue(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbNam\",\r\n name: \"nam\",\r\n view: \"combo\",\r\n label: \"Năm\",\r\n value: new Date().getFullYear(),\r\n options: years,\r\n on: {\r\n onChange: function (newYear) {\r\n // Get the current date from the datetext controls\r\n var currentFromDate = $$(\"tu_ngay\").getValue();\r\n var currentToDate = $$(\"den_ngay\").getValue();\r\n\r\n firstDay = new Date(currentFromDate);\r\n firstDay.setFullYear(newYear);\r\n // Set the updated Date object back to tu_ngay\r\n $$(\"tu_ngay\").setValue(firstDay);\r\n\r\n lastDay = new Date(currentToDate);\r\n lastDay.setFullYear(newYear);\r\n // Set the updated Date object back to tu_ngay\r\n $$(\"den_ngay\").setValue(lastDay);\r\n }\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n var item = form.getValues();\r\n if(firstDay != $$(\"tu_ngay\").getValue() || lastDay != $$(\"den_ngay\").getValue() ){\r\n item.isquy = 0;\r\n }else {\r\n item.isquy = 1;\r\n }\r\n var load_event = \"dataChangebangkehanghoagiamtruthue\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangkehanghoagiamtruthue',[\"app\", \"locale\", \"models/user\", \"views/forms/68_danhsachgiamtru\", \"views/forms/68_hoadon_history\"], function (app, _, user, danhsachgiamtru, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ hàng hóa giảm trừ thuế\",\r\n details: \"Tờ khai chứng từ hàng hóa giảm trừ thuế\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(danhsachgiamtru.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFBangKeHangHoaGiamTruThue\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFbangkehanghoagiamtruthue\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"bangkehanghoagiamtruthue.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkehanghoagiamtruthue\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n { id: \"ten\", header: \"
Tên hàng hóa
\", width: 300 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { id: \"tsuat\", header: \"
Tỷ lệ thuế
\", width: 300 },\r\n { id: \"giam\", header: \"
Tỷ lệ thuế sau giảm
\", width: 300 },\r\n {\r\n id: \"thuegiam\",\r\n header: \"
Tiền thuế được giảm
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n }\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n //$group: {\r\n //by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n //},\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkehanghoagiamtruthue\", function (item) {\r\n var table = $$(\"bangkehanghoagiamtruthue\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDSHoaDonBangKeHangHoaGiamTruThue\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkehanghoagiamtruthue\").clearAll();\r\n $$(\"bangkehanghoagiamtruthue\").parse(json);\r\n $$(\"bangkehanghoagiamtruthue\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachhoadon',[\"app\", \"models/user\", \"views/forms/68_bangtonghopform\"], function (app, user, bangtonghopform) {\r\n var editmode = 0;\r\n var loaihanghoa = \"2\";\r\n var params;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n\r\n var ui = webix.$$(\"danhsachhoadon-win\");\r\n ui.disable();\r\n table.showProgress();\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n var putData = \"\";\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == \"C\") {\r\n //item.mstnmua = item[\"mst\"];\r\n lstTemp.push(item);\r\n putData += \"'\" + item.hdon_id + \"',\";\r\n }\r\n }\r\n }\r\n\r\n putData = putData.substring(0, putData.length - 1);\r\n\r\n if (lstTemp.length == 0) {\r\n ui.enable();\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hóa đơn\" });\r\n \r\n return;\r\n }\r\n\r\n var params = {};\r\n params[\"data\"] = putData;\r\n var lhhoa = $$(\"bangtonghop-form\").getValues().lhhoa;\r\n\r\n if (lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoaDonXangDauChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n if (json[0].shdon != null) {\r\n var errorMessenger = \"\";\r\n for (var index = 0; index < json.length; index++) {\r\n if (index == json.length - 1) {\r\n errorMessenger += json[index].shdon;\r\n } else {\r\n errorMessenger += json[index].shdon + \", \";\r\n }\r\n }\r\n webix.message(\"Các số hoá đơn sau chưa nhập đơn vị tính của hàng hoá: \" + errorMessenger, \"error\");\r\n return;\r\n }\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi));\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n // var frm = webix.$$(\"danhsach_hoadon\");\r\n // frm.clearAll();\r\n // frm.parse(lstTemp);\r\n // $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n // $$(\"tgtthue\").setValue(fm(tien_thue));\r\n // $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n // $$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"danhsachhoadon-win\",\r\n position: \"center\",\r\n head: \"Chọn hóa đơn vào bảng tổng hợp dữ liệu điện tử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n minWidth: 900,\r\n id: \"danhsachhoadon-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n minHeight: 400,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"nky\",\r\n name: \"nky\",\r\n header: [\"Ngày giờ ký\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: [\"Số hóa đơn\", { content: \"textFilter\" }],\r\n width: 120,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n header: [\"Mã số thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"ten\",\r\n name: \"ten\",\r\n header: [\r\n \"Tên đơn vị/Tên người mua\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 350,\r\n },\r\n\r\n {\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: [\"Thời điểm lập\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n name: \"nglap\",\r\n header: \"Người lập\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setParams: function (value) {\r\n params = value;\r\n var table = $$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"danhsach_hoadonFrm\").clearAll();\r\n $$(\"danhsach_hoadonFrm\").parse(json);\r\n\r\n if (json[\"data\"].length > 0) {\r\n $$(\"tgtcthue\").setValue(fm(json[\"data\"][0][\"tong_dt\"]));\r\n $$(\"tgtthue\").setValue(fm(json[\"data\"][0][\"tong_tienthue\"]));\r\n }\r\n\r\n $$(\"danhsach_hoadonFrm\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n },\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopform',[\"app\", \"models/user\", \"views/forms/68_bangdanhsachhoadon\"], function (app, user, bangdanhsachhoadon) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n var tgtkhac = 0;\r\n var tgtphi = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n tgtkhac += it[\"tgtkhac\"];\r\n tgtphi += it[\"tgtphi\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n item[\"tgtkhac\"] = tgtkhac;\r\n item[\"tgtphi\"] = tgtphi;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n if (item.lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDLXangDau\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n }\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n }\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n apiIndex++;\r\n if (apiIndex == m) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BẢNG TỔNG HỢP DỮ LIỆU HÓA ĐƠN ĐIỆN TỬ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n { id: \"N\", value: \"Ngày\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").setValue(\"1\");\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 120,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {\r\n id: \"ldau\",\r\n name: \"ldau\",\r\n view: \"checkbox\",\r\n label: \"[02] Lần đầu\",\r\n value: 1,\r\n width: 150,\r\n on: {\r\n onChange: function () {\r\n var lanDau = $$(\"ldau\").getValue();\r\n if (lanDau == 0) {\r\n $$(\"bslthu\").define(\"required\", true);\r\n $$(\"bslthu\").define(\"invalidMessage\", \"Không được để trống trường này!\");\r\n $$(\"bslthu\").enable();\r\n $$(\"bslthu\").refresh();\r\n } else {\r\n $$(\"bslthu\").define(\"required\", false);\r\n $$(\"bslthu\").define(\"invalidMessage\", \"\");\r\n $$(\"bslthu\").setValue(\"\");\r\n $$(\"bslthu\").disable();\r\n $$(\"bslthu\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n { id: \"bslthu\", name: \"bslthu\", view: \"text\", label: \"[03] Bổ sung lần thứ: \", labelWidth: 140, width: 250, disabled: true },\r\n { id: \"sdlthu\", name: \"sdlthu\", view: \"text\", label: \"[04] Sửa đổi lần thứ: \", labelWidth: 130, width: 250 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[05] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 410,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[06] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 380,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 190, labelWidth: 70, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 50, width: 200, readonly: true },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"hddin\",\r\n name: \"hddin\",\r\n label: \"Hóa đơn đặt in:\",\r\n labelWidth: 170,\r\n width: 410,\r\n view: \"combo\",\r\n value: \"0\",\r\n options: [\r\n { id: \"0\", value: \"Hóa đơn điện tử\" },\r\n { id: \"1\", value: \"Hóa đơn đặt in\" },\r\n ],\r\n },\r\n {\r\n id: \"lhhoa\",\r\n name: \"lhhoa\",\r\n view: \"text\",\r\n label: \"Loại hàng hóa:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n value: \"9\",\r\n options: [\r\n { id: \"1\", value: \"Xăng dầu\" },\r\n { id: \"2\", value: \"Vận tải hàng không\" },\r\n { id: \"9\", value: \"Khác\" },\r\n ],\r\n on: {\r\n onChange: function () {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa === \"1\") {\r\n $$(\"lkdlieu\").setValue(\"N\");\r\n $$(\"lkdlieu\").disable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n } else {\r\n $$(\"lkdlieu\").setValue(\"T\");\r\n $$(\"lkdlieu\").enable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"dvtt\",\r\n name: \"dvtt\",\r\n view: \"text\",\r\n label: \"Đơn vị tiền tệ:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n required: true,\r\n invalidMessage: \"Đơn vị tiền tệ không được để trống !\",\r\n options: app.config.host + \"/Invoice68/GetListDVTT\",\r\n \r\n // attributes: {\r\n // readonly: editmode == 1 ? false : true\r\n // }\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chọn hóa đơn\",\r\n id: \"btnTaiHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa !== \"1\") {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n } else {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Chọn toàn bộ\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n webix.confirm({\r\n text: \"Tự động chọn tất cả hóa đơn trong kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < json.data.length; i++) {\r\n var item = json.data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi));\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi)); \r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n var tong_gt = 0;\r\n var tong_phi = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n tong_gt += item[\"tgtkhac\"] == null ? 0 : item[\"tgtkhac\"];\r\n tong_phi += item[\"tgtphi\"] == null ? 0 : item[\"tgtphi\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n $$(\"tgtkhac\").setValue(fm(tong_gt));\r\n $$(\"tgtphi\").setValue(fm(tong_phi)); \r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số hóa đơn\", width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: \"Ngày hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: \"Tên người mua\", width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế người mua/mã khách hàng\", width: 150 },\r\n { id: \"thhdvu\", name: \"thhdvu\", header: \"Mặt hàng\", width: 150 },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng hàng hóa\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tsuat\",\r\n name: \"tsuat\",\r\n header: \"Thuế suất\",\r\n width: 150,\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n { id: \"tgtkhac\", name: \"tgtkhac\", header: \"Giảm trừ khác\", width: 150},\r\n { id: \"tgia\", name: \"tgia\", header: \"Tỷ giá\", width: 100},\r\n { id: \"tgtphi\", name: \"tgtphi\", header: \"Tổng tiền phí\", width: 150},\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Tiền thanh toán\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Trạng thái\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Mới\";\r\n } else if (text == 1) {\r\n result = \"Hủy\";\r\n } else if (text == 2) {\r\n result = \"Điều chỉnh\";\r\n } else if (text == 3) {\r\n result = \"Thay thế\";\r\n } else if (text == 4) {\r\n result = \"Giải trình\";\r\n } else if (text == 5) {\r\n result = \"Sai sót do tổng hợp\";\r\n }\r\n return result;\r\n },\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin hóa đơn liên quan\", width: 250 },\r\n { id: \"gchu\", name: \"gchu\", header: \"Ghi chú\", width: 150 }\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tgtcthue\",\r\n name: \"tgtcthue\",\r\n view: \"text\",\r\n label: \"Tiền trước thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtkhac\",\r\n name: \"tgtkhac\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tổng giảm trừ\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tổng tiền phí\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tiền thanh toán\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n if (editmode == 2)\r\n $$(\"dvtt\").define(\"readonly\",true);\r\n form.setValues(item);\r\n\r\n $$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n $$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n $$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n $$(\"tgtkhac\").setValue(fm(item.tgtkhac));\r\n $$(\"tgtphi\").setValue(fm(item.tgtphi));\r\n console.log(editmode);\r\n getNgay();\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n if (item.lhhoa === 1) {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLXangDauDetail?id=\" + item.id;\r\n } else {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghop',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"views/forms/68_bangtonghopform\", \r\n \"views/forms/68_bangdanhsachhoadon\", \r\n \"views/forms/68_hoadon_history\",\r\n \"views/modules/download_file_handle\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n bangdanhsachhoadon,\r\n hoadonHistory,\r\n handleFile\r\n) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng tổng hợp hóa đơn\",\r\n details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n var par = \"\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n par = \"start=\" + params.start;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var urlTemp = url;\r\n if(par) {\r\n urlTemp = url.replace(\"&count=\" + view.config.datafetch, \"\").replace(par, \"start=0\");\r\n } else {\r\n urlTemp = url.replace(\"&count=\" + view.config.datafetch, \"\");\r\n }\r\n\r\n table.define('urlget',urlTemp);\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n function formatDate() {\r\n var date = new Date();\r\n \r\n var dd = String(date.getDate()).padStart(2, '0');\r\n var MM = String(date.getMonth() + 1).padStart(2, '0'); // Tháng bắt đầu từ 0\r\n var YYYY = date.getFullYear();\r\n var hh = String(date.getHours()).padStart(2, '0');\r\n var mm = String(date.getMinutes()).padStart(2, '0');\r\n var ss = String(date.getSeconds()).padStart(2, '0');\r\n \r\n var formattedDate = dd + \"_\" + MM + \"_\" + YYYY + \"_\" + hh + \"_\" + mm + \"_\" + ss;\r\n return formattedDate;\r\n }\r\n\r\n function exportExcelMulti(selectedItems) {\r\n\r\n // kiểm tra lại bảng tổng hợp\r\n var idItems = [];\r\n var loaiHd = selectedItems[0].lhhoa;\r\n for(var i = 0; i < selectedItems.length; i++) {\r\n idItems.push(selectedItems[i].id);\r\n }\r\n\r\n var fileName = \"bthdl_\" + formatDate();\r\n var fileProcessInfor = {\r\n method: \"POST\",\r\n response: \"arraybuffer\",\r\n header: { \"Content-type\": \"application/json\" },\r\n url: app.config.host + \"/Invoice68/excelBTHDLieuMulti\",\r\n param: JSON.stringify(idItems),\r\n onError: function (text, data, XmlHttpRequest) {\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n onSuccess: null,\r\n onDownLoad: function (data) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.html.download(file, fileName + \".xlsx\");\r\n },\r\n fileName: fileName,\r\n fileType: 'xlsx',\r\n headerTitle: \"Kết xuất BTHDL\"\r\n };\r\n\r\n handleFile.handleFileDownLoad(fileProcessInfor);\r\n }\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n $$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n\r\n\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Export Excel\" + \"\",\r\n //id: \"btnPreview\",\r\n //shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n\r\n var dataTable = table.serialize();\r\n var selectedRecords = [];\r\n for (var i = 0; i < dataTable.length; i++) {\r\n if (dataTable[i]!= undefined && dataTable[i].chon === true) {\r\n selectedRecords.push(dataTable[i]);\r\n }\r\n }\r\n\r\n if (selectedRecords == null || selectedRecords.length <= 0) {\r\n webix.message(\"Bạn chưa chọn dòng xuất dữ liệu! \", \"error\");\r\n return;\r\n }\r\n\r\n /*if (selectedRecords.length == 1) {\r\n var selectedItem = selectedRecords[0];\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n \r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/excelBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bthdl.xlsx\");\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/excelBTHDLieu?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bthdl.xlsx\");\r\n },\r\n });\r\n }\r\n } else {\r\n exportExcelMulti(selectedRecords);\r\n }*/\r\n exportExcelMulti(selectedRecords);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 180,\r\n label: ' ' + '' + \"Kết xuất toàn bộ BTHDL\" + \"\",\r\n //id: \"btnPreview\",\r\n //shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangtonghop\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix.ui({\r\n view:\"datatable\",\r\n id:\"excel\",\r\n columns: [\r\n {\r\n id: \"trang_thai\",\r\n header: \"Trạng thái\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.trang_thai == \"1\" ? \"Đã gửi CQT\" : \"Chưa gửi CQT\";\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: \"Trạng thái gửi\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.ldau == \"1\" ? \"Lần đầu\" : \"Bổ sung\";\r\n },\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: \"Kỳ dữ liệu\",\r\n exportType: \"string\",\r\n },\r\n\r\n {\r\n id: \"ngay_ky\",\r\n header: \"Ngày ký\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"sbthdlieu\",\r\n header: \"Số thứ tự bảng\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: \"Tổng tiền trước thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: \"Tổng tiền thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: \"Tổng tiền thanh toán\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nlap\",\r\n header: \"Ngày lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: \"Người lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ngky\",\r\n header: \"Người gửi\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: \"Kết quả\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ\";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ\";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n ]\r\n });\r\n\r\n\r\n var tableexcel = $$(\"excel\");\r\n var urlget = table.config.urlget;\r\n urlget = urlget+\"&count=\" + table.data.count();\r\n\r\n tableexcel.load(urlget,\r\n function() {\r\n webix.toExcel($$(\"excel\"), {\r\n rawValues: true,\r\n columns: [\r\n {\r\n id: \"trang_thai\",\r\n header: \"Trạng thái\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.trang_thai == \"1\" ? \"Đã gửi CQT\" : \"Chưa gửi CQT\";\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: \"Trạng thái gửi\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n return obj.ldau == \"1\" ? \"Lần đầu\" : \"Bổ sung\";\r\n },\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: \"Kỳ dữ liệu\",\r\n exportType: \"string\",\r\n },\r\n\r\n {\r\n id: \"ngay_ky\",\r\n header: \"Ngày ký\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"sbthdlieu\",\r\n header: \"Số thứ tự bảng\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: \"Tổng tiền trước thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: \"Tổng tiền thuế\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: \"Tổng tiền thanh toán\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nlap\",\r\n header: \"Ngày lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: \"Người lập\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ngky\",\r\n header: \"Người gửi\",\r\n exportType: \"string\",\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: \"Kết quả\",\r\n exportType: \"string\",\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ\";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ\";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n ],\r\n filename: \"DanhSachBTHDL\",\r\n });\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n var layoutDK = webix.$$(\"layout\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n table.enable();\r\n table.hideProgress();\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(layoutDK, webix.ProgressBar);\r\n layoutDK.disable();\r\n layoutDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n layoutDK.enable();\r\n layoutDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n table.enable();\r\n table.hideProgress(); \r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã gửi CQT!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n id: \"btnUp\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n webix.$$(\"ldau\").setValue(0);\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n urlget:\"\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == null || item.ket_qua == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa gửi CQT\" },\r\n { id: \"1\", value: \"Đã gửi CQT\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \"\";\r\n } else {\r\n return obj.trang_thai == 1\r\n ? \" Đã gửi CQT\"\r\n : \" Chưa gửi CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldau\",\r\n header: [\r\n \"Lần nộp\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"1\", value: \"Lần đầu\" },\r\n { id: \"0\", value: \"Bổ sung\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.ldau == \"1\"\r\n ? \" Lần đầu\"\r\n : \" Bổ sung\";\r\n },\r\n },\r\n\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\r\n \"Mã thông điệp gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 350,\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tgtcthue\",\r\n header: [\r\n \"Tổng tiền trước thuế\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tgtthue\",\r\n header: [\r\n \"Tổng tiền thuế\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n header: [\r\n \"Tổng tiền thanh toán\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n columnType: \"numeric\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\r\n // \"Mã thông điệp\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 150,\r\n // },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: [\r\n \"Kết quả\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chờ phản hổi\" },\r\n { id: \"1\", value: \"Dữ liệu hợp lệ\" },\r\n { id: \"2\", value: \"Dữ liệu không hợp lệ\" },\r\n ],\r\n },\r\n ],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInBTHDLRep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiepcqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 250,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"layout\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopbienlaiform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết biên lai\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n item[\"loaibth\"] = 2;\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BÁO CÁO TÌNH HÌNH SỬ DỤNG DỮ LIỆU BIÊN LAI ĐIỆN TỬ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"Q\",\r\n options: [ \r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n { id: \"N\", value: \"Ngày\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 120,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 120,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[02] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 410,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[03] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 380,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 190, labelWidth: 70, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 50, width: 200, readonly: true },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n { width: 200 },\r\n {\r\n id: \"dchi\",\r\n name: \"dchi\",\r\n view: \"text\",\r\n label: \"[04] Địa chỉ:\",\r\n labelWidth: 130,\r\n width: 900,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n {\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n view: \"text\",\r\n label: \"[05] Tỉnh/Thành phố:\",\r\n labelWidth: 130,\r\n width: 300,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n\r\n /*{\r\n id: \"lhhoa\",\r\n name: \"lhhoa\",\r\n view: \"text\",\r\n label: \"Loại mẫu:\",\r\n labelWidth: 130,\r\n width: 380,\r\n view: \"combo\",\r\n value: \"10\",\r\n options: [\r\n { id: \"10\", value: \"Mẫu BC26BLĐT\" },\r\n { id: \"11\", value: \"Mẫu BC26BLG\" },\r\n ],\r\n on: {\r\n onChange: function () {\r\n var loaiHangHoa = $$(\"lhhoa\").getValue();\r\n if (loaiHangHoa === \"1\") {\r\n $$(\"lkdlieu\").setValue(\"N\");\r\n $$(\"lkdlieu\").disable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n } else {\r\n $$(\"lkdlieu\").setValue(\"T\");\r\n $$(\"lkdlieu\").enable();\r\n $$(\"danhsach_hoadon\").clearAll();\r\n $$(\"tgtcthue\").setValue(\"\");\r\n $$(\"tgtthue\").setValue(\"\");\r\n $$(\"tgtttoan\").setValue(\"\");\r\n }\r\n },\r\n },\r\n },*/\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Lấy thông tin biên lai\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n webix.confirm({\r\n text: \"Tự động lập bản báo cáo theo kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n params[\"loaibth\"] = 2;\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n css: \"webix_header_border webix_data_border\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n position: \"center\",\r\n },\r\n {\r\n id: \"thdon\",\r\n name: \"thdon\",\r\n header: \"Tên biên lai\",\r\n width: 300,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"khms\",\r\n name: \"khms\",\r\n header: \"Ký hiệu mẫu số biên lai\",\r\n width: 120,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu biên lai\",\r\n width: 120,\r\n position: \"center\",\r\n // footer: \"Tổng cộng\"\r\n },\r\n {\r\n id: \"tongso\",\r\n name: \"tongso\",\r\n header: \"Tổng số\",\r\n width: 120,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n // footer: \"Tổng cộng\"\r\n },\r\n\r\n {\r\n id: \"sdky_tso\",\r\n name: \"sdky_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr1\",\r\n groupText: \"Số tồn đầu kỳ\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"sdky_dso\", name: \"sdky_dso\", batch: \"gr1\", header: [null, \"Đến số\"], position: \"center\" ,css : { \"text-align\": \"center\" }},\r\n {\r\n id: \"sph_tso\",\r\n name: \"sph_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr0\",\r\n groupText: \"Mua phát sinh trong kì\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"sph_dso\", name: \"sph_dso\", batch: \"gr0\", header: [null, \"Đến số\"], position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"ssdung\", name: \"ssdung\", header: \"Tổng số sử dụng, hủy\", width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n {\r\n id: \"ssdung_tso\",\r\n name: \"ssdung_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr2\",\r\n groupText: \"Số sử dụng\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"ssdung_dso\", name: \"ssdung_dso\", batch: \"gr2\", header: [null, \"Đến số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"ssdung_dsd\", name: \"ssdung_dsd\", header: \"Số đã dùng\", width: 140, position: \"center\" ,css : { \"text-align\": \"center\" }},\r\n {\r\n id: \"shuy_sluong\",\r\n name: \"shuy_sluong\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr3\",\r\n groupText: \"Hủy\",\r\n colspan: 2,\r\n position: \"center\",\r\n },\r\n \"Số lượng\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"shuy\", name: \"shuy\", batch: \"gr3\", header: [null, \"Số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n // { id: \"sxoabo_sluong\", name: \"sxoabo_sluong\", header: [\r\n // {\r\n // content: \"columnGroup\", closed: false, batch: \"gr4\",\r\n // groupText: \"Xóa bỏ\", colspan: 2,position: \"center\"\r\n // },\r\n // \"Số lượng\"], width: 140 ,position: \"center\"},\r\n // { id: \"sxoabo\", name: \"sxoabo\", batch: \"gr4\", header: [null, \"Số\"], width: 140, position: \"center\" },\r\n {\r\n id: \"scky_tso\",\r\n name: \"scky_tso\",\r\n header: [\r\n {\r\n content: \"columnGroup\",\r\n closed: false,\r\n batch: \"gr5\",\r\n groupText: \"Số tồn cuối kì kỳ\",\r\n colspan: 3,\r\n position: \"center\",\r\n },\r\n \"Từ số\",\r\n ],\r\n width: 140,\r\n position: \"center\",\r\n css : { \"text-align\": \"center\" }\r\n },\r\n { id: \"scky_dso\", name: \"scky_dso\", batch: \"gr5\", header: [null, \"Đến Số\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n { id: \"sltck\", name: \"sltck\", batch: \"gr5\", header: [null, \"Số lượng\"], width: 140, position: \"center\",css : { \"text-align\": \"center\" } },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n getNgay();\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n form.setValues(item);\r\n\r\n //$$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n //$$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n //$$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail_bienlai?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopbienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghopbienlaiform\", \"views/forms/68_bangdanhsachhoadon\", \"views/forms/68_hoadon_history\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n bangdanhsachhoadon,\r\n hoadonHistory\r\n) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n //$$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangtonghop\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n loaibth: 2,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công thông báo phát hành!\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n loaibth: 2,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký Biên lai hoặc Plugin ký Biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TCTPLPhi\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký Biên lai hoặc Plugin ký Biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n // bangtonghopform.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã Ký\"\r\n : \" Chưa Ký\";\r\n },\r\n },\r\n /*{\r\n id: \"ldau\",\r\n header: [\r\n \"Lần nộp\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.ldau == 1) {\r\n return \"Lần đầu \";\r\n } else {\r\n return \"Bổ sung \";\r\n }\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"numeric\",\r\n },\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"\", \"Lịch sử xử lý\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },*/\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Tình hình sử dụng biên lai\",\r\n details: \"Tình hình sử dụng biên lai\",\r\n });\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghopMTTform',[\"app\", \"models/user\",\"views/forms/68_hoadon_history\"], function (app, user,hoadonHistory) {\r\n var editmode = 0;\r\n var id = '';\r\n\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"Tổng hợp hóa đơn MTT gửi CQT\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n css: \"webix_header_border webix_data_border\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n var url = app.config.host + \"/Invoice68/GetTongHopHoaDonTheoBTHID?id=\"+id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header:\"Ký hiệu\" ,\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số hóa đơn\", width: 120 },\r\n { id: \"tttthai\", name: \"tttthai\", header: \"Trạng thái hóa đơn\", width: 120 },\r\n { id: \"tthoadon\", name: \"tthoadon\", header: \"Trạng thái gửi\", width: 120 },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header:\"Ngày hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\",header:\"Tên người mua\" , width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế người mua/mã khách hàng\", width: 150 },\r\n { id: \"thhdvu\", name: \"thhdvu\", header: \"Mặt hàng\", width: 150 },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng hàng hóa\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Tiền thanh toán\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin hóa đơn liên quan\", width: 250 },\r\n { id: \"gchu\", name: \"gchu\", header: \"Ghi chú\", width: 150 },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setId: function (bangtonghop_id) {\r\n var table = $$(\"danhsach_hoadon\");\r\n id = bangtonghop_id;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopMTT',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghopMTTform\", \"views/forms/68_hoadon_history\",\"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n bangtonghopform,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=4\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Xem chi tiết\" + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setId(selectedItem.bangtonghopdl_68_id);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Đã ký, không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(selectedItem);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0) {\r\n commonHD.KyTongHopXml(data_id);\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n // bangtonghopform.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in Biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã Ký\"\r\n : \" Chưa Ký\";\r\n },\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n header: [\"\", \"Kết quả\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng tổng hợp hóa đơn máy tính tiền\",\r\n details: \"Bảng tổng hợp hóa đơn máy tính tiền\",\r\n });\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachtncn',[\"app\", \"models/user\", \"views/forms/68_bangtonghopform\"], function (app, user, bangtonghopform) {\r\n var editmode = 0;\r\n var params;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"danhsach_hoadonFrm\");\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n var putData = \"\";\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == \"C\") {\r\n //item.mstnmua = item[\"mst\"];\r\n lstTemp.push(item);\r\n putData += \"'\" + item.hdon_id + \"',\";\r\n }\r\n }\r\n }\r\n\r\n putData = putData.substring(0, putData.length - 1);\r\n\r\n if (lstTemp.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn chứng từ\" });\r\n return;\r\n }\r\n\r\n var params = {};\r\n params[\"data\"] = putData;\r\n var lhhoa = $$(\"bangtonghop-form\").getValues().lhhoa;\r\n params[\"loaibth\"] = 3;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetDetailHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var frm = webix.$$(\"danhsach_hoadon\");\r\n frm.clearAll();\r\n frm.parse(json);\r\n\r\n $$(\"danhsachhoadon-win\").close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"danhsachhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"danhsachhoadon-win\",\r\n position: \"center\",\r\n head: \"Chọn chứng từ vào bảng tổng hợp dữ liệu điện tử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n minWidth: 900,\r\n id: \"danhsachhoadon-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n minHeight: 400,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"nky\",\r\n name: \"nky\",\r\n header: [\"Ngày giờ ký\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"datepickerFilter\" }],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: [\"Tên người bị khâu trừ\", { content: \"textFilter\" }], width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 150 },\r\n { id: \"cmnd\", name: \"cmnd\", header: [\"CMND/CCCD\", { content: \"textFilter\" }], width: 150 },\r\n /*{\r\n id: \"ktnhap\",\r\n name: \"ktnhap\",\r\n header: \"Khoản thu nhập\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"kdbhbbuoc\",\r\n name: \"kdbhbbuoc\",\r\n header: \"Khoản đóng bảo hiểm bắt buộc\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tổng thu nhập khấu trừ\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tổng thu nhập chịu thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttntthue\",\r\n name: \"ttntthue\",\r\n header: \"Tổng thu nhập tính thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n }*/ {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Số tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setParams: function (value) {\r\n params = value;\r\n params[\"loaibth\"] = 3;\r\n var table = $$(\"danhsach_hoadonFrm\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLy\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"danhsach_hoadonFrm\").clearAll();\r\n $$(\"danhsach_hoadonFrm\").parse(json);\r\n\r\n if (json[\"data\"].length > 0) {\r\n $$(\"tgtcthue\").setValue(fm(json[\"data\"][0][\"tong_dt\"]));\r\n $$(\"tgtthue\").setValue(fm(json[\"data\"][0][\"tong_tienthue\"]));\r\n }\r\n\r\n $$(\"danhsach_hoadonFrm\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n },\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_bangtonghoothunhapcanhanform',[\"app\", \"models/user\", \"views/forms/68_bangdanhsachtncn\"], function (app, user, bangdanhsachhoadon) {\r\n var editmode = 0;\r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var getNgay = function () {\r\n var option = $$(\"lkdlieu\").getValue();\r\n if (option == \"Q\") {\r\n var nam = $$(\"nam\").getValue();\r\n var thang;\r\n var quy = $$(\"thang\").getValue();\r\n if (quy == \"1\") {\r\n thang = 0;\r\n } else if (quy == \"2\") {\r\n thang = 3;\r\n } else if (quy == \"3\") {\r\n thang = 6;\r\n } else if (quy == \"4\") {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"T\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n } else if (option == \"N\") {\r\n var year = $$(\"nam\").getValue();\r\n var month = $$(\"thang\").getValue();\r\n var day = $$(\"ngay\").getValue();\r\n var date1 = month + \"/\" + day + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n\r\n $$(\"tu_ngay\").setValue(date);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(date);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n tableDetail.clearAll();\r\n };\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n id: \"btnBTHSave\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var ds_hdon = $$(\"danhsach_hoadon\").serialize();\r\n if (ds_hdon.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết bảng kê\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n // console.log(data_post);\r\n var limit = 1000;\r\n var m = parseInt(ds_hdon.length / limit);\r\n if (ds_hdon.length > m * limit) m = m + 1;\r\n var apiIndex = 0;\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n item[\"loaibth\"] = 3;\r\n for (var k = 0; k < m; k++) {\r\n if (k < m - 1) {\r\n item[\"details\"] = ds_hdon.slice(k * limit, (k + 1) * limit);\r\n } else {\r\n item[\"details\"] = ds_hdon.slice(k * limit, ds_hdon.length);\r\n }\r\n var tgtcthue = 0;\r\n var tgtthue = 0;\r\n var tgtttoan = 0;\r\n item[\"details\"].forEach(function (it) {\r\n tgtcthue += it[\"ttcthue\"];\r\n tgtthue += it[\"tgtthue\"];\r\n tgtttoan += it[\"tgtttoan\"];\r\n });\r\n item[\"tgtcthue\"] = tgtcthue;\r\n item[\"tgtthue\"] = tgtthue;\r\n item[\"tgtttoan\"] = tgtttoan;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n if (item.lhhoa === \"1\") {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDLXangDau\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"bangtonghop-win\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // shortcut: \"F11\",\r\n // view: \"button\",\r\n // label: \"Xuất tờ khai XML (F11)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 180,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n // {\r\n // shortcut: \"F12\",\r\n // id: \"btnBTHSend\",\r\n // view: \"button\",\r\n // label: \"Ký và gửi CQT (F12)\",\r\n // type: \"form\",\r\n // align: \"center\",\r\n // width: 150,\r\n // on: {\r\n // onClick: function () {\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Quay lại (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"bangtonghop-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n fullscreen: true,\r\n id: \"bangtonghop-win\",\r\n position: \"center\",\r\n head: \"BẢNG KÊ CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 1500,\r\n id: \"bangtonghop-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n view: \"label\",\r\n label: \"[01] Kỳ dữ liệu\",\r\n width: 170,\r\n },\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n width: 150,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"Q\", value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \"N\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 60);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").show();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"T\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n if (newv == \"Q\") {\r\n var k = [\"1\", \"2\", \"3\", \"4\"];\r\n $$(\"thang\").define(\"options\", k);\r\n $$(\"thang\").define(\"width\", 120);\r\n $$(\"thang\").setValue(\"1\");\r\n $$(\"thang\").refresh();\r\n $$(\"ngay\").hide();\r\n $$(\"ngay\").refresh();\r\n }\r\n\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n view: \"combo\",\r\n width: 60,\r\n value: \"1\",\r\n hidden: true,\r\n options: [\r\n \"1\",\r\n \"2\",\r\n \"3\",\r\n \"4\",\r\n \"5\",\r\n \"6\",\r\n \"7\",\r\n \"8\",\r\n \"9\",\r\n \"10\",\r\n \"11\",\r\n \"12\",\r\n \"13\",\r\n \"14\",\r\n \"15\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"19\",\r\n \"20\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n ],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"thang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n width: 150,\r\n value: \"1\",\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n required: true,\r\n invalidMessage: \"Tháng/Quý không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"nam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n label: \"Năm\",\r\n labelWidth: 50,\r\n width: 150,\r\n required: true,\r\n invalidMessage: \"Năm không được để trống !\",\r\n on: {\r\n onChange: function () {\r\n getNgay();\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"text\",\r\n label: \"[02] Mã số thuế:\",\r\n labelWidth: 130,\r\n width: 400,\r\n readonly: true,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"tu_ngay\", name: \"tu_ngay\", view: \"datepicker\", label: \"Từ ngày\", hidden: true, width: 200, labelWidth: 100 },\r\n { id: \"den_ngay\", name: \"den_ngay\", view: \"datepicker\", label: \"Đến ngày:\", hidden: true, labelWidth: 100, width: 260 },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n view: \"text\",\r\n label: \"[03] Tên người nộp thuế:\",\r\n labelWidth: 170,\r\n width: 620,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n readonly: true,\r\n },\r\n {\r\n id: \"dchi\",\r\n name: \"dchi\",\r\n view: \"text\",\r\n label: \"[04] Địa chỉ:\",\r\n labelWidth: 130,\r\n width: 400,\r\n invalidMessage: \"Không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n id: \"dthoai\",\r\n name: \"dthoai\",\r\n view: \"text\",\r\n label: \"[05] Điện thoại:\",\r\n labelWidth: 170,\r\n width: 380,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n },\r\n { id: \"nlap\", name: \"nlap\", view: \"datepicker\", label: \"Ngày lập\", width: 240, labelWidth: 100, value: new Date() },\r\n { id: \"sbthdlieu\", name: \"sbthdlieu\", view: \"text\", label: \"Số:\", labelWidth: 130, width: 400, readonly: true },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chọn chứng từ\",\r\n id: \"btnTaiHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = $$(\"bangtonghop-form\").getValues();\r\n var tableHoadon = $$(\"bangtonghop-form\");\r\n if (tableHoadon.validate()) {\r\n var detailForm = this.getTopParentView().$scope.ui(bangdanhsachhoadon.$ui);\r\n bangdanhsachhoadon.setEditMode(1);\r\n bangdanhsachhoadon.setParams(item);\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Chọn toàn bộ\",\r\n id: \"btnAllHoaDon\",\r\n width: 150,\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix.confirm({\r\n text: \"Tự động chọn tất cả chứng từ trong kì\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var params = $$(\"bangtonghop-form\").getValues();\r\n params[\"loaibth\"] = 3;\r\n var tableHoadon = webix.$$(\"danhsach_hoadon\");\r\n if (tableHoadon.validate()) {\r\n webix.extend($$(\"bangtonghop-form\"), webix.ProgressBar);\r\n $$(\"bangtonghop-form\").disable();\r\n $$(\"bangtonghop-form\").showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetHoadonChoXuLyall\", params, {\r\n error: function (text, data, XmlHttpRequest) {\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n webix.message(text, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n tableHoadon.clearAll();\r\n tableHoadon.parse(json);\r\n\r\n tableHoadon.refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n $$(\"bangtonghop-form\").enable();\r\n $$(\"bangtonghop-form\").hideProgress();\r\n },\r\n });\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Xóa\",\r\n id: \"btnXoaHoaDon\",\r\n width: 120,\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n var table = webix.$$(\"danhsach_hoadon\");\r\n var data = table.serialize();\r\n\r\n var tien_tt = 0;\r\n var tien_thue = 0;\r\n var tong_tien = 0;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n tien_tt += item[\"ttcthue\"] == null ? 0 : item[\"ttcthue\"];\r\n tien_thue += item[\"tgtthue\"] == null ? 0 : item[\"tgtthue\"];\r\n tong_tien += item[\"tgtttoan\"] == null ? 0 : item[\"tgtttoan\"];\r\n }\r\n\r\n $$(\"tgtcthue\").setValue(fm(tien_tt));\r\n $$(\"tgtthue\").setValue(fm(tien_thue));\r\n $$(\"tgtttoan\").setValue(fm(tong_tien));\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadon\",\r\n minHeight: 350,\r\n name: \"danhsach_hoadon\",\r\n select: true,\r\n scroll: true,\r\n resizeColumn: true,\r\n // footer: true,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 120,\r\n // footer: \"Tổng cộng\"\r\n },\r\n { id: \"shdon\", name: \"shdon\", header: \"Số chứng từ\", width: 120 },\r\n {\r\n id: \"nlap\",\r\n name: \"nlap\",\r\n header: \"Ngày chứng từ\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"tnmua\", name: \"tnmua\", header: \"Tên người bị khâu trừ\", width: 350 },\r\n { id: \"mstnmua\", name: \"mstnmua\", header: \"Mã số thuế\", width: 150 },\r\n { id: \"cmnd\", name: \"cmnd\", header: \"Chứng minh nhân dân\", width: 150 },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n header: \"Số tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Trạng thái\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Mới\";\r\n } else if (text == 1) {\r\n result = \"Hủy\";\r\n } else if (text == 2) {\r\n result = \"Điều chỉnh\";\r\n } else if (text == 3) {\r\n result = \"Thay thế\";\r\n } else if (text == 4) {\r\n result = \"Giải trình\";\r\n } else if (text == 5) {\r\n result = \"Sai sót do tổng hợp\";\r\n }\r\n return result;\r\n },\r\n },\r\n { id: \"tthdlquan\", name: \"tthdlquan\", header: \"Thông tin chứng từ liên quan\", width: 250 },\r\n\r\n /*{\r\n id: \"ktnhap\",\r\n name: \"ktnhap\",\r\n header: \"Khoản thu nhập\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"kdbhbbuoc\",\r\n name: \"kdbhbbuoc\",\r\n header: \"Khoản đóng bảo hiểm bắt buộc\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n header: \"Tổng thu nhập khấu trừ\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttcthue\",\r\n name: \"ttcthue\",\r\n header: \"Tổng thu nhập chịu thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n },\r\n {\r\n id: \"ttntthue\",\r\n name: \"ttntthue\",\r\n header: \"Tổng thu nhập tính thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n // footer: {\r\n // content: \"summColumn\"\r\n // }\r\n }*/\r\n {\r\n id: \"tthai\",\r\n name: \"tthai\",\r\n header: \"Ghi chú\",\r\n width: 150,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 1) {\r\n result = \"Chứng từ đã hủy.\";\r\n }\r\n return result;\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n hidden: true,\r\n cols: [\r\n {\r\n id: \"tgtcthue\",\r\n name: \"tgtcthue\",\r\n view: \"text\",\r\n label: \"Tiền trước thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtthue\",\r\n name: \"tgtthue\",\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n {\r\n id: \"tgtttoan\",\r\n name: \"tgtttoan\",\r\n view: \"text\",\r\n readonly: true,\r\n labelWidth: 100,\r\n css: \"mcls_readonly_text\",\r\n label: \"Tiền thanh toán\",\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // })\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var now = new Date();\r\n var getDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n $$(\"thang\").setValue((now.getMonth() + 1).toString());\r\n $$(\"thang\").refresh();\r\n $$(\"nam\").setValue(now.getFullYear().toString());\r\n $$(\"nam\").refresh();\r\n },\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"nlap\"] = removeTimeZoneT(item[\"nlap\"]);\r\n form.setValues(item);\r\n\r\n $$(\"tgtcthue\").setValue(fm(item.tgtcthue));\r\n $$(\"tgtthue\").setValue(fm(item.tgtthue));\r\n $$(\"tgtttoan\").setValue(fm(item.tgtttoan));\r\n\r\n getNgay();\r\n\r\n var tableDetail = webix.$$(\"danhsach_hoadon\");\r\n if (item.lhhoa === 1) {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLXangDauDetail?id=\" + item.id;\r\n } else {\r\n var url = app.config.host + \"/Invoice68/GetDataBangTHDLDetail?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_bangtonghopthuetncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_bangtonghoothunhapcanhanform\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangtonghopform, hoadonHistory) {\r\n \r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetBangTHDL\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&loaibth=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n webix.$$(\"title\").parse({\r\n title: \"Bảng kê chứng từ thuế thu nhập cá nhân\",\r\n details: \"Bảng kê chứng từ thuế thu nhập cá nhân\",\r\n });\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n webix.$$(\"dthoai\").setValue(json.tel);\r\n webix.$$(\"dchi\").setValue(json.address);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(2);\r\n bangtonghopform.setValues(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"bangtonghop-form\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"btnBTHSave\").destructor();\r\n $$(\"btnTaiHoaDon\").destructor();\r\n $$(\"btnAllHoaDon\").destructor();\r\n $$(\"btnXoaHoaDon\").destructor();\r\n }\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var databth = table.serialize();\r\n var datachon = [];\r\n\r\n for (var i = 0; i < databth.length; i++) {\r\n if (databth[i]!= undefined && databth[i].chon === true && databth[i].trang_thai === \"0\") {\r\n datachon.push(databth[i]);\r\n }\r\n }\r\n if (datachon.length == 0) {\r\n webix.message(\"Bạn chưa chọn dòng nào ở trạng thái chờ ký ! \", \"error\");\r\n return;\r\n }\r\n /*if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n return;\r\n }*/\r\n\r\n var khData = {};\r\n\r\n khData.editmode = 3;\r\n khData.data = datachon;\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBangTHDL\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n // table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In (F7)\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangtonghop\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"bangtonghop\");\r\n /*var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n return;\r\n }*/\r\n var datafrm = tableDK.serialize();\r\n\r\n var data_id = [];\r\n var data_id_xd = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa != 1) {\r\n data_id.push(datafrm[i].id);\r\n }\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true && datafrm[i].trang_thai != 1 && datafrm[i].lhhoa == 1) {\r\n data_id_xd.push(datafrm[i].id);\r\n }\r\n }\r\n }\r\n }\r\n if (data_id.length > 0 && data_id_xd.length > 0) {\r\n webix.message(\"Chỉ được chọn các bảng THDL cùng loại hàng hoá để ký!\");\r\n return;\r\n }\r\n if (data_id.length > 0 && data_id_xd.length == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n CheckHSM: \"\",\r\n id: data_id,\r\n loaibth: 3,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDL\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n function excuteHdPlugin(k) {\r\n if (k < data_id.length) {\r\n var hdon_id = data_id[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDL?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n loaibth: 3,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin(k);\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TChuc\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDL\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin(0);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else if (data_id_xd.length > 0 && data_id == 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n /*id: selectedItem.id,*/\r\n id: data_id_xd,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"bangtonghop\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: data_id_xd,\r\n CheckHSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignBTHDLXangDau\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var parameters_list = [];\r\n\r\n var k = 0; //khai báo biến k để chạy lần lượt từng hoá đơn theo id\r\n function excuteHdPlugin() {\r\n if (k < data_id_xd.length) {\r\n var hdon_id = data_id_xd[k];\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlBTHDLXangDau?id=\" + hdon_id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, hdon_id]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item,\r\n shdon: json.shdon,\r\n };\r\n parameters_list.push(parameters);\r\n }\r\n k++;\r\n excuteHdPlugin();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: json.shdon,\r\n idSigner: \"seller\",\r\n tagSign: \"TChuc\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n } else {\r\n if (parameters_list.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlBTHDLXangDau\", JSON.stringify(parameters_list), function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n app.callEvent(\"dataChangeBangtonghop\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n\r\n excuteHdPlugin();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n } else {\r\n webix.message(\"Chưa tích chọn bảng hoặc bảng đã ký!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n id: \"btnUp\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangtonghopform.$ui);\r\n bangtonghopform.setEditMode(1);\r\n detailForm.show();\r\n\r\n webix.$$(\"ldau\").setValue(0);\r\n\r\n var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n webix.$$(\"tnnt\").setValue(json.name);\r\n webix.$$(\"mst\").setValue(json.tax_code);\r\n webix.$$(\"dthoai\").setValue(json.tel);\r\n webix.$$(\"dchi\").setValue(json.address);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n id: \"btnDownloadXml\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai != 1) {\r\n webix.message(\"Bảng kê chưa ký không tồn tại xml ! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLBangTHDL?id=\" + selectedItem.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"BangTHDL.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Export Excel\" + \"\",\r\n id: \"btnExel\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"bangtonghop\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa dòng export ! \", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang export exel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n if (selectedItem.lhhoa == 1) {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieuXangDau?id=\" + selectedItem.id + \"&type=Excel\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bangke.xlsx\");\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLieu_all?id=\" + selectedItem.id + \"&type=Excel\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n webix.html.download(file, \"bangke.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"bangtonghop\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n DowloadBTHLDRep: function (event, cell, target) {\r\n var win = webix.$$(\"bangtonghop\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n\r\n if (record.xml_nhan == null || record.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = \"KetQuaKiemTraBTHDL.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLBTHDLRep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n\r\n return false;\r\n },\r\n InBTHDLRep: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.xml_nhan == null || item.xml_nhan == \"\") {\r\n webix.message(\"CQT chưa phản hồi !\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBTHDLRep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"bangtonghop\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\"Trạng thái\"],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"kdlieu\",\r\n header: [\r\n \"Kỳ dữ liệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngay_ky\",\r\n header: [\r\n \"Ngày giờ ký\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n\r\n {\r\n id: \"sbthdlieu\",\r\n header: [\r\n \"Số thứ tự bảng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\r\n // \"Mã thông điệp\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 150,\r\n // },\r\n {\r\n id: \"ngky\",\r\n header: [\r\n \"Người ký\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n /* {\r\n id: \"ket_qua\",\r\n header: [\"\", \"Kết quả\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Dữ liệu hợp lệ \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Dữ liệu không hợp lệ \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n },*/\r\n /*{\r\n id: \"bthDowloadBTHLDRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInBTHDLRep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },*/\r\n // {\r\n // id: \"mtdiepcqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 250,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"bangtonghop\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"bangtonghop\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangeBangtonghop\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_baocao_tinhhinhhoadonForm',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$(\"cbQuy\").define(\"label\", \"Tháng\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n $$(\"cbQuy\").define(\"label\", \"Quý\");\r\n $$(\"cbQuy\").refresh();\r\n $$(\"cbQuy\").define(\"options\", [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Tình hình sử dụng hóa đơn\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n required: true,\r\n invalidMessage: \"Vui lòng chọn đơn vị\",\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\",\r\n },\r\n },\r\n on: {\r\n onChange: function(newValue, oldValue) {\r\n // Tạo URL API dựa trên các giá trị đã chọn trong multicomboA\r\n var urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n // Cập nhật URL của multicomboB và tải lại dữ liệu\r\n var comp = $$(\"multicombo_kyhieu\").getPopup().getList();\r\n if(comp != null) {\r\n comp.clearAll();\r\n comp.load(urlLoad);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Tháng\" }, // the initially selected item\r\n { id: 2, value: \"Quý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor(d.getMonth() / 3);\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$(\"head_extension\").getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6;\r\n }\r\n if (quy == 4) {\r\n thang = 9;\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"TU_NGAY\"),\r\n name: \"tu_ngay\",\r\n id: \"tu_ngay\",\r\n value: firstDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn từ ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"DEN_NGAY\"),\r\n name: \"den_ngay\",\r\n id: \"den_ngay\",\r\n value: lastDay,\r\n labelWidth: 80,\r\n invalidMessage: \"Vui lòng chọn đến ngày\",\r\n validate: webix.rules.isNotEmpty,\r\n required: true,\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n labelWidth: 80,\r\n id: \"multicombo_kyhieu\",\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF003001\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n width: 100,\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tableHoadon = $$(\"bangkebr\");\r\n if (tableHoadon.validate()) {\r\n var tungay = $$(\"tu_ngay\").getValue();\r\n var denngay = $$(\"den_ngay\").getValue();\r\n\r\n if (tungay > denngay) {\r\n webix.message(\"Ngày bắt đầu phải nhỏ hơn ngày kết thúc !\", \"error\");\r\n $$(\"tu_ngay\").focus();\r\n return;\r\n }\r\n\r\n var form = self.getParentView().getParentView();\r\n var win = self.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"dataChangebangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 100,\r\n align: \"center\",\r\n type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_baocao_tinhhinhhoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_baocao_tinhhinhhoadonForm\", \"views/forms/68_hoadon_history\"], function (app, _, user, bangkebanraForm, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Tờ khai chứng từ bán ra\",\r\n details: \"Tờ khai chứng từ bán ra\",\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng nào ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(2);\r\n // bangkebanraForm.setValues(selectedItem);\r\n // if (selectedItem.trang_thai == 1) {\r\n // var form = $$(\"bangkebanra-form\").elements;\r\n // for (var key in form) {\r\n // var $el = form[key];\r\n // $el.define(\"readonly\", \"true\");\r\n // $el.define(\"css\", \"mcls_readonly_text\");\r\n // $el.refresh();\r\n // }\r\n\r\n // webix.$$(\"btnBTHSave\").destructor();\r\n // webix.$$(\"btnTaiDanhSachBanRa\").destructor();\r\n // }\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Bảng tổng hợp đã gửi CQT không thể xóa ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // var khData = {};\r\n\r\n // khData.editmode = 3;\r\n // khData.data = [];\r\n // khData.data.push(selectedItem);\r\n\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa bản ghi\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveBangKeBanRa\", khData, function (text) {\r\n // var response = JSON.parse(text);\r\n\r\n // if (response.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: response.error });\r\n // return;\r\n // }\r\n\r\n // // table.remove(item.id);\r\n // var btnRefresh = $$(\"btnRefresh\");\r\n // btnRefresh.callEvent(\"onClick\");\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In PDF\" + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in !\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/PrintPDFTinhHinhSuDungHoaDon\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExportExcel\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất !\", \"error\");\r\n return;\r\n }\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/PrintPDFTinhHinhSuDungHoaDon\", rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"TinhHinhSuDungHoaDon.xlsx\");\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Gửi email\") + \"\",\r\n // id: \"btnSendEmail\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n // id: \"btnSign\",\r\n // on: {\r\n // onClick: function () {\r\n // var tableDK = webix.$$(\"bangkebanra\");\r\n // var selectedItem = tableDK.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n // var result = JSON.parse(text);\r\n // var kytaptrung = \"\";\r\n // for (var i = 0; i < result.length; i++) {\r\n // var item = result[i];\r\n // kytaptrung = item.value;\r\n // }\r\n\r\n // webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n // var listcerts = JSON.parse(text);\r\n // if (listcerts.length > 0) {\r\n // var box = webix.modalbox({\r\n // title: \"Chọn chứng thư số\",\r\n // buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n // text: \"
\",\r\n // top: 100,\r\n // width: 750,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"1\":\r\n // webix.modalbox.hide();\r\n // break;\r\n // case \"0\":\r\n // var table = $$(\"tblCerts\");\r\n // var data = table.serialize();\r\n // var cert = null;\r\n\r\n // for (var i = 0; i < data.length; i++) {\r\n // if (data[i].chon == true) {\r\n // cert = data[i];\r\n // break;\r\n // }\r\n // }\r\n\r\n // if (cert == null) {\r\n // webix.message(\"Bạn chưa chọn chứng thư số\");\r\n // return;\r\n // }\r\n // var postData = {\r\n // branch_code: user.getDvcsID(),\r\n // username: user.getCurrentUser(),\r\n // cer_serial: cert.cer_serial,\r\n // id: selectedItem.id,\r\n // };\r\n\r\n // webix.extend(tableDK, webix.ProgressBar);\r\n // tableDK.disable();\r\n // tableDK.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SignBangKeBanRa\", postData, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // // var json = JSON.parse(text);\r\n // // webix.message(json.ExceptionMessage, \"error\");\r\n // webix.message(text + XmlHttpRequest, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var json = JSON.parse(text);\r\n // tableDK.enable();\r\n // tableDK.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n // return;\r\n // }\r\n // },\r\n // });\r\n // var tblMatHang = webix.ui({\r\n // container: \"ctnCerts\",\r\n // id: \"tblCerts\",\r\n // view: \"datatable\",\r\n // borderless: true,\r\n // resizeColumn: true,\r\n // height: 350,\r\n // columns: [\r\n // {\r\n // id: \"chon\",\r\n // header: _(\"CHON\"),\r\n // width: 65,\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: \"{common.checkbox()}\",\r\n // },\r\n // {\r\n // id: \"cer_serial\",\r\n // header: _(\"SO_SERIAL\"),\r\n // width: 150,\r\n // },\r\n // {\r\n // id: \"subject_name\",\r\n // header: _(\"SUBJECTNAME\"),\r\n // width: 450,\r\n // },\r\n // {\r\n // id: \"begin_date\",\r\n // header: _(\"NGAY_BAT_DAU\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"end_date\",\r\n // header: _(\"NGAY_KET_THUC\"),\r\n // width: 200,\r\n // },\r\n // {\r\n // id: \"issuer\",\r\n // header: _(\"DONVI\"),\r\n // width: 450,\r\n // },\r\n // ],\r\n // url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n // });\r\n // } else {\r\n // var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var a = webix.ajax(app.config.host + \"/Invoice68/XmlBangKeBanRa?id=\" + selectedItem.id);\r\n // var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n // webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // // webix.extend(tblInvoice, webix.ProgressBar);\r\n // // tblInvoice.disable();\r\n // // tblInvoice.showProgress();\r\n // var json = results[0].json();\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // }\r\n\r\n // var listcerts = results[1].json();\r\n // var item = results[2];\r\n\r\n // if (listcerts.length == 0) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n // return;\r\n // }\r\n\r\n // require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n // var hub = plugin.hub();\r\n // var hubconnect = plugin.conn();\r\n // if (hubconnect.state != 1) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n // return;\r\n // }\r\n // hub.off(\"resCommand\");\r\n // hub.on(\"resCommand\", function (result) {\r\n // var json = JSON.parse(result);\r\n\r\n // if (json.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: json.error });\r\n // } else {\r\n // var parameters = {\r\n // xml: json.xml,\r\n // id: selectedItem.id,\r\n // shdon: json.shdon,\r\n // };\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SaveXmlBangKeBanRa\", parameters, function (text) {\r\n // var result = JSON.parse(text);\r\n // if (result.hasOwnProperty(\"error\")) {\r\n // webix.message(result.error, \"error\");\r\n // } else {\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // // $$(\"huyhoadonForms\").close();\r\n // app.callEvent(\"dataChangebangkebanra\", [1, null]);\r\n // }\r\n // });\r\n // }\r\n // table.enable();\r\n // table.hideProgress();\r\n // });\r\n\r\n // var _listcerts = [];\r\n\r\n // for (var i = 0; i < listcerts.length; i++) {\r\n // var _cert = listcerts[i];\r\n\r\n // _listcerts.push({\r\n // so_serial: _cert.cer_serial,\r\n // ngaybatdau: _cert.begin_date,\r\n // ngayketthuc: _cert.end_date,\r\n // issuer: _cert.issuer,\r\n // subjectname: _cert.subject_name,\r\n // });\r\n // }\r\n\r\n // var arg = {\r\n // idData: \"#data\",\r\n // xml: json[\"xml\"],\r\n // shdon: json.shdon,\r\n // idSigner: \"seller\",\r\n // tagSign: \"NNT\",\r\n // listcerts: _listcerts,\r\n // };\r\n\r\n // hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n // .done(function () {\r\n // console.log(\"Success !\");\r\n // })\r\n // .fail(function (error) {\r\n // webix.message(error, \"error\");\r\n // });\r\n // });\r\n // });\r\n // }\r\n // });\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + \"Lập bổ sung\" + \"\",\r\n // id: \"btnCreatePlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(bangkebanraForm.$ui);\r\n // bangkebanraForm.setEditMode(1);\r\n // detailForm.show();\r\n\r\n // webix.$$(\"ldau\").setValue(0);\r\n\r\n // var url = app.config.host + \"/Invoice68/GetInfoCompany\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n // webix.$$(\"tnnt\").setValue(json.name);\r\n // webix.$$(\"mst\").setValue(json.tax_code);\r\n // webix.$$(\"ddanh\").setValue(json.address);\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 120,\r\n // label: ' ' + '' + _(\"Lập bổ sung\") + \"\",\r\n // id: \"btnUp\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"hoadon\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n //{\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Tải XML\") + \"\",\r\n // id: \"btnDownloadXml\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"bangkebanra\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai != 1) {\r\n // webix.message(\"Bảng tổng hợp chưa gửi CQT không tồn tại xml ! \", \"error\");\r\n // return;\r\n // }\r\n\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n\r\n // var url = app.config.host + \"/Invoice68/ExportXMLBangKeBanRa?id=\" + selectedItem.id;\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(url, function (text, data) {\r\n // table.enable();\r\n // table.hideProgress();\r\n\r\n // var file = new Blob([data], { type: \"application/xml\" });\r\n // webix.html.download(file, \"BangKeBanRa.xml\");\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, \"_blank\");\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n //},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n tooltip:true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khmhdon\",\r\n header:\"
Ký hiệu mẫu hóa đơn
\",\r\n width: 150,\r\n // template: function (obj) {\r\n // debugger;\r\n // if (obj != null) \r\n // return obj.khieu.substr(0,1);\r\n // },\r\n },\r\n {\r\n id: \"khieu\",\r\n header:\"
Ký hiệu hóa đơn
\",\r\n width: 150,\r\n // template: function (obj) {\r\n\r\n // debugger;\r\n // if (obj != null) \r\n // return obj.khieu.substr(1,obj.khieu.length - 1);\r\n // },\r\n },\r\n {\r\n id: \"tsss_tuso\",\r\n header: [{ text: \"
Tổng số sử dụng, thay thế, điều chỉnh, hủy
\", colspan: 3 }, { text: \"
Từ số
\" }],\r\n width: 100,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n },\r\n {\r\n id: \"tsss_denso\",\r\n header: [null, { text: \"
Đến số
\" }],\r\n width: 100,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"tsss_tong\",\r\n header: [null, { text: \"
Tổng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n { \r\n id: \"doanhthu\", \r\n header: \"
Doanh thu
\", \r\n width: 100, \r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"goc_sl\",\r\n header: [{ text: \"
Gốc
\", colspan: 2 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"goc_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"huy_sl\",\r\n header: [{ text: \"
Hủy/Bị thay thế
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"huy_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"huy_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"loi_sl\",\r\n header: [{ text: \"
Lỗi
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"loi_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"loi_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"bidieuchinh_sl\",\r\n header: [{ text: \"
Bị điều chỉnh
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n {\r\n id: \"bidieuchinh_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"bidieuchinh_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n \r\n {\r\n id: \"dieuchinh_sl\",\r\n header: [{ text: \"
Điều chỉnh/Thay thế
\", colspan: 3 }, { text: \"
Số lượng
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n {\r\n id: \"dieuchinh_soseri\",\r\n header: [null, { text: \"
Số seri hóa đơn
\" }],\r\n width: 150,\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n },\r\n {\r\n id: \"dieuchinh_ttien\",\r\n header: [null, { text: \"
Tổng tiền
\" }],\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n }),\r\n },\r\n \r\n \r\n \r\n // { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n // {\r\n // id: \"tien_tt0\",\r\n // header: \"
Doanh thu chưa có thuế GTGT
\",\r\n // width: 200,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n // },\r\n // {\r\n // id: \"tien\",\r\n // header: \"
Thuế GTGT
\",\r\n // width: 100,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \",\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \".\",\r\n // decimalSize: 0,\r\n // }),\r\n // },\r\n // { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 200 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n //$group: {\r\n //by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n //},\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangebangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/GetTinhHinhSuDungHoaDon\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\n\r\ndefine('views/modules/minvoiceplugin',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n var isConnected = false;\r\n var isWindowXP = function () {\r\n return navigator.userAgent.indexOf(\"Windows NT 5.1\") != -1;\r\n }\r\n var isLocked = false;\r\n if (!isWindowXP()) {\r\n var urls = [\"http://localhost:17997/signalr\", \"http://localhost:19898/signalr\"];\r\n var connection = null;\r\n var hub = null;\r\n\r\n function connectToSignalR(urlIndex) {\r\n if (urlIndex >= urls.length) {\r\n console.log('All connection attempts failed.');\r\n return;\r\n }\r\n\r\n var url = urls[urlIndex];\r\n var conn = $.hubConnection(url, {\r\n useDefaultPath: false\r\n });\r\n\r\n hub = conn.createHubProxy('invoiceHub');\r\n\r\n // Xử lý khi nhận sự kiện từ hub\r\n hub.on('resCommand', function (result) {\r\n\r\n });\r\n\r\n // Xử lý khi kết nối bị ngắt\r\n conn.disconnected(function () {\r\n console.log('Connection disconnected');\r\n isConnected = false;\r\n isLocked = false;\r\n });\r\n\r\n // Bắt đầu kết nối\r\n conn.start().done(function () {\r\n console.log(\"Connected to Plugin Id: \" + hub.connection.id + \" at \" + urls[urlIndex]);\r\n isConnected = true;\r\n isLocked = false;\r\n }).fail(function () {\r\n console.log('Failed to connect to ' + urls[urlIndex]);\r\n // Nếu kết nối thất bại, thử kết nối URL tiếp theo\r\n if (urlIndex == urls.length - 1) {\r\n isConnected = false;\r\n var userApp = user.getAppCookie();\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: userApp.wb_user_id\r\n }\r\n }\r\n , function (text) {\r\n var json = JSON.parse(text);\r\n if (json.length > 0 && json.filter(function (x) { return x.chon1 == 'C' }).length > 0)\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn (Tiện ích > Plugin ký hóa đơn) hoặc Plugin ký hóa đơn chưa được bật !\", \"debug\");\r\n });\r\n }\r\n else {\r\n connectToSignalR(urlIndex + 1);\r\n }\r\n });\r\n connection = conn;\r\n\r\n }\r\n\r\n // Bắt đầu kết nối ngay lập tức khi module được nạp\r\n connectToSignalR(0);\r\n\r\n return {\r\n hub: function () {\r\n return hub;\r\n },\r\n conn: function () {\r\n return connection;\r\n },\r\n isConnected: isConnected,\r\n setLocked: function (locked) {\r\n isLocked = locked;\r\n },\r\n getLocked: function () {\r\n return isLocked;\r\n }\r\n };\r\n\r\n } else {\r\n var url = \"ws://localhost:19898/service\";\r\n var hub = {};\r\n window.fn = undefined;\r\n window.state = undefined;\r\n hub.ws = undefined;\r\n\r\n hub.conn = function () {\r\n window.state = 1;\r\n hub.ws = new WebSocket(url);\r\n // hub.ws.onopen = hub.onOpen;\r\n hub.ws.onclose = hub.onClose;\r\n // hub.ws.onmessage = hub.on;\r\n hub.ws.onerror = hub.onError;\r\n }\r\n var conn = function () {\r\n return { state: window.state };\r\n }\r\n hub.off = function (_) {\r\n\r\n }\r\n hub.invoke = function (_, str2, json) {\r\n if (hub.ws != undefined) {\r\n hub.ws.onopen = function () {\r\n var obj = {\r\n execCommand: str2,\r\n arg: JSON.parse(json)\r\n }\r\n if (hub.ws.readyState == WebSocket.OPEN) {\r\n hub.ws.send(JSON.stringify(obj));\r\n }\r\n }\r\n\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n return hub;\r\n };\r\n hub.onError = function (arg) {\r\n window.state = -1;\r\n if (hub.ws != undefined) {\r\n isConnected = false;\r\n var userApp = user.getAppCookie();\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: userApp.wb_user_id\r\n }\r\n }\r\n , function (text) {\r\n console.log(1);\r\n var json = JSON.parse(text);\r\n if (json.length > 0 && json.filter(function (x) { return x.chon1 == 'C' }).length > 0)\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn (Tiện ích > Plugin ký hóa đơn) hoặc Plugin ký hóa đơn chưa được bật !\", \"debug\");\r\n });\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n }\r\n hub.on = function (str, fn_in) {\r\n if (hub.ws != undefined) {\r\n window.fn = fn_in;\r\n hub.ws.onmessage = func;\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n }\r\n var func = function (result) {\r\n return window.fn(result.data);\r\n }\r\n hub.onClose = function (arg) {\r\n if (hub.ws != undefined) {\r\n console.log('DISCONNECTED');\r\n isConnected = false;\r\n isLocked = false;\r\n } else {\r\n console.log('Websocket is not initialized');\r\n }\r\n };\r\n\r\n hub.onOpen = function (arg) {\r\n if (hub.ws != undefined) {\r\n isConnected = true;\r\n isLocked = false;\r\n window.state = hub.ws.readyState;\r\n } else {\r\n isConnected = false;\r\n isLocked = true;\r\n console.log('Websocket is not initialized');\r\n }\r\n };\r\n hub.done = function (fn) {\r\n fn();\r\n return hub;\r\n }\r\n hub.fail = function (fn) {\r\n return hub;\r\n }\r\n\r\n return {\r\n hub: function () {\r\n hub.conn();\r\n\r\n return hub;\r\n },\r\n conn: function () {\r\n return conn();\r\n },\r\n isConnected: isConnected,\r\n setLocked: function (locked) {\r\n isLocked = locked;\r\n },\r\n getLocked: function () {\r\n return isLocked;\r\n }\r\n };\r\n }\r\n});\ndefine('views/forms/68_dangkysudung_bienlai',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng biên lai
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG BIÊN LAI ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n /*{\r\n view: \"text\",\r\n label: \"Căn cứ: \",\r\n labelWidth: 150,\r\n name: \"ccu\",\r\n id: \"ccu\",\r\n required: true,\r\n invalidMessage: \"Căn cứ không được để trống !\",\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Theo nghị định số: 123/2020/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ, chúng tôi/tôi thuộc đối tượng sử dụng biên lai điện tử. Chúng tôi/tôi đăng ký/thay đổi thông tin đã đăng ký với cơ quan thuế về việc sử dụng biên lai điện tử như sau:\",\r\n },\r\n ],\r\n },\r\n { view: \"label\", label: \"1. Hình thức biên lai:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tccnphanh\",\r\n name: \"tccnphanh\",\r\n labelRight: \"Tổ chức, cá nhân phát hành\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"dcqtphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"dcqtphanh\",\r\n name: \"dcqtphanh\",\r\n labelRight: \"Do CQT phát hành\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tccnphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"2. Loại hình sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"bldin\",\r\n name: \"bldin\",\r\n labelRight: \"Biên lai đặt in\",\r\n },\r\n\r\n {\r\n view: \"checkbox\",\r\n id: \"bltin\",\r\n name: \"bltin\",\r\n labelRight: \"Biên lai tự in\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"blhddt\",\r\n name: \"blhddt\",\r\n labelRight: \"Biên lai HĐĐT\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"Ghi chú\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Nêu cụ thể từng loại có mấy liên, chức năng sử dụng của từng liên, số lượng từng loại biên lai, ký hiệu từ số... đến số...\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với Biên lai đặt in ghi rõ: số biên lai này được đặt in tại... (ghi rõ tên nhà in) và đăng ký sử dụng tại địa phương... từ ngày....\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với biên lai tự in ghi rõ: số biên lai này đăng ký sử dụng tại địa phương... từ ngày...\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Tên hệ thống thiết bị ( máy tính, máy in, phần mềm ứng dụng) dùng để in biên lai; bộ phận kỹ thuật hoặc tên nhà cung cấp dịch vụ kỹ thuật tự in biên lai thu tiền, lệ phí.\",\r\n },\r\n {\r\n view: \"label\",\r\n label: \"- Đối với biên lai điện tử ghi rõ Tên phần mềm hoặc giải pháp tạo biên lai điện tử, tên nhà cung cấp giải pháp biên lai tiền phí, lệ phí điện tử.\",\r\n },\r\n /*{\r\n view: \"checkbox\",\r\n id: \"sllien\",\r\n name: \"sllien\",\r\n labelRight: \"Số lượng liên\",\r\n },*/\r\n { view: \"label\", label: \"3. Hình thức gửi dữ liệu biên lai điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"cttdtu\",\r\n name: \"cttdtu\",\r\n labelRight: \"Cổng thông tin điện tử (Trên Cổng thông tin điện tử của cơ quan thuế)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"cdvcong\",\r\n name: \"cdvcong\",\r\n labelRight: \"Cổng dịch vụ công (Trên Cổng dịch vụ công quốc gia)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htudttoan\",\r\n name: \"htudttoan\",\r\n labelRight: \"Hệ thống ứng dụng thanh toán (Trên hệ thống ứng dụng thanh toán điện tử của ngân hàng)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tcccdvu\",\r\n name: \"tcccdvu\",\r\n value: 1,\r\n labelRight: \"Tổ chức cung cấp dịch vụ (Thông qua tổ chức cung ứng dịch vụ trung gian thanh toán)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"4. Tên biên lai sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tpvphckin\",\r\n name: \"tpvphckin\",\r\n labelRight: \"Thu phạt vi phạm hành chính không in (Biên lai thu phạt vi phạm hành chính không in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tpvphcisan\",\r\n name: \"tpvphcisan\",\r\n labelRight: \"Thu phạt vi phạm hành chính in sẵn (Biên lai thu phạt vi phạm hành chính in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpkin\",\r\n name: \"tplpkin\",\r\n labelRight: \"Thu phí, lệ phí không in (Biên lai thu phí, lệ phí không in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpin\",\r\n name: \"tplpin\",\r\n labelRight: \"Thu phí, lệ phí in (Biên lai thu phí, lệ phí in sẵn mệnh giá)\",\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tplpvtphat\",\r\n name: \"tplpvtphat\",\r\n labelRight: \"Thu phí, lệ phí và thu phạt (Biên lai thu phí, lệ phí và thu phạt vi phạm hành chính)\",\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"5. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.subject_name,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.subjectname,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.subjectname,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n item.ltkhai = 2;\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung_bienlai\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD Biên lai\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD Biên lai\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n //console.log(JSON.stringify(array));\r\n }\r\n }\r\n url = url + \"<khai=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công!\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF&loaitk=2\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Mẫu 01/ĐK-BL - Tờ khai Đăng ký/thay đổi thông tin sử dụng Biên lai\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày ký\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"\", \"Ngày lập\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"DS TỜ KHAI ĐĂNG KÝ/ THAY ĐỔI THÔNG TIN \", details: \"DANH SÁCH TỜ KHAI ĐĂNG KÝ/ THAY ĐỔI THÔNG TIN \" });\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_dangkysudung_thue_TNCN',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng khấu trừ thuế thu nhập cá nhân
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\r\n \"template\",\r\n \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\"\r\n );\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\r\n \"template\",\r\n \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\"\r\n );\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG CHỨNG TỪ THUẾ THU NHẬP CÁ NHÂN
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Căn cứ: \",\r\n labelWidth: 100,\r\n name: \"ccu\",\r\n id: \"ccu\",\r\n required: true,\r\n invalidMessage: \"Căn cứ không được để trống !\",\r\n attributes: {\r\n maxlength: 500,\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"1. Hình thức chứng từ khấu trừ:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tccnphanh\",\r\n name: \"tccnphanh\",\r\n labelRight: \"Tổ chức, cá nhân phát hành\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"adhdcma\").setValue(1);\r\n // $$(\"adhdkma\").setValue(0);\r\n // }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"2. Loại hình sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"tphanh\",\r\n name: \"tphanh\",\r\n labelRight: \"Tự phát hành (Chứng từ điện tử tự phát hành)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tqtcccap\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tqtcccap\",\r\n name: \"tqtcccap\",\r\n value: 1,\r\n labelRight: \"Thông qua tổ chức cung cấp (Chứng từ điện tử thông qua tổ chức cung cấp giải pháp, chứng từ điện tử)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tphanh\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", label: \"3. Hình thức gửi dữ liệu chứng từ điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"cttdtu\",\r\n name: \"cttdtu\",\r\n labelRight: \"Cổng thông tin điện tử (Trên Cổng thông tin điện tử của cơ quan thuế)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"cdvcong\",\r\n name: \"cdvcong\",\r\n labelRight: \"Cổng dịch vụ công (Trên Cổng dịch vụ công quốc gia)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htudttoan\",\r\n name: \"htudttoan\",\r\n labelRight: \"Hệ thống ứng dụng thanh toán (Trên hệ thống ứng dụng thanh toán điện tử của ngân hàng)\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n $$(\"tcccdvu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"tcccdvu\",\r\n name: \"tcccdvu\",\r\n labelRight: \"Tổ chức cung cấp dịch vụ (Thông qua tổ chức cung ứng dịch vụ trung gian thanh toán)\",\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"cdvcong\").setValue(0);\r\n $$(\"htudttoan\").setValue(0);\r\n $$(\"cttdtu\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"4. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.subject_name,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.subjectname,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.subjectname,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n item.ltkhai = 3;\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 5 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung_cthue_THCN',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung_thue_TNCN\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD CTTNCN\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD CTTNCN\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n //console.log(JSON.stringify(array));\r\n }\r\n }\r\n url = url + \"<khai=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công!\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF&loaitk=3\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Tờ khai Đăng ký/thay đổi thông tin sử dụng chứng từ khấu trừ thuế thu nhập cá nhân\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày ký\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"\", \"Ngày lập\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n /*{\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },*/\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n /*{\r\n id: \"nguoi_gui\",\r\n header: [\"\", \"Người gửi\"],\r\n width: 200,\r\n },*/\r\n /*{\r\n id: \"ketqua_tiepnhan\",\r\n header: [{ text: \"Mẫu 01/TB-TNĐT - Thông tin tiếp nhận tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 300,\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan == 1) {\r\n return \"Tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 2) {\r\n return \"Không tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 3) {\r\n return \"Tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 4) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 0) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"lydo_tiepnhan\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao_tiepnhan\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRepTiepNhan\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n /*{\r\n id: \"btnInMau03\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n // {\r\n // id: \"mtdiep_tiepnhan_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n /*{\r\n id: \"ket_qua\",\r\n header: [{ text: \"Mẫu 01/TB-ĐKĐT - Thông tin chấp nhận Tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 200,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 3) {\r\n return \"Đã phản hồi kết quả \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"ly_do\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau02\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },*/\r\n // {\r\n // id: \"mtdiep_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_dangkysudung',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký sử dụng\", details: \"Đăng ký sử dụng\" });\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Đăng ký/thay đổi thông tin sử dụng hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"dangkysudungForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"dangkysudung\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"loai\",\r\n name: \"loai\",\r\n width: 200,\r\n value: 1,\r\n options: [\r\n { id: 1, value: \"Đăng ký\" }, // the initially selected item\r\n { id: 2, value: \"Thay đổi\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
THAY ĐỔI THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n } else {\r\n $$(\"header\").define(\"template\", \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\");\r\n $$(\"header\").refresh();\r\n }\r\n },\r\n },\r\n },\r\n {\r\n id: \"header\",\r\n template: \"
TỜ KHAI
ĐĂNG KÝ THÔNG TIN SỬ DỤNG HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n ],\r\n },\r\n {\r\n paddingX: 40,\r\n rows: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế: \",\r\n labelWidth: 150,\r\n name: \"tnnt\",\r\n id: \"tnnt\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã số thuế không được để trống !\",\r\n on: {\r\n onSearchIconClick: function () {\r\n var mst = this.getValue();\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cqtqly\",\r\n view: \"combo\",\r\n name: \"cqtqly\",\r\n label: \"Cơ quan thuế quản lý: \",\r\n labelWidth: 150,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 350, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqtqly\").setValue(obj[\"code\"]);\r\n $$(\"mcqtqly\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Cơ quan thuế quản lý không được để trống !\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã CQT quản lý: \",\r\n labelWidth: 150,\r\n name: \"mcqtqly\",\r\n id: \"mcqtqly\",\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Địa danh: \",\r\n labelWidth: 80,\r\n name: \"ddanh\",\r\n id: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n attributes: { maxlength: 20 },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Người liên hệ: \",\r\n labelWidth: 150,\r\n name: \"nlhe\",\r\n id: \"nlhe\",\r\n required: true,\r\n invalidMessage: \"Người liên hệ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dtlhe\",\r\n id: \"dtlhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ liên hệ: \",\r\n labelWidth: 150,\r\n name: \"dclhe\",\r\n id: \"dclhe\",\r\n required: true,\r\n invalidMessage: \"Địa chỉ không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thư điện tử: \",\r\n labelWidth: 150,\r\n name: \"dctdtu\",\r\n id: \"dctdtu\",\r\n validate: webix.rules.isEmail,\r\n required: true,\r\n invalidMessage: \"Thư điện tử không hợp lệ !\",\r\n },\r\n ],\r\n },\r\n\r\n { height: 5 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Theo nghị định số: 123/2020/NĐ-CP ngày 19 tháng 10 năm 2020 của Chính phủ, chúng tôi/tôi thuộc đối tượng sử dụng hóa đơn điện tử. Chúng tôi/tôi đăng ký/thay đổi thông tin đã đăng ký với cơ quan thuế về việc sử dụng hóa đơn điện tử như sau:\",\r\n },\r\n ],\r\n },\r\n { view: \"label\", label: \"1. Áp dụng hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdcma\",\r\n name: \"adhdcma\",\r\n labelRight: \"Có mã của cơ quan thuế\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n if (newv == 0) {\r\n if ($$(\"adhdmttcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n \r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if ($$(\"adhdmttcma\").getValue() == 1 && $$(\"adhdkma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n\r\n if (newv == 1 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1 && $$(\"adhdmttcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdkma\",\r\n name: \"adhdkma\",\r\n value: 1,\r\n labelRight: \"Không có mã của cơ quan thuế\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n\r\n if (newv == 0) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n if ($$(\"adhdmttcma\").getValue() == 1 && $$(\"adhdcma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n\r\n if (newv == 1 && ($$(\"adhdcma\").getValue() == 1 || $$(\"adhdmttcma\").getValue() == 1)) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdcma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdmttcma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n\r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"adhdmttcma\",\r\n name: \"adhdmttcma\",\r\n value: 1,\r\n labelRight: \"Có mã khởi tạo từ máy tính tiền\",\r\n labelWidth: 0,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n if ($$(\"adhdkma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n \r\n $$(\"htgdlhddtkma\").disable();\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").disable();\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").disable();\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n\r\n if ($$(\"adhdcma\").getValue() != 1 && $$(\"adhdkma\").getValue() != 1) {\r\n $$(\"hdbtscong\").disable();\r\n $$(\"hdbtscong\").setValue(0);\r\n $$(\"hdbhdtqgia\").disable();\r\n $$(\"hdbhdtqgia\").setValue(0);\r\n $$(\"qlnhdon\").disable();\r\n $$(\"qlnhdon\").setValue(0);\r\n }\r\n }\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n\r\n if (newv == 1 && $$(\"adhdkma\").getValue() == 1) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 1 && $$(\"adhdcma\").getValue() != 1) {\r\n $$(\"htgdlhddtcma\").disable();\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").disable();\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").disable();\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n }\r\n\r\n if (newv == 0 && $$(\"adhdkma\").getValue() == 0 && $$(\"adhdcma\").getValue() == 0) {\r\n $$(\"htgdlhddtcma\").enable();\r\n $$(\"htgdlhddtcmkkhan\").enable();\r\n $$(\"htgdlhddtcmkcncao\").enable();\r\n\r\n $$(\"htgdlhddtkma\").enable();\r\n $$(\"htgdlhddtkmttiep\").enable();\r\n $$(\"htgdlhddtkmtchuc\").enable();\r\n\r\n $$(\"hdbtscong\").enable();\r\n $$(\"hdbhdtqgia\").enable();\r\n $$(\"qlnhdon\").enable();\r\n }\r\n },\r\n },\r\n },\r\n { view: \"label\", id: \"label\", label: \"2. Hình thức gửi dữ liệu hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcma\",\r\n name: \"htgdlhddtcma\",\r\n labelRight: \"Trường hợp sử dụng hóa đơn điện tử có mã không phải trả tiền dịch vụ theo khoản 1 Điều 14 của nghị định:\",\r\n label: \"a. \",\r\n labelWidth: 10,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkkhan\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcmkkhan\",\r\n name: \"htgdlhddtcmkkhan\",\r\n labelRight:\r\n \"Doanh nghiệp nhỏ và vừa, hợp tác xã, cá nhân kinh doanh tại địa bàn có điều kiện kinh tế xã hội khó khăn, địa bàn có điều kiện kinh tế xã hội đặc biệt khó khăn.\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").setValue(1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtcmkcncao\",\r\n name: \"htgdlhddtcmkcncao\",\r\n labelRight:\r\n \"Doanh nghiệp nhỏ và vừa khác theo đề nghị của Ủy ban nhân dân tỉnh, thành phố trực thuộc trung ương gửi Bộ Tài chính trừ doanh nghiệp hoạt động tại các khu vực kinh tế, khu công nghiệp, khu công nghệ cao.\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(0);\r\n $$(\"htgdlhddtcma\").setValue(1);\r\n $$(\"htgdlhddtcmkcncao\").setValue(1);\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkma\",\r\n name: \"htgdlhddtkma\",\r\n labelRight:\r\n \"Trường hợp sử dụng hóa đơn điện tử không có mã của cơ quan thuế: (Chú ý: Trường hợp sử dụng hóa đơn có mã của cơ quan thuế không cần chọn mục này, hệ thống của cơ quan thuế mặc định hiểu gửi thông tin qua tổ chức cung cấp dịch vụ) \",\r\n label: \"b. \",\r\n labelWidth: 10,\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtcmkkhan\").setValue(0);\r\n $$(\"htgdlhddtcmkcncao\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(1);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkmttiep\",\r\n name: \"htgdlhddtkmttiep\",\r\n labelRight: \"Chuyển dữ liệu hóa đơn điện tử trực tiếp đến cơ quan thuế (điểm b1, khoản 3, Điều 22 của Nghị định).\",\r\n labelWidth: 50,\r\n value: 1,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(0);\r\n $$(\"htgdlhddtkmttiep\").setValue(1);\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"htgdlhddtkmtchuc\",\r\n name: \"htgdlhddtkmtchuc\",\r\n labelRight: \"Thông qua tổ chức cung cấp dịch vụ hóa đơn điện tử (điểm b2, khoản 3, Điều 22 của Nghị định).\",\r\n labelWidth: 50,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"htgdlhddtkma\").setValue(1);\r\n $$(\"htgdlhddtcma\").setValue(0);\r\n $$(\"htgdlhddtkmtchuc\").setValue(1);\r\n $$(\"htgdlhddtkmttiep\").setValue(0);\r\n }\r\n },\r\n },\r\n },\r\n\r\n { view: \"label\", label: \"3. Phương thức chuyển dữ liệu hóa đơn điện tử:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"ptcdlhdndthdon\",\r\n name: \"ptcdlhdndthdon\",\r\n labelRight: \"Chuyển đầy đủ nội dung từng hóa đơn\",\r\n value: 1,\r\n labelWidth: 50,\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"ptcdlhdndthdon\").setValue(1);\r\n // $$(\"ptcdlhdbthop\").setValue(0);\r\n // }\r\n // },\r\n // },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"ptcdlhdbthop\",\r\n name: \"ptcdlhdbthop\",\r\n labelRight: \"Chuyển theo bảng tổng hợp dữ liệu hóa đơn điện tử (điểm a1, khoản 3, Điều 22 của Nghị định)\",\r\n labelWidth: 50,\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // if (newv == 1) {\r\n // $$(\"ptcdlhdndthdon\").setValue(0);\r\n // $$(\"ptcdlhdbthop\").setValue(1);\r\n // }\r\n // },\r\n // },\r\n },\r\n\r\n { view: \"label\", label: \"4. Loại hóa đơn sử dụng:\" },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdgtgt\",\r\n name: \"hdgtgt\",\r\n labelRight: \"Hóa đơn GTGT\",\r\n value: 1,\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbhang\",\r\n name: \"hdbhang\",\r\n labelRight: \"Hóa đơn bán hàng\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbtscong\",\r\n name: \"hdbtscong\",\r\n labelRight: \"Hóa đơn bán tài sản công\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdbhdtqgia\",\r\n name: \"hdbhdtqgia\",\r\n labelRight: \"Hóa đơn bán hàng dự trữ quốc gia\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"hdkhac\",\r\n name: \"hdkhac\",\r\n labelRight: \"Hóa đơn khác (Tem, vé, thẻ, phiếu....)\",\r\n labelWidth: 50,\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"qlnhdon\",\r\n name: \"qlnhdon\",\r\n labelRight: \"Các chứng từ được in, phát hành, sử dụng và quản lý như hóa đơn (VD HĐ phiếu xuất kho,...)\",\r\n labelWidth: 50,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"5. Danh sách chứng thư số sử dụng:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n \r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: cert.issuer,\r\n seri: cert.cer_serial,\r\n tngay: cert.begin_date,\r\n dngay: cert.end_date,\r\n hthuc: \"1\",\r\n };\r\n $$(\"danhsach_chukyso\").add(item);\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetCTS_HSM_ToKhai\", function (result) {\r\n var ctsHSM = JSON.parse(result);\r\n\r\n if (ctsHSM.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: ctsHSM.error });\r\n } else {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: ctsHSM.issuer,\r\n seri: ctsHSM.so_serial,\r\n tngay: ctsHSM.ngaybatdau,\r\n dngay: ctsHSM.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n stt: $$(\"danhsach_chukyso\").count() + 1,\r\n ttchuc: json.data.issuer,\r\n seri: json.data.so_serial,\r\n tngay: json.data.ngaybatdau,\r\n dngay: json.data.ngayketthuc,\r\n hthuc: \"1\",\r\n };\r\n\r\n // $$(\"danhsach_chukyso\").clearAll();\r\n $$(\"danhsach_chukyso\").add(item);\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_chukyso\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_chukyso\",\r\n height: 250,\r\n name: \"danhsach_chukyso\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttchuc\",\r\n name: \"ttchuc\",\r\n header: \"Tên tổ chức cơ quan chứng thực/cấp/công nhận chữ ký số, chữ ký điện tử\",\r\n width: 450,\r\n },\r\n {\r\n id: \"seri\",\r\n name: \"seri\",\r\n header: \"Số sê-ri chứng thư số\",\r\n width: 300,\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 200,\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"hthuc\",\r\n name: \"hthuc\",\r\n header: \"Hình thức đăng ký ( Thêm mới, Gia hạn, ngừng sử dụng)\",\r\n fillspace: true,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Thêm mới\" },\r\n { id: \"2\", value: \"Gia hạn\" },\r\n { id: \"3\", value: \"Ngừng sử dụng\" },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 10 },\r\n {\r\n view: \"combo\",\r\n label: \"Loại đăng ký ủy nhiệm\",\r\n id: \"ldkunhiem\",\r\n name: \"ldkunhiem\",\r\n labelWidth: 150,\r\n options: [\r\n { id: 1, value: \"Ủy nhiệm\" },\r\n { id: 2, value: \"Nhận ủy nhiệm\" },\r\n ],\r\n width: 400,\r\n },\r\n { height: 10 },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"6. Đăng ký ủy nhiệm lập hóa đơn:\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" Thêm\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var item = {\r\n stt: $$(\"danhsach_uynhiem\").count() + 1,\r\n tlhdunhiem: \"\",\r\n khmhdon: \"\",\r\n khhdunhiem: \"\",\r\n mstunhiem: \"\",\r\n ttcdunhiem: \"\",\r\n mdunhiem: \"\",\r\n thunhiem: \"\",\r\n tngay: new Date(),\r\n dngay: new Date(),\r\n pttthdunhiem: 1,\r\n ket_qua: 0,\r\n };\r\n // $$(\"danhsach_uynhiem\").clearAll();\r\n $$(\"danhsach_uynhiem\").add(item);\r\n\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n\r\n return;\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" Xóa\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_uynhiem\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n\r\n if (table.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n\r\n if (table.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_uynhiem\",\r\n height: 250,\r\n name: \"danhsach_uynhiem\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n scroll: true,\r\n fullscreen: true,\r\n scheme: {\r\n $init: function (obj) {\r\n obj.tngay = new Date(obj.tngay);\r\n obj.dngay = new Date(obj.dngay);\r\n },\r\n },\r\n on: {},\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"tlhdunhiem\",\r\n name: \"tlhdunhiem\",\r\n header: \"Tên loại hóa đơn ủy nhiệm\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khmhdon\",\r\n name: \"khmhdon\",\r\n header: \"Ký hiệu mẫu hóa đơn\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khhdunhiem\",\r\n name: \"khhdunhiem\",\r\n header: \"Ký hiệu hóa đơn ủy nhiệm\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mstunhiem\",\r\n name: \"mstunhiem\",\r\n header: \"Mã số thuế\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ttcdunhiem\",\r\n name: \"ttcdunhiem\",\r\n header: \"Tên tổ chức được ủy nhiệm\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mdunhiem\",\r\n name: \"mdunhiem\",\r\n header: \"Mục đích ủy nhiệm\",\r\n width: 300,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"tngay\",\r\n name: \"tngay\",\r\n header: [\r\n {\r\n text: \"Thời hạn sử dụng chứng thư số\",\r\n colspan: 2,\r\n },\r\n {\r\n text: \"Từ ngày\",\r\n },\r\n ],\r\n width: 150,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"dngay\",\r\n name: \"dngay\",\r\n header: [\r\n null,\r\n {\r\n text: \"Đến ngày\",\r\n },\r\n ],\r\n width: 150,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"pttthdunhiem\",\r\n name: \"pttthdunhiem\",\r\n header: \"PTTT hóa đơn ủy nhiệm\",\r\n fillspace: true,\r\n editor: \"text\",\r\n //editor: \"combo\",\r\n // options: [\r\n // { id: 1, value: \"Tiền mặt\" },\r\n // { id: 2, value: \"Chuyển khoản\" },\r\n // { id: 3, value: \"Tiền mặt/Chuyển khoản\" },\r\n // { id: 4, value: \"Đối trừ công nợ\" },\r\n // { id: 5, value: \"Không thu tiền\" },\r\n // { id: 9, value: \"Khác\" },\r\n // ],\r\n width: 150,\r\n },\r\n {\r\n id: \"ket_qua\",\r\n name: \"ket_qua\",\r\n header: \"Kết quả\",\r\n fillspace: true,\r\n format: function (text) {\r\n var result = \"\";\r\n if (text == 0) {\r\n result = \"Chờ phản hồi\";\r\n } else if (text == 1) {\r\n result = \"Chấp nhận\";\r\n } else if (text == 2) {\r\n result = \"Không chấp nhận\";\r\n }\r\n return result;\r\n },\r\n width: 150,\r\n },\r\n ],\r\n rules: {\r\n tlhdunhiem: webix.rules.isNotEmpty,\r\n khmhdon: webix.rules.isNotEmpty,\r\n khhdunhiem: webix.rules.isNotEmpty,\r\n mstunhiem: webix.rules.isNotEmpty,\r\n ttcdunhiem: webix.rules.isNotEmpty,\r\n mdunhiem: webix.rules.isNotEmpty,\r\n tngay: webix.rules.isNotEmpty,\r\n dngay: webix.rules.isNotEmpty,\r\n pttthdunhiem: webix.rules.isNotEmpty,\r\n },\r\n ready: function () {\r\n var tableUyNhiem = webix.$$(\"danhsach_uynhiem\");\r\n if (tableUyNhiem.count() == 0) {\r\n $$(\"ldkunhiem\").define(\"required\", false);\r\n $$(\"ldkunhiem\").refresh();\r\n } else {\r\n $$(\"ldkunhiem\").define(\"required\", true);\r\n $$(\"ldkunhiem\").define(\"invalidMessage\", \"Loại đăng ký ủy nhiệm không được để trống !\");\r\n $$(\"ldkunhiem\").refresh();\r\n }\r\n },\r\n },\r\n ],\r\n },\r\n { height: 5 },\r\n {\r\n css: \"fixbottom\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Ghi (F10)\",\r\n id: \"btnDKSDSave1\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"dangkysudung\").getValues();\r\n var table = $$(\"dangkysudung\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_chukyso\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa đăng ký chữ ký số cho thông báo phát hành !\", \"error\");\r\n return;\r\n }\r\n if (!$$(\"danhsach_uynhiem\").validate()) {\r\n webix.message(\"Bạn chưa nhập đầy đủ thông tin ủy nhiệm hóa đơn !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_chukyso\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var uynhiems = [];\r\n uynhiems.push({ data: $$(\"danhsach_uynhiem\").serialize() });\r\n item[\"uynhiems\"] = uynhiems;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/dangkysudungSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"dangkysudungForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"dangkysudungForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n { height: 25 },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"dtlhe\").setValue(json[0].tel);\r\n $$(\"dctdtu\").setValue(json[0].email);\r\n $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n // item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n // if (editmode == 2) {\r\n\r\n // }\r\n\r\n var tableDetail = webix.$$(\"danhsach_chukyso\");\r\n var url = app.config.host + \"/Invoice68/GetDataDangkysudungDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n\r\n var tableUyNhiem = webix.$$(\"danhsach_uynhiem\");\r\n var urlUyNhiem = app.config.host + \"/Invoice68/GetDataDangkysudungUyNhiem?id=\" + item.id;\r\n tableUyNhiem.clearAll();\r\n tableUyNhiem.load(urlUyNhiem);\r\n },\r\n // $oninit: function (view, $scope) {\r\n // var url = app.config.host + \"/Invoice68/getDangkysudung\";\r\n\r\n // webix.ajax(url, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // $$(\"dangkysudung\").setValues(json);\r\n // $$(\"danhsach_chukyso\").parse(json[\"data\"]);\r\n // });\r\n // }\r\n };\r\n});\r\n\ndefine('views/68_dangkysudung',[\"app\", \"locale\", \"models/user\", \"views/forms/68_dangkysudung\", \"views/forms/68_hoadon_history\"], function (app, _, user, dangkysudung, hoadonHistory) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Đăng ký/ Thay đổi thông tin SD HDDT\",\r\n details: \"Đăng ký/ Thay đổi thông tin SD HDDT\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataDkysdung01\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n dangkysudung.setEditMode(1);\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký cần sửa ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Đã gửi CQT không thể sửa\", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(dangkysudung.$ui);\r\n\r\n dangkysudung.setEditMode(2);\r\n dangkysudung.setValues(selectedItem);\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"dangkysudung\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n // $$(\"btnDKSDSave\").destructor();\r\n $$(\"btnDKSDSave1\").destructor();\r\n }\r\n\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Thông báo đã được ký và gửi CQT. Bạn không thể thực hiện chức năng này ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau01\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Ký và gửi CQT (F7)\") + \"\",\r\n id: \"btnPreview\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"dangkysudung01Views\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu đăng ký ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã được ký và gửi đi, bạn không thể ký lại ! \", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n mau01_id: selectedItem.id,\r\n };\r\n\r\n if (postData.mau01_id == undefined || postData.mau01_id == \"\") {\r\n webix.message(\"Bạn chưa ghi dữ liệu, không thể ký và gửi đi !\", \"error\");\r\n return;\r\n } else {\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignDangkysudung\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n } else {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"dangkysudung01Views\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") { // ký HSM\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n mau01_id: selectedItem.id\r\n };\r\n\r\n var url = app.config.host + \"/Invoice68/SignDangkysudung_HSM\";\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n }\r\n else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n }\r\n else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau01?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau01\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangeDangkysudung68\", [1, null]);\r\n\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"dangkysudung01Views\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau01?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau01.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRep: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ket_qua == null || record.ket_qua == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau02?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau02.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n btndowloadXMLRepTiepNhan: function (event, cell, target) {\r\n var win = webix.$$(\"dangkysudung01Views\");\r\n var record = win.getItem(cell.row);\r\n if (record.ketqua_tiepnhan == null || record.ketqua_tiepnhan == \"\") {\r\n webix.message(\"Mẫu chưa được CQT trả về không thể tải !\", \"error\");\r\n return;\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau03?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"Mau03.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n // return false; // here it blocks the default behavior\r\n },\r\n InMau01: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau01?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau02: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n if (item.ket_qua == 3) {\r\n webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau02?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau03: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau03?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: [{ text: \"Mẫu 01ĐKTK/HĐĐT - Tờ khai Đăng ký/thay đổi thông tin sử dụng HĐĐT\", colspan: \"6\" }, \"STT\"],\r\n width: 40,\r\n },\r\n // {\r\n // id: \"mtdiep_gui\",\r\n // header: [\"\", \"Mã thông điệp\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\"\", \"Ngày gửi\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"noi_dung\",\r\n header: [\"\", \"Nội dung\"],\r\n width: 250,\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"\", \"Lịch sử xử lý\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"btndowload\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau01\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n header: [\"\", \"Người gửi\"],\r\n width: 200,\r\n },\r\n {\r\n id: \"ketqua_tiepnhan\",\r\n header: [{ text: \"Mẫu 01/TB-TNĐT - Thông tin tiếp nhận tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 300,\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan == 1) {\r\n return \"Tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 2) {\r\n return \"Không tiếp nhận tờ khai đăng ký \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 3) {\r\n return \"Tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 4) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n if (obj.ketqua_tiepnhan == 0) {\r\n return \"Không tiếp nhận tờ khai đăng ký thay đổi \";\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"lydo_tiepnhan\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao_tiepnhan\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRepTiepNhan\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau03\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ketqua_tiepnhan != null && obj.ketqua_tiepnhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n // {\r\n // id: \"mtdiep_tiepnhan_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n {\r\n id: \"ket_qua\",\r\n header: [{ text: \"Mẫu 01/TB-ĐKĐT - Thông tin chấp nhận Tờ khai của Cơ quan Thuế\", colspan: \"5\" }, \"Kết quả\"],\r\n width: 200,\r\n template: function (obj) {\r\n if (obj.ket_qua == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n if (obj.ket_qua == 3) {\r\n return \"Đã phản hồi kết quả \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n }\r\n },\r\n },\r\n {\r\n id: \"ly_do\",\r\n header: [\"\", \"Lý do\"],\r\n width: 300,\r\n },\r\n {\r\n id: \"ngay_tbao\",\r\n header: [\"\", \"Ngày thông báo\"],\r\n width: 200,\r\n css: { \"text-align\": \"center\" },\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"btndowloadXMLRep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n {\r\n id: \"btnInMau02\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.ket_qua != null && obj.ket_qua != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 60,\r\n },\r\n // {\r\n // id: \"mtdiep_cqt\",\r\n // header: [\"\", \"Mã thông điệp CQT\"],\r\n // width: 350,\r\n // },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"dangkysudung01Views\");\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangeDangkysudung68\", function (mode, item) {\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_lichsu_history',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Lịch sử xử lý
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
LỊCH SỬ XỬ LÝ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n // height: 250,\r\n //name: \"danhsach_history\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scroll: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if(hdon_id != \"\"){\r\n var url = app.config.host + \"/Invoice68/GetHistoryTruyenNhan_ChiTiet?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n }\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n var file = new Blob([record.xml_thongdiep], {type: \"application/xml\"});\r\n webix.html.download(file, \"file.xml\");\r\n }\r\n },\r\n columns: [\r\n {\r\n id: \"tg_gui\",\r\n header: [\"
Thời gian gửi
\"],\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if(test !== null && test !== 'null') {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return '';\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"mngui_ft\",\r\n header: [\"
Mã nơi gửi
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n header: [\"
Mã loại thông điệp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"
Mã thông điệp
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },{\r\n\r\n id: \"mtdiep_thamchieu\",\r\n header: [\"
Mã thông điệp tham chiếu
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"xml_thongdiep\",\r\n header: [\"
Xml thông điệp
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mnnhan\",\r\n header: [\"
Mã nơi nhận
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tg_nhan\",\r\n header: [\"
Thời gian nhận
\"],\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"vendor\",\r\n header: [\"
Tên giải pháp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mngui\",\r\n header: [\"
Mã số thuế
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n }\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_hoadon_history_view',[\"app\", \"locale\", \"models/user\", \"views/forms/68_lichsu_history\"], function (app, _, user, hoadonHistory) {\r\n \r\n webix.$$(\"title\").parse({ title: \"Lịch sử truyền nhận\", details: \"Lịch sử truyền nhận\" });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"truyenhanview\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scroll: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHistoryTruyenNhan\";\r\n\r\n var tlbParams = $$(\"param\");\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch;\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count;\r\n }\r\n\r\n var tlbParams = $$(\"param\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n var format = webix.Date.dateToStr(\"%Y-%m-%d\");\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n switch (id) {\r\n case \"filter\":\r\n url = url + \"&filter=\" + $$(id).getValue();\r\n break;\r\n case \"tggui_tu\":\r\n url = url + \"&tggui_tu=\" + format($$(id).getValue());\r\n break;\r\n case \"tggui_den\":\r\n url = url + \"&tggui_den=\" + format($$(id).getValue());\r\n break;\r\n case \"check_error\":\r\n url = url + \"&check_error=\" + $$(id).getValue();\r\n break;\r\n }\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n dowloadXmlDKSD: function (event, cell, target) {\r\n var win = webix.$$(\"truyenhanview\");\r\n var record = win.getItem(cell.row);\r\n var file = new Blob([record.xml_thongdiep], { type: \"application/xml\" });\r\n webix.html.download(file, \"file.xml\");\r\n },\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"truyenhanview\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var record = table.getItem(cell.row);\r\n var historyid = record.reg_id;\r\n hoadonHistory.setEditMode(historyid);\r\n win.show();\r\n },\r\n /*ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"truyenhanview\");\r\n var record = win.getItem(cell.row);\r\n var historyid = record.reg_id;\r\n hoadonHistory.setEditMode(historyid);\r\n hoadonHistory.show();\r\n },*/\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 50 },\r\n {\r\n id: \"tg_gui\",\r\n header: [\"
Thời gian gửi
\"],\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"mngui_ft\",\r\n header: [\"
Mã nơi gửi
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: \"Lịch sử\",\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mltdiep_gui\",\r\n header: [\"
Mã loại thông điệp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"
Mã thông điệp
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"mtdiep_thamchieu\",\r\n header: [\"
Mã thông điệp tham chiếu
\"],\r\n width: 300,\r\n columnType: \"xml\",\r\n },\r\n {\r\n id: \"xml_thongdiep\",\r\n header: [\"
Xml thông điệp
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mnnhan\",\r\n header: [\"
Mã nơi nhận
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tg_nhan\",\r\n header: [\"
Thời gian nhận
\"],\r\n width: 250,\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"vendor\",\r\n header: [\"
Tên giải pháp
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"mngui\",\r\n header: [\"
Mã số thuế
\"],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"param\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"filter\",\r\n view: \"text\",\r\n label: \"TK nhanh\",\r\n width: 350,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"tggui_tu\",\r\n view: \"datepicker\",\r\n label: \"Gửi từ\",\r\n width: 200,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"tggui_den\",\r\n view: \"datepicker\",\r\n label: \"đến\",\r\n width: 200,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n id: \"check_error\",\r\n view: \"checkbox\",\r\n label: \"TĐ lỗi\",\r\n width: 120,\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: '' + _(\"Refresh\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"truyenhanview\");\r\n table.clearAll();\r\n var tlbParams = $$(\"param\");\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n if (id === \"filter\" || id === \"tggui_tu\" || id === \"tggui_den\" || id === \"check_error\") {\r\n $$(id).setValue(null);\r\n }\r\n //var value_field = child.config.value_field;\r\n }\r\n }\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: '' + _(\"Tìm kiếm\") + \"\",\r\n id: \"btnTimKiem\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"truyenhanview\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n };\r\n});\r\n\ndefine('views/forms/68_invoiceForms_code',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var mau04 = {};\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n function f(a) {\r\n return webix.Number.format(a, formatSoDefault);\r\n }\r\n function g(a) {\r\n return webix.Number.parse(a, formatSoDefault);\r\n }\r\n /*function fmNumber(a){\r\n if(a !== undefined)\r\n return f(a);\r\n return a;\r\n };*/\r\n var fmNumber = {\r\n parse: function (a) {\r\n return g(a);\r\n },\r\n edit: function (a) {\r\n if (a !== undefined) return f(a);\r\n return a;\r\n },\r\n };\r\n\r\n var mess = \"Tổng tiền chiết khấu lớn hơn tổng tiền hàng hóa thông thương trên hóa đơn. Vui lòng lập riêng hóa đơn chiết khấu mới.\";\r\n\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var decimal_place = Array(Number(arr[0][\"hoadon123\"]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][\"hoadon123\"]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n\r\n format_config.numericConfig = format_numeric;\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var format_config_phi = table_phi.getColumnConfig(\"tienphi\");\r\n format_config_phi.format = formatSo;\r\n format_config_phi.numericConfig = format_numeric;\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn 01GTGT
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlap\",\r\n label: \"Ngày hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"nlap\",\r\n required: true,\r\n // css: \"mcls_readonly_text\",\r\n // readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"VND\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"VND\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 120 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.renderFormat(newv);\r\n var type_curency = $$(\"dvtte\").getValue();\r\n\r\n if (type_curency != \"VND\") {\r\n $$(\"docngoaitetv\").show();\r\n $$(\"docngoaitetv\").setValue(1);\r\n } else {\r\n $$(\"docngoaitetv\").hide();\r\n }\r\n\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"docngoaitetv\",\r\n name: \"docngoaitetv\",\r\n value: 0,\r\n labelRight: _(\"Đọc ngoại tệ Tiếng Việt\"),\r\n labelWidth: 2,\r\n width: 180,\r\n hidden: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV(newv);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n value: \"Tiền mặt/Chuyển khoản\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người bán\"), name: \"stknban\", id: \"stknban\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhban\", id: \"tnhban\" },\r\n ],\r\n },\r\n {},\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã khách hàng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"code\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00002\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"invoiceForms\");\r\n var selectedItem = $$(\"invoiceForms\").getValues();\r\n\r\n selectedItem[\"mnmua\"] = obj[\"code\"];\r\n selectedItem[\"tnmua\"] = obj[\"buyer_name\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"dchi\"] = obj[\"address\"];\r\n selectedItem[\"mst\"] = obj[\"tax_code\"];\r\n selectedItem[\"email\"] = obj[\"email\"];\r\n selectedItem[\"stknmua\"] = obj[\"bank_account\"];\r\n table.setValues(selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n // var text = this.getValue();\r\n // var datapost = { masothue: text };\r\n // var table = $$(\"invoiceForms\");\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n // var json = JSON.parse(text);\r\n // table.enable();\r\n // table.hideProgress();\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // $$(\"inv_Invoice_sellerName\").setValue(json.ten_cty);\r\n // $$(\"inv_Invoice_sellerAdress\").setValue(json.dia_chi);\r\n // } else {\r\n // // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n // webix.message(json.error, \"error\", 1500);\r\n // }\r\n // });\r\n\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n {\r\n view: \"text\",\r\n label: _(\"Email\"),\r\n name: \"email\",\r\n id: \"email\",\r\n validate: function (value) {\r\n if (value) {\r\n var re = /\\S+@\\S+\\.\\S+/;\r\n return re.test(value);\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bạn nhập không đúng email\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Tên đơn vị\"),\r\n name: \"ten\",\r\n id: \"ten\",\r\n validate: function (value) {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item[\"mst\"] && item[\"mst\"] !== null && (!value || value === null)) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n invalidMessage: \"Bắt buộc khi có mã số thuế\",\r\n },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n { view: \"text\", label: _(\"Ngân hàng\"), name: \"tnhmua\", id: \"tnhmua\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số điện thoại\"),\r\n name: \"sdtnmua\",\r\n id: \"sdtnmua\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 300,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"\",\r\n width: 30,\r\n },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n selectedItem[\"tsuatstr\"] = obj[\"vat_name\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"combo\",\r\n //editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00019\",\r\n optionslist: true,\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n name: \"kmai\",\r\n header: _(\"Tính chất\"),\r\n width: 200,\r\n editor: \"combo\",\r\n editable: true,\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hàng hóa dịch vụ\" },\r\n { id: \"2\", value: \"Khuyến mại\" },\r\n { id: \"3\", value: \"Chiếu khấu thương mại\" },\r\n { id: \"4\", value: \"Ghi chú\" },\r\n ],\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n });\r\n },\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n var table = $$(this.config.id);\r\n 1;\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n /*if (columnId == \"tsuatstr\") {\r\n var tien_thue_str = selectedItem.tsuatstr;\r\n var re = /^([0-9]{1,2})(\\.[0-9]{1,2}){0,1}%$/;\r\n if (tien_thue_str === \"KCT\" || tien_thue_str === \"KKKNT\") pt_thue = 0;\r\n else if (tien_thue_str !== \"KHAC\") {\r\n var checkDD = re.test(tien_thue_str);\r\n if (!checkDD) {\r\n webix.message(\"Không đúng định dạng nhập phần trăm\");\r\n selectedItem.tsuatstr = state.old;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n return;\r\n } else {\r\n pt_thue = Number(tien_thue_str.replace(\"%\", \"\"));\r\n }\r\n }\r\n }*/\r\n tien_tt += tien_ck;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"tsuatstr\" ||\r\n columnId == \"kmai\" ||\r\n columnId == \"ma\"\r\n ) {\r\n if (item_note != \"reduce_change_invoice\") {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n }\r\n\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (!(item_note == \"reduce_change_invoice\") && don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n } else tien_tt = so_luong * don_gia;\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (!(item_note == \"reduce_change_invoice\") && tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n\r\n tien_thue = ((tien_tt - tien_ck) * (pt_thue < 0 ? 0 : pt_thue)) / 100;\r\n tong_tien = tien_tt - tien_ck + parseFloat(tien_thue);\r\n\r\n if (item_note == \"reduce_change_invoice\") {\r\n if (don_gia > 0) {\r\n don_gia = don_gia * -1;\r\n tien_tt = so_luong * don_gia;\r\n tien_ck = tien_ck * -1;\r\n tien_thue = tien_thue * -1;\r\n tong_tien = tong_tien * -1;\r\n }\r\n }\r\n }\r\n tien_tt -= tien_ck;\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n /*if(selectedItem.kmai.toString() !== \"3\"){\r\n }*/\r\n selectedItem.tgtien = tong_tien;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n if (selectedItem.kmai.toString() === \"2\") {\r\n //selectedItem.sluong = null;\r\n //selectedItem.dgia = null;\r\n //selectedItem.tsuat = null;\r\n //selectedItem.tsuatstr = null;\r\n selectedItem.thtien = 0;\r\n //selectedItem.tlckhau = null;\r\n //selectedItem.stckhau = null;\r\n selectedItem.tthue = 0;\r\n selectedItem.tgtien = 0;\r\n if (columnId == \"kmai\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n }\r\n table.updateItem(selectedItem.id, selectedItem);\r\n } else if (selectedItem.kmai.toString() === \"3\") {\r\n //selectedItem.tsuat = \"0\";\r\n //selectedItem.tsuatstr = \"0%\";\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n //selectedItem.tthue = 0;\r\n /*if(columnId !== \"tgtien\"){\r\n selectedItem.tgtien = selectedItem.thtien\r\n }*/\r\n } else if (selectedItem.kmai.toString() === \"4\") {\r\n selectedItem.sluong = null;\r\n selectedItem.dgia = null;\r\n selectedItem.tsuat = null;\r\n selectedItem.tsuatstr = null;\r\n selectedItem.thtien = null;\r\n selectedItem.tlckhau = null;\r\n selectedItem.stckhau = null;\r\n selectedItem.tthue = null;\r\n selectedItem.tgtien = null;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n var data = table.serialize();\r\n\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_k = 0;\r\n var tien_thue_k = 0;\r\n var tien_ck_k = 0;\r\n var tong_tien_k = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n if (entry.kmai && (entry.kmai.toString() === \"1\" || entry.kmai.toString() === \"3\")) {\r\n if (entry.kmai.toString() === \"1\") {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n } else {\r\n tien_tt_all -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n } else {\r\n tien_tt_k -= entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_k -= entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_k -= entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_k -= entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n }\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuek\").setValue(tien_tt_k);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaik\").setValue(tien_ck_k);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuek\").setValue(tien_thue_k);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsok\").setValue(tong_tien_k);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n\r\n //if ($$(\"tkcktmn\").getValue() != null && $$(\"tkcktmn\").getValue() != \"\") tong_tien_all -= Number($$(\"tkcktmn\").getValue());\r\n if ($$(\"tgtphi\").getValue() != null && $$(\"tgtphi\").getValue() != \"\") tong_tien_all += Number($$(\"tgtphi\").getValue());\r\n\r\n $$(\"tgtttbso_last\").setValue(tong_tien_all);\r\n var tien_chietkhauthuongmai = 0;\r\n data.forEach(function (entry) {\r\n if (entry[\"kmai\"] && entry[\"kmai\"].toString() == \"3\") {\r\n tien_chietkhauthuongmai += entry[\"tgtien\"] == null ? 0 : Number(entry[\"tgtien\"]);\r\n }\r\n });\r\n $$(\"tkcktmn\").setValue(tien_chietkhauthuongmai);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: {\r\n \"padding-bottom\": \"5px !important\",\r\n },\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n columns: [\r\n {\r\n id: \"tnphi\",\r\n name: \"tnphi\",\r\n header: _(\"Tên phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n\r\n editable: true,\r\n },\r\n {\r\n id: \"tienphi\",\r\n name: \"tienphi\",\r\n header: _(\"Tiền phí\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n ],\r\n on: {\r\n onAfterDelete: function (id) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n var tien_phi_moi = 0;\r\n data.forEach(function (entry) {\r\n tien_phi_moi += entry[\"tienphi\"] == null ? 0 : Number(entry[\"tienphi\"]);\r\n });\r\n $$(\"tgtphi\").setValue(tien_phi_moi);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất khác\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Thành tiền trước thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuek\", name: \"tgtcthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaik\", name: \"ttcktmaik\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {},\r\n {},\r\n {},\r\n ],\r\n },\r\n {\r\n rows: [\r\n {\r\n view: \"label\",\r\n label: \"Tiền thuế\",\r\n css: \"lblTongtien\",\r\n validate: function (value) {\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuek\", name: \"tgtthuek\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"label\", label: \"Chiết khấu thương mại\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Tổng tiền phí/lệ phí\", labelAlign: \"right\", labelPosition: \"top\" },\r\n { view: \"label\", label: \"Thành tiền\", labelAlign: \"right\", labelPosition: \"top\" },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n format: fmNumber,\r\n },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsok\", name: \"tgtttbsok\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: fmNumber, id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n {\r\n id: \"tkcktmn\",\r\n view: \"text\",\r\n editor: \"numeric\",\r\n labelWidth: 200,\r\n width: 600,\r\n format: fmNumber,\r\n name: \"tkcktmn\",\r\n /*on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu += Number(oldValue);\r\n if (tong_tien_cu > $$(\"tkcktmn\").getValue()) {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu - newValue);\r\n $$(\"tkcktmn\").setValue(newValue);\r\n } else {\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n }\r\n },\r\n },*/\r\n },\r\n {\r\n view: \"text\",\r\n format: fmNumber,\r\n id: \"tgtphi\",\r\n name: \"tgtphi\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newValue, oldValue, config) {\r\n var tong_tien_cu = 0;\r\n if ($$(\"tgtttbso_last\").getValue() != null && $$(\"tgtttbso\").getValue() != \"\") tong_tien_cu = Number($$(\"tgtttbso_last\").getValue());\r\n if (oldValue != null && oldValue != \"\") tong_tien_cu -= Number(oldValue);\r\n tong_tien_cu += Number(newValue);\r\n $$(\"tgtttbso_last\").setValue(tong_tien_cu);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso_last\",\r\n name: \"tgtttbso_last\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n commonHD.ExeCuteCheckReadCurencyTV($$(\"docngoaitetv\").getValue());\r\n },\r\n },\r\n validate: function (value) {\r\n var table_inv_views = webix.$$(\"invoiceViews\");\r\n var item_inv = table_inv_views.getSelectedItem();\r\n var item_note = \"\";\r\n if (item_inv != undefined && item_inv.hasOwnProperty(\"note\") == true) {\r\n item_note = item_inv.note ? item_inv.note : \"\";\r\n }\r\n if (item_note == \"reduce_change_invoice\") return true;\r\n if (Number(value) > 0 || Number(value) === 0) {\r\n return true;\r\n }\r\n webix.message(mess, \"error\");\r\n return false;\r\n },\r\n invalidMessage: mess,\r\n format: fmNumber,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n width: 140,\r\n label: \"Đọc tiền bằng chữ:\",\r\n css: { \"font-weight\": \"bold\", \"padding-left\": \"5px\" },\r\n height: 22,\r\n },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnHoadonSaveMau04\",\r\n hidden: true,\r\n label: \"Ký và gửi CQT\",\r\n align: \"center\",\r\n type: \"form\",\r\n width: 120,\r\n click: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var tableHoadon = $$(\"invoiceForms\");\r\n\r\n if (tableHoadon.validate()) {\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa nhập chi tiết hóa đơn\", \"error\");\r\n return;\r\n } else {\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n var t = webix.$$(\"invoiceViews\");\r\n var k = t.getSelectedItem();\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n item[\"tthdon\"] = 2;\r\n item[\"hdon68_id_lk\"] = k.id;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n data_post.mau04 = mau04;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n // console.log(data_post);\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoi\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.extend(tableHoadon, webix.ProgressBar);\r\n tableHoadon.disable();\r\n tableHoadon.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyHoadonTaomoiUSB\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.idMau04);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n // tblInvoice.enable();\r\n // tblInvoice.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.idMau04,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"invoice68\").close();\r\n $$(\"huyhoadonForms\").close();\r\n\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n }\r\n });\r\n }\r\n tableHoadon.enable();\r\n tableHoadon.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"invoice68\").close();\r\n // $$(\"huyhoadonForms\").close();\r\n\r\n // app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n // hóa đơn có mã\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it.ten == null || it.ten == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if (it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var _res = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!_res.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, _res.data]);\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(_res.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat();\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n form.setValues(item);\r\n this.getFormat();\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n commonHD.renderFormat(val);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Thông báo sai sót hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n // fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
THÔNG BÁO SAI SÓT HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"Tên cơ quan thuế quản lý\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n console.log(obj);\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n //required: true,\r\n //invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n label: \"Loại TBSS\",\r\n labelWidth: 150,\r\n id: \"tctbao_all\",\r\n name: \"tctbao_all\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { tctbao: newv }); \r\n }\r\n \r\n }\r\n }\r\n },\r\n {\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Lý do\",\r\n labelWidth: 150,\r\n id: \"ldo_all\",\r\n name: \"ldo_all\",\r\n on: {\r\n onblur: function () {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { ldo: this.getValue()}); \r\n }\r\n \r\n }\r\n }\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n {\r\n template: \"Người nộp thuế thông báo về việc hủy/điều chỉnh/thay thế/giải trình hóa đơn điện tử do sai sót như sau:\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n // block editors in 'year' column\r\n return false;\r\n } else if (id.column == \"khieu\") {\r\n return false;\r\n } else if (id.column == \"shdon\") {\r\n return false;\r\n } else if (id.column == \"ladhddt\") {\r\n return false;\r\n } else if (id.column == \"ngay\") {\r\n return false;\r\n } else if (id.column == \"huygiaitrinh\") {\r\n return false;\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"mcqtcap\",\r\n name: \"mcatcap\",\r\n header: \"Mã cơ quan thuế cấp\",\r\n width: 150,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu hóa đơn điện tử\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: _(\"khieu\"), width: 120, header: \"khieu\" },\r\n { id: _(\"shdon\"), width: 350, header: \"shdon\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=29f51d47-8bf6-4b32-a679-52e75b8cacc8\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"shdon\"] = obj[\"shdon\"];\r\n selectedItem[\"ngay\"] = obj[\"nlap\"];\r\n selectedItem[\"huygiaitrinh\"] = 1;\r\n selectedItem[\"hdon_id\"] = obj[\"hdon_id\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 200,\r\n editor: \"text\",\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n options: [\r\n // { id: \"1\", value: \"HĐĐT Nghị đinh số 119/2018\" },\r\n { id: \"1\", value: \"HĐĐT Nghị đinh số 123/2020/NĐ-CP\" },\r\n { id: \"2\", value: \"HĐĐT có mã của cơ quan thuế\" },\r\n { id: \"3\", value: \"Các loại hóa đơn theo Nghị đinh 51/2010\" },\r\n { id: \"4\", value: \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n //{ id: \"2\", value: \"Điều chỉnh\" },\r\n // { id: \"2\", value: \"Hủy có lập hóa đơn thay thế\" },\r\n // { id: \"3\", value: \"Hủy không lập hóa đơn thay thế\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n // { id: \"8\", value: \"Điều chỉnh thông tin không tạo mới hóa đơn\" },\r\n ],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnStep299\",\r\n label: \"Lưu, chuyển sang bước tiếp theo\",\r\n type: \"form\",\r\n hidden: true,\r\n align: \"center\",\r\n click: function () {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var detailForm = self.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = webix.$$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(null, data_post, null);\r\n detailForm.show();\r\n }, 100);\r\n\r\n // $$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiHuyhoadon\",\r\n label: \"Ghi (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký và gửi CQT (F14)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n } \r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnSaveSignGiaiTrinh\",\r\n label: \"Ký và gửi CQT\",\r\n width: 150,\r\n hidden: true,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/giaitrinhSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 1,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n // $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt_ql);\r\n $$(\"ddanh\").setValue(json[0].city);\r\n $$(\"mcqt\").setValue(json[0].manage_tax_authorities);\r\n console.log(json);\r\n // $$(\"dctdtu\").setValue(json[0].email);\r\n // $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_mau04form',[\"app\", \"models/user\"], function (app, user) {\r\n var controls = {\r\n cols: [\r\n {\r\n view: \"icon\",\r\n icon: \"plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsachhoadonhuy\");\r\n table.add({});\r\n },\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsachhoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var controls2 = {\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n type: \"form\",\r\n label: \"Lưu và Chuyển bước 2 (F10)\",\r\n shortcut: \"F10\",\r\n width: 200,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"formView\");\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n type: \"danger\",\r\n label: \"Thoát (ESC)\",\r\n hotkey: \"esc\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ],\r\n };\r\n\r\n var table = {\r\n id: \"danhsachhoadonhuy\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: true,\r\n tooltip: true,\r\n height: 200,\r\n scheme: {},\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu mẫu hóa đơn và ký hiệu hóa đơn\",\r\n width: 200,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: webix.i18n.dateFormatStr,\r\n editor: \"date\",\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Giải trình\",\r\n width: 180,\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 180,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n };\r\n\r\n var pagination = {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n };\r\n\r\n var ui = {\r\n id: \"infoView\",\r\n margin: 0,\r\n rows: [\r\n controls,\r\n table,\r\n pagination,\r\n {\r\n height: 10,\r\n },\r\n controls2,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_huyhoadonchitietform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var table = {\r\n id: \"hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {},\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu mẫu hóa đơn và ký hiệu hóa đơn\",\r\n width: 200,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"tdlap\",\r\n name: \"tdlap\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: webix.i18n.dateFormatStr,\r\n editor: \"date\",\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Giải trình\",\r\n width: 180,\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 180,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n };\r\n\r\n var buttons = {\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F8\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"save\",\r\n label: \"Lưu tạm (F8)\",\r\n width: 120,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F9\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"signal\",\r\n label: \"Ký chờ xử lý (F9)\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n type: \"icon\",\r\n icon: \"paper-plane\",\r\n view: \"button\",\r\n label: \"Ký và gửi CQT (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n label: \"Kết xuất mẫu 04 (F11)\",\r\n type: \"icon\",\r\n icon: \"file-export\",\r\n width: 150,\r\n align: \"center\",\r\n on: {\r\n onClick: function () {},\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"icon\",\r\n icon: \"ban\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n };\r\n\r\n var ui = {\r\n id: \"previewView\",\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n height: 600,\r\n view: \"template\",\r\n id: \"pdfViewInfoOld\",\r\n },\r\n {\r\n height: 600,\r\n view: \"template\",\r\n id: \"pdfViewInfoNew\",\r\n },\r\n ],\r\n },\r\n buttons,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1/68_hoadonform',[\"app\", \"models/user\", \"locale\"], function (app, user, _) {\r\n var header = {\r\n view: \"template\",\r\n template: \"Hóa đơn gia trị gia tăng (01GTKT)\",\r\n type: \"header\",\r\n };\r\n\r\n var master = {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"tdlap\",\r\n view: \"datepicker\",\r\n label: \"Ngày hóa đơn\",\r\n labelWidth: 100,\r\n name: \"tdlap\",\r\n },\r\n {\r\n id: \"shdon\",\r\n view: \"text\",\r\n label: \"Số hóa đơn\",\r\n labelWidth: 100,\r\n name: \"shdon\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tmau\",\r\n view: \"text\",\r\n label: \"Mẫu hóa đơn\",\r\n labelWidth: 100,\r\n name: \"tmau\",\r\n },\r\n {\r\n id: \"khieu\",\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n labelWidth: 100,\r\n name: \"khieu\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"dvtte\",\r\n view: \"text\",\r\n label: \"Mã tiền tệ\",\r\n labelWidth: 100,\r\n name: \"dvtte\",\r\n },\r\n {\r\n id: \"tgia\",\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n labelWidth: 100,\r\n name: \"tgia\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"htttoan\",\r\n view: \"combo\",\r\n label: \"HT thanh toán\",\r\n labelWidth: 100,\r\n name: \"htttoan\",\r\n },\r\n {\r\n id: \"sdhang\",\r\n view: \"text\",\r\n label: \"Số đơn hàng\",\r\n labelWidth: 100,\r\n name: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"stknban\",\r\n view: \"text\",\r\n label: \"STK bên bán\",\r\n labelWidth: 100,\r\n name: \"stknban\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n width: 10,\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"mst\",\r\n view: \"search\",\r\n labelWidth: 110,\r\n label: \"Mã số thuế\",\r\n name: \"mst\",\r\n },\r\n {\r\n id: \"mnmua\",\r\n view: \"gridsuggest\",\r\n label: \"Mã đối tượng\",\r\n labelWidth: 110,\r\n width: 300,\r\n name: \"mnmua\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tnmua\",\r\n view: \"text\",\r\n name: \"tnmua\",\r\n label: \"Tên người mua\",\r\n labelWidth: 110,\r\n },\r\n {\r\n id: \"email\",\r\n view: \"text\",\r\n labelWidth: 110,\r\n label: \"Email\",\r\n name: \"email\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"ten\",\r\n view: \"text\",\r\n name: \"ten\",\r\n label: \"Tên đơn vị\",\r\n labelWidth: 110,\r\n },\r\n {\r\n id: \"dchi\",\r\n view: \"text\",\r\n labelWidth: 110,\r\n label: \"Địa chỉ\",\r\n name: \"dchi\",\r\n },\r\n {\r\n id: \"stknmua\",\r\n view: \"text\",\r\n label: \"STK người mua\",\r\n labelWidth: 110,\r\n name: \"stknmua\",\r\n },\r\n {\r\n id: \"mccqthue\",\r\n view: \"combo\",\r\n label: \"Cơ quan thuế\",\r\n labelWidth: 110,\r\n name: \"mccqthue\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var detail = {\r\n borderless: true,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n view: \"tabview\",\r\n id: \"tab_replace\",\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn (01GTKT)\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"icon\",\r\n icon: \"plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"chitiethoadon\");\r\n table.add({});\r\n },\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"chitiethoadon\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"chitiethoadon\",\r\n height: 220,\r\n name: \"chitiethoadon\",\r\n resizeColumn: true,\r\n footer: false,\r\n editable: true,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"cthdon_id\",\r\n name: \"cthdon_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"hdon_id\",\r\n name: \"hdon_id\",\r\n hidden: true,\r\n },\r\n {\r\n width: 120,\r\n id: \"choose\",\r\n header: \"Chọn\",\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function () {\r\n return \"\";\r\n },\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ma\",\r\n name: \"ma\",\r\n header: \"Mã hàng\",\r\n width: 150,\r\n editor: \"combo\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n body: {\r\n url: null,\r\n columns: [\r\n {\r\n id: \"ma\",\r\n header: \"Mã hàng hóa\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ten\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n },\r\n ],\r\n dataFeed: function (filtervalue, filter) {},\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {},\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n name: \"Tên hàng hóa\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n name: \"mdvtinh\",\r\n header: \"ĐVT\",\r\n width: 150,\r\n editor: \"combo\",\r\n suggest: {\r\n view: \"gridsuggest\",\r\n body: {\r\n url: null,\r\n columns: [\r\n {\r\n id: \"ten\",\r\n header: \"Tên ĐVT\",\r\n width: 150,\r\n },\r\n ],\r\n dataFeed: function (filtervalue, filter) {},\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {},\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n name: \"sluong\",\r\n header: \"Số lượng\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n {\r\n id: \"dgia\",\r\n name: \"dgia\",\r\n header: \"Đơn giá\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"thtien\",\r\n name: \"thtien\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tlckhau\",\r\n name: \"tlckhau\",\r\n header: \"% CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"stckhau\",\r\n name: \"stckhau\",\r\n header: \"Tiền CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tsuat\",\r\n name: \"tsuat\",\r\n header: \"Thuế suất\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"combo\",\r\n options: null,\r\n },\r\n\r\n {\r\n id: \"tthue\",\r\n name: \"tthue\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tgtien\",\r\n name: \"tgtien\",\r\n header: \"Tiền sau thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var totalFooter = {\r\n rows: [\r\n {\r\n view: \"treetable\",\r\n autoheight: true,\r\n autowidth: true,\r\n columns: [\r\n {\r\n id: \"value\",\r\n header: \"Loại thuế\",\r\n width: 250,\r\n template: \"{common.icon()} #value#\",\r\n },\r\n {\r\n id: \"ttthue_total\",\r\n header: \"Thành tiền trước thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tckhau_total\",\r\n header: \"Tiền chiết khấu\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"tthue_total\",\r\n header: \"Tiền thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n {\r\n id: \"ttsthue_total\",\r\n header: \"Tiền thuế\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n },\r\n ],\r\n data: [\r\n {\r\n id: \"1\",\r\n value: \"Tổng cộng hàng hóa dịch vụ\",\r\n open: true,\r\n ttthue_total: 3000000,\r\n tckhau_total: 500000,\r\n tthue_total: 100000,\r\n ttsthue_total: 3100000,\r\n data: [\r\n {\r\n id: \"1.1\",\r\n value: \"Thuế suất 0%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 1000000,\r\n },\r\n {\r\n id: \"1.2\",\r\n value: \"Thuế suất 5%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 50000,\r\n ttsthue_total: 1050000,\r\n },\r\n {\r\n id: \"1.3\",\r\n value: \"Thuế suất 10%\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 500000,\r\n tthue_total: 50000,\r\n ttsthue_total: 1050000,\r\n },\r\n {\r\n id: \"1.4\",\r\n value: \"Không chịu thuế GTGT\",\r\n ttthue_total: 1000000,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"1.5\",\r\n value: \"Không kê thai, tính nộp thuế GTGT\",\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n ],\r\n },\r\n {\r\n id: \"2\",\r\n value: \"Tổng cộng phí lệ phí\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"3\",\r\n value: \"Tổng cộng thanh toán\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n {\r\n id: \"4\",\r\n value: \"Đọc tiền bằng chữ\",\r\n open: true,\r\n ttthue_total: 0,\r\n tckhau_total: 0,\r\n tthue_total: 0,\r\n ttsthue_total: 0,\r\n },\r\n ],\r\n },\r\n {\r\n id: \"amount_to_word_inv_invoiceauth\",\r\n view: \"text\",\r\n label: \"Đọc tiền bằng chữ\",\r\n labelWidth: 150,\r\n name: \"amount_to_word\",\r\n },\r\n ],\r\n };\r\n\r\n var controls = {\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: \"Chuyển đến giai đoạn 3\",\r\n width: 200,\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"previewView\");\r\n var win = webix.$$(\"previewView\");\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = \"http://localhost:18374/hopdong/printhopdong?id=b9496ff0-360d-4852-8153-4b3c54fbe167&type=pdf\";\r\n webix.ajax().get(url, function (response) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([response], {\r\n type: \"application/pdf\",\r\n });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var builder = '';\r\n\r\n $$(\"pdfViewInfo\").setHTML(builder);\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n $$(\"tabbar\").setValue(\"infoView\");\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var ui = {\r\n view: \"form\",\r\n scroll: true,\r\n id: \"formView\",\r\n elements: [header, master, detail, totalFooter, controls],\r\n };\r\n return {\r\n $ui: {\r\n // paddingY: 10,\r\n // paddingX: 10,\r\n // elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"huyhoadon_add\",\r\n // complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"scrollview\",\r\n scroll: \"y\",\r\n body: {\r\n paddingX: 18,\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"text\", label: \"cctbao_id\", id: \"cctbao_id\", name: \"cctbao_id\", hidden: true },\r\n {\r\n view: \"datepicker\",\r\n name: \"tdlap\",\r\n label: \"Ngày lập\",\r\n //labelPosition: \"top\",\r\n id: \"tdlap\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdon\",\r\n id: \"shdon\",\r\n label: \"Số HĐ\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: _(\"Ký hiệu\"),\r\n name: \"khieu\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n id: \"khieu\",\r\n // type:\"number\",\r\n attributes: { maxlength: 7 },\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"Số đơn hàng\"),\r\n name: \"sdhang\",\r\n id: \"sdhang\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"dvtte\",\r\n label: \"Mã tiền tệ\",\r\n //labelPosition: \"top\",\r\n id: \"dvtte\",\r\n required: true,\r\n value: \"1\",\r\n invalidMessage: \"Trạng thái hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n value: \"1\",\r\n template: \"#value#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\",\r\n body: {\r\n columns: [{ id: \"value\", header: _(\"Mã tiền tệ\"), width: 220 }],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) {\r\n this.load(this.config.url);\r\n return;\r\n }\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00188\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n type: \"number\",\r\n value: 1,\r\n name: \"tgia\",\r\n id: \"tgia\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isNumber(newv)) {\r\n webix.message(\"Tỷ giá phải nhập số\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"htttoan\",\r\n label: \"HT thanh toán\",\r\n //labelPosition: \"top\",\r\n value: \"đồng\",\r\n id: \"htttoan\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#name#\",\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n // { id: \"id\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"code\", header: _(\"Mã ngoại tệ\"), width: 150 },\r\n { id: \"name\", header: _(\"Tên ngoại tệ\"), width: 550 },\r\n ],\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00252\",\r\n },\r\n on: {},\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"STK người bán\"),\r\n id: \"stknban\",\r\n name: \"stknban\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"mst\",\r\n name: \"mst\",\r\n view: \"search\",\r\n label: \"Mã số thuế\",\r\n //align: \"center\",\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n if (!webix.rules.isTaxCode(newv)) {\r\n webix.message(\"Mã số thuế không hợp lệ\", \"error\");\r\n this.focus();\r\n return;\r\n }\r\n // if (newv.length != 11) {\r\n // webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n },\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n editor: \"textsearch\",\r\n label: \"Mã đối tượng\",\r\n id: \"mnmua\",\r\n name: \"mnmua\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Tên người mua\"), name: \"tnmua\", id: \"tnmua\" },\r\n { view: \"text\", label: _(\"Email\"), name: \"email\", id: \"email\" },\r\n ],\r\n },\r\n { view: \"text\", label: _(\"Tên đơn vị\"), name: \"ten\", id: \"ten\" },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"dchi\", id: \"dchi\" },\r\n { view: \"text\", label: _(\"STK người mua\"), name: \"stknmua\", id: \"stknmua\" },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n id: \"mainInvoiceManage\",\r\n css: { \"padding-bottom\": \"5px !important\" },\r\n // view: \"toolbar\",\r\n // height: 18,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n // id: \"btnPrint\",\r\n // view: \"button\", type: \"icon\",\r\n // //view: \"icon\",\r\n id: \"addrow\",\r\n // label: \" (F9)\",\r\n // width: 60,\r\n // icon: \"fas fa-plus\",\r\n css: \"btnForm\",\r\n //css: { \"font-size\": \"15px\" },\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({ row: item.id, column: \"ma\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n // view: \"button\",\r\n id: \"removerow\",\r\n // type: \"icon\",\r\n // //view: \"icon\",\r\n // label: \" (F8)\",\r\n // width: 60,\r\n css: \"btnForm\",\r\n // icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n // type: \"icon\",\r\n //view: \"icon\",\r\n // label: \" (F7)\",\r\n // width: 60,\r\n // icon: \"fas fa-copy\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n //item.id = webix.uid();\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n //copy[tab.tab_table + \"_id\"] = null;\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({ row: copy.id, column: \"ma\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"check_chietkhau\",\r\n value: 0,\r\n labelRight: _(\"Chiết khấu\"),\r\n labelWidth: 2,\r\n tooltip: \"Tích vào đây nếu hóa đơn có chiết khấu\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"hoadon68_chitiet\").showColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").showColumn(\"tlckhau\");\r\n } else {\r\n $$(\"hoadon68_chitiet\").hideColumn(\"stckhau\");\r\n $$(\"hoadon68_chitiet\").hideColumn(\"tlckhau\");\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n // tab_table: tab.tab_table,\r\n // tab_id: tab.tab_id,\r\n editable: true,\r\n select: \"cell\",\r\n height: 260,\r\n drag: true,\r\n // select_change: tab.select_change,\r\n // cell_editstop: tab.cell_editstop,\r\n // after_addrow: tab.after_addrow,\r\n // after_delrow: tab.after_delrow,\r\n // oncheck: tab.oncheck,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"textsearch\",\r\n width: 100,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ma_hanghoa\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"code\", width: 120, header: \"code\" },\r\n { id: \"name\", width: 350, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00005\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"ma\"] = obj[\"code\"];\r\n selectedItem[\"ten\"] = obj[\"name\"];\r\n selectedItem[\"mdvtinh\"] = obj[\"unit_code\"];\r\n selectedItem[\"dgia\"] = obj[\"unit_price\"];\r\n selectedItem[\"tsuat\"] = obj[\"vat_type\"];\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: \"name\", width: 120, header: \"name\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?id=RF00035\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"hoadon68_chitiet\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"mdvtinh\"] = obj[\"code\"];\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n hidden: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n hidden: true,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n // editor: \"combo\",\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // }\r\n // },\r\n // options: app.config.host + \"/System/GetDataByReferencesId?id=D6FAEAFC-4EF2-4ABD-AB45-F3DCB4805740\",\r\n // optionslist: true\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"kmai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n // $$(\"edit_\" + tab.tab_table).showColumn(\"inv_discountAmount\");\r\n // $$(\"edit_\" + tab.tab_table).showColumn(\"inv_discountPercentage\");\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n // var selectedItem = table.getItem(row);\r\n // selectedItem.don_gia = null;\r\n // selectedItem.tien_tt = null;\r\n // selectedItem.pt_ck = null;\r\n // selectedItem.tien_ck = null;\r\n // selectedItem.pt_thue = null;\r\n // selectedItem.tien_thue = null;\r\n // selectedItem.tong_tien = null;\r\n // table.updateItem(selectedItem.id, selectedItem);\r\n // table.callEvent(\"onAfterAdd\");\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var table = $$(this.config.id);\r\n var data = table.serialize();\r\n\r\n var tong_tien_tt_dp = 0;\r\n var tong_tien_thue_dp = 0;\r\n var tong_tien_ck_dp = 0;\r\n var tong_tien_dp = 0;\r\n data.forEach(function (entry) {\r\n tong_tien_tt_dp += entry[\"tien_tt\"] == null ? 0 : entry[\"tien_tt\"];\r\n tong_tien_thue_dp += entry[\"tien_thue\"] == null ? 0 : entry[\"tien_thue\"];\r\n tong_tien_ck_dp += entry[\"tien_ck\"] == null ? 0 : entry[\"tien_ck\"];\r\n tong_tien_dp += entry[\"tong_tien\"] == null ? 0 : entry[\"tong_tien\"];\r\n\r\n // $$(\"inv_Invoice_tien_tt\").setValue(tong_tien_tt_dp);\r\n // $$(\"inv_Invoice_tien_ck\").setValue(tong_tien_ck_dp);\r\n // $$(\"inv_Invoice_tien_thue\").setValue(tong_tien_thue_dp);\r\n // $$(\"inv_Invoice_tong_tien\").setValue(tong_tien_dp);\r\n });\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var table = $$(this.config.id);\r\n var selectedItem = table.getItem(editor.row);\r\n var columnId = editor.config.id;\r\n\r\n var so_luong = webix.rules.isNumber(selectedItem.sluong) ? selectedItem.sluong : 0;\r\n var don_gia = webix.rules.isNumber(selectedItem.dgia) ? selectedItem.dgia : 0;\r\n var tien_tt = webix.rules.isNumber(selectedItem.thtien) ? selectedItem.thtien : 0;\r\n var pt_ck = webix.rules.isNumber(selectedItem.tlckhau) ? selectedItem.tlckhau : 0;\r\n var tien_ck = webix.rules.isNumber(selectedItem.stckhau) ? selectedItem.stckhau : 0;\r\n var pt_thue = webix.rules.isNumber(selectedItem.tsuat) ? selectedItem.tsuat : 0;\r\n var tien_thue = webix.rules.isNumber(selectedItem.tthue) ? selectedItem.tthue : 0;\r\n var tong_tien = webix.rules.isNumber(selectedItem.tgtien) ? selectedItem.tgtien : 0;\r\n if (\r\n columnId == \"tsuat\" ||\r\n columnId == \"sluong\" ||\r\n columnId == \"dgia\" ||\r\n columnId == \"thtien\" ||\r\n columnId == \"tgtien\" ||\r\n columnId == \"tlckhau\" ||\r\n columnId == \"stckhau\"\r\n ) {\r\n if (don_gia < 0) {\r\n don_gia = 0;\r\n }\r\n if (so_luong < 0) {\r\n so_luong = 0;\r\n }\r\n\r\n if (don_gia > 0) {\r\n tien_tt = so_luong * don_gia;\r\n }\r\n\r\n if (pt_ck < 0) {\r\n pt_ck = 0;\r\n }\r\n if (pt_ck > 100) {\r\n pt_ck = 0;\r\n }\r\n\r\n tien_ck = (tien_tt * pt_ck) / 100;\r\n if (tien_ck - tien_tt > 0) {\r\n tien_ck = 0;\r\n }\r\n tien_thue = ((tien_tt - tien_ck) * pt_thue) / 100;\r\n\r\n tong_tien = Math.round(tien_tt - tien_ck + parseFloat(tien_thue));\r\n }\r\n selectedItem.sluong = so_luong;\r\n selectedItem.dgia = don_gia;\r\n selectedItem.tsuat = pt_thue;\r\n selectedItem.thtien = tien_tt;\r\n selectedItem.tlckhau = pt_ck;\r\n selectedItem.stckhau = tien_ck;\r\n selectedItem.tthue = tien_thue;\r\n selectedItem.tgtien = tong_tien;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n\r\n var data = table.serialize();\r\n var tien_tt_all = 0;\r\n var tien_thue_all = 0;\r\n var tien_ck_all = 0;\r\n var tong_tien_all = 0;\r\n\r\n var tien_tt_10 = 0;\r\n var tien_thue_10 = 0;\r\n var tien_ck_10 = 0;\r\n var tong_tien_10 = 0;\r\n\r\n var tien_tt_5 = 0;\r\n var tien_thue_5 = 0;\r\n var tien_ck_5 = 0;\r\n var tong_tien_5 = 0;\r\n\r\n var tien_tt_0 = 0;\r\n var tien_thue_0 = 0;\r\n var tien_ck_0 = 0;\r\n var tong_tien_0 = 0;\r\n\r\n var tien_tt_kct = 0;\r\n var tien_thue_kct = 0;\r\n var tien_ck_kct = 0;\r\n var tong_tien_kct = 0;\r\n\r\n var tien_tt_kkk = 0;\r\n var tien_thue_kkk = 0;\r\n var tien_ck_kkk = 0;\r\n var tong_tien_kkk = 0;\r\n\r\n data.forEach(function (entry) {\r\n tien_tt_all += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_all += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_all += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_all += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n\r\n if (entry[\"tsuat\"] == 10) {\r\n tien_tt_10 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_10 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_10 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_10 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == 5) {\r\n tien_tt_5 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_5 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_5 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_5 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == 0) {\r\n tien_tt_0 += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_0 += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_0 += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_0 += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == -1) {\r\n tien_tt_kct += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kct += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kct += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kct += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n if (entry[\"tsuat\"] == -2) {\r\n tien_tt_kkk += entry[\"thtien\"] == null ? 0 : entry[\"thtien\"];\r\n tien_thue_kkk += entry[\"tthue\"] == null ? 0 : entry[\"tthue\"];\r\n tien_ck_kkk += entry[\"stckhau\"] == null ? 0 : entry[\"stckhau\"];\r\n tong_tien_kkk += entry[\"tgtien\"] == null ? 0 : entry[\"tgtien\"];\r\n }\r\n });\r\n\r\n $$(\"tgtcthue\").setValue(tien_tt_all);\r\n $$(\"tgtcthue10\").setValue(tien_tt_10);\r\n $$(\"tgtcthue5\").setValue(tien_tt_5);\r\n $$(\"tgtcthue0\").setValue(tien_tt_0);\r\n $$(\"tgtcthuekct\").setValue(tien_tt_kct);\r\n $$(\"tgtcthuekkk\").setValue(tien_tt_kkk);\r\n\r\n $$(\"ttcktmai\").setValue(tien_ck_all);\r\n $$(\"ttcktmai10\").setValue(tien_ck_10);\r\n $$(\"ttcktmai5\").setValue(tien_ck_5);\r\n $$(\"ttcktmai0\").setValue(tien_ck_0);\r\n $$(\"ttcktmaikct\").setValue(tien_ck_kct);\r\n $$(\"ttcktmaikkk\").setValue(tien_ck_kkk);\r\n\r\n $$(\"tgtthue\").setValue(tien_thue_all);\r\n $$(\"tgtthue10\").setValue(tien_thue_10);\r\n $$(\"tgtthue5\").setValue(tien_thue_5);\r\n $$(\"tgtthue0\").setValue(tien_thue_0);\r\n $$(\"tgtthuekct\").setValue(tien_thue_kct);\r\n $$(\"tgtthuekkk\").setValue(tien_thue_kkk);\r\n\r\n $$(\"tgtttbso\").setValue(tong_tien_all);\r\n $$(\"tgtttbso10\").setValue(tong_tien_10);\r\n $$(\"tgtttbso5\").setValue(tong_tien_5);\r\n $$(\"tgtttbso0\").setValue(tong_tien_0);\r\n $$(\"tgtttbsokct\").setValue(tong_tien_kct);\r\n $$(\"tgtttbsokkk\").setValue(tong_tien_kkk);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Loại thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"label\",\r\n label: \" + Tổng cộng hàng hóa, dịch vụ\",\r\n height: 22,\r\n css: { \"padding-left\": \"5px\", \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" },\r\n },\r\n { view: \"label\", label: \"Thuế suất 10%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 5%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Thuế suất 0%\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không chịu thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n { view: \"label\", label: \"Không kê khai, tính nộp thuế GTGT\", css: \"lblSubTongtien\", height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng phí lệ phí\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n // { view: \"label\", label: \"Tổng cộng thanh toán\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\" } , height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Thành tiền trước thuế\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue\", name: \"tgtcthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue10\", name: \"tgtcthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue5\", name: \"tgtcthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthue0\", name: \"tgtcthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthuekct\", name: \"tgtcthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtcthuekkk\", name: \"tgtcthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n // { view: \"text\", id: \"2\", name: \"2\", css: \"txtTongtien\", readonly: true, height: 22 }\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền chiết khấu\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai\", name: \"ttcktmai\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai10\", name: \"ttcktmai10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai5\", name: \"ttcktmai5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmai0\", name: \"ttcktmai0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmaikct\", name: \"ttcktmaikct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"ttcktmaikkk\", name: \"ttcktmaikkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tiền thuế\", css: \"lblTongtien\" },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue\", name: \"tgtthue\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue10\", name: \"tgtthue10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue5\", name: \"tgtthue5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthue0\", name: \"tgtthue0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthuekct\", name: \"tgtthuekct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtthuekkk\", name: \"tgtthuekkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n rows: [\r\n { view: \"label\", label: \"Tổng tiền sau thuế\", css: \"lblTongtien\" },\r\n {\r\n view: \"text\",\r\n id: \"tgtttbso\",\r\n name: \"tgtttbso\",\r\n css: \"txtTongtien\",\r\n readonly: true,\r\n height: 22,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var total_amount = $$(\"tgtttbso\").getValue();\r\n var type_curency = $$(\"dvtte\").getValue();\r\n var url = app.config.host + \"/Invoice68/Amount_ToWord?number=\" + total_amount + \"&type_amount=\" + type_curency;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n $$(\"tgtttbchu\").setValue(c_result.data);\r\n },\r\n });\r\n },\r\n },\r\n format: \"1.111,00\",\r\n },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso10\", name: \"tgtttbso10\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso5\", name: \"tgtttbso5\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbso0\", name: \"tgtttbso0\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbsokct\", name: \"tgtttbsokct\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n { view: \"text\", format: \"1.111,00\", id: \"tgtttbsokkk\", name: \"tgtttbsokkk\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"label\", width: 309, label: \"Đọc tiền bằng chữ\", css: { \"font-weight\": \"bold\", \"background-color\": \"#86b2cf\", \"padding-left\": \"5px\" }, height: 22 },\r\n { view: \"text\", id: \"tgtttbchu\", name: \"tgtttbchu\", css: \"txtTongtien\", readonly: true, height: 22 },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"huyhoadon_add\").getValues();\r\n var table = $$(\"huyhoadon_add\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"huyhoadon_add\").getValues();\r\n var table = $$(\"huyhoadon_add\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var item = json.data;\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n hdon_id: item.id,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SignInvoiceCertFile68\", postData, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n return;\r\n }\r\n\r\n if (result.ok == true) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/System/ExecuteCommand\",\r\n // {\r\n // command: \"CM00025\",\r\n // parameter: {\r\n\r\n // }\r\n // }\r\n // , function (text) {\r\n // var json = JSON.parse(text);\r\n // // auto send SMS\r\n // if (json[1].value == \"C\") {\r\n // var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n\r\n // });\r\n\r\n webix.modalbox.hide();\r\n }\r\n });\r\n\r\n return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_1',[\"app\", \"models/user\", \"views/forms/68_huyhoadon_1/68_mau04form\", \"views/forms/68_huyhoadon_1/68_huyhoadonchitietform\", \"views/forms/68_huyhoadon_1/68_hoadonform\"], function (\r\n app,\r\n user,\r\n mau04form,\r\n huyhoadonchitietform,\r\n hoadonform\r\n) {\r\n var editmode = 0;\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"huyhoadon-win\",\r\n position: \"center\",\r\n head: {\r\n view: \"toolbar\",\r\n elements: [\r\n {\r\n width: 50,\r\n },\r\n {\r\n template: function () {\r\n return '

Hủy và tạo mới hóa đơn

';\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"times\",\r\n on: {\r\n onClick: function () {\r\n $$(\"huyhoadon-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n body: {\r\n rows: [\r\n {\r\n view: \"tabbar\",\r\n id: \"tabbar\",\r\n multiview: true,\r\n height: 50,\r\n width: 1500,\r\n value: \"infoView\",\r\n options: [\r\n { value: \"Bước 1: Lập mẫu 04\", id: \"infoView\" },\r\n { value: \"Bước 2: Tạo hóa đơn mới\", id: \"formView\" },\r\n { value: \"Bước 3: Ký và gửi\", id: \"previewView\" },\r\n ],\r\n on: {\r\n onBeforeTabClick: function (id, ev) {\r\n if (id == \"previewView\") {\r\n var win = webix.$$(\"previewView\");\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n\r\n var url = \"http://localhost:18374/hopdong/printhopdong?id=b9496ff0-360d-4852-8153-4b3c54fbe167&type=pdf\";\r\n webix.ajax().get(url, function (response) {\r\n win.enable();\r\n win.hideProgress();\r\n var file = new Blob([response], {\r\n type: \"application/pdf\",\r\n });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var builder = '

Mẫu hóa đơn

';\r\n\r\n $$(\"pdfViewInfoOld\").setHTML(builder);\r\n $$(\"pdfViewInfoNew\").setHTML(builder);\r\n });\r\n }\r\n\r\n if (id == \"formView\") {\r\n // Load data tab formView\r\n }\r\n\r\n if (id == \"infoView\") {\r\n // Load data tab infoView\r\n }\r\n },\r\n onAfterRender: function () {\r\n // Load data tab 1\r\n },\r\n },\r\n },\r\n {\r\n height: 650,\r\n cells: [mau04form.$ui, hoadonform, huyhoadonchitietform],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n\r\n setValues: function (item) {},\r\n };\r\n});\r\n\ndefine('views/68_invoiceViews_code',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms_code\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n mcqtcap: item.mccqthue,\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.mccqthue = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn GTGT (Loại 1)\", details: \"Lập hóa đơn -> Hóa đơn GTGT (Loại 1)\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.setEditMode(2);\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.shdon + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Email\") + \"\",\r\n id: \"btnEmail\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n if (item.mccqthue == \"\" || item.mccqthue == null) {\r\n webix.message(\"Hóa đơn chưa có mã cơ quan thuế không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang gửi email ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/SendInvoiceByEmail\", item, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // webix.message(\"Gửi Email thành công !\", \"debug\");\r\n // } else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // },\r\n // });\r\n\r\n require([\"views/forms/sendemail\", \"app\"], function (sendemail, app) {\r\n var url = \"/Invoice68/GetEmailTemplate?type=Gửi hóa đơn&id=\" + item.hdon_id;\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n var win = webix.$$(\"invoiceViews\").$scope.ui(sendemail.$ui);\r\n var hoadon = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: item.hdon_id,\r\n id: item.hdon_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: item.email,\r\n his_email: json.his_email,\r\n lst_email: json.lst_email,\r\n hdon68: 1,\r\n alias: json.alias,\r\n };\r\n\r\n //console.log(JSON.stringify(json.lst_email));\r\n sendemail.setValues(hoadon);\r\n win.show();\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, false, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Gửi CQT\") + \"\",\r\n id: \"btnGuiCQT\",\r\n click: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var datafrm = tableHdon.serialize();\r\n\r\n var data = [];\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].hdon_id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var postData = {\r\n invs: data,\r\n mltdiep: \"200\",\r\n };\r\n\r\n if (data.length > 0) {\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai != null && data[i].tthai == \"Đã gửi\") {\r\n webix.message(\"Hóa đơn đã gửi không thể gửi !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn gửi hóa đơn tới CQT không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn!\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Nghiệp vụ\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n // {\r\n // view: \"button\", type: \"htmlbutton\", width: 115,\r\n // label: ' ' +\r\n // '' + _(\"EXPORT_EXCEL\") + '',\r\n // id: \"btnExport\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết suất Excel ... \",\r\n // buttons: [\"Hủy bỏ\"],\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"0\":\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // var interVal = setTimeout(function () {\r\n // var table = $$(\"invoiceViews\");\r\n // webix.toExcel(table, {\r\n // filename: \"danh sach hoa don\",\r\n // rawValues: true,\r\n // filterHTML: true\r\n // });\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // }, 1500);\r\n\r\n // // var rpParameter = table.config.rpParameter;\r\n // // if (rpParameter == undefined || rpParameter == null) {\r\n // // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // // return;\r\n // // }\r\n // // rpParameter.type = \"xlsx\";\r\n\r\n // // if (rpParameter != null) {\r\n // // var box = webix.modalbox({\r\n // // title: \"Đang kết xuất Excel ....\",\r\n // // text: \"

\",\r\n // // width: 350,\r\n // // height: 200\r\n // // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .headers({ 'Content-type': 'application/json' })\r\n // // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // // {\r\n // // error: function (text, data, XmlHttpRequest) {\r\n // // webix.modalbox.hide(box);\r\n // // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // // },\r\n // // success: function (text, data, XmlHttpRequest) {\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // webix.modalbox.hide(box);\r\n // // window.location.href = fileURL;\r\n // // }\r\n // // }\r\n // // // function (text, data) {\r\n\r\n // // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // // window.location.href = fileURL;\r\n // // // }\r\n // // );\r\n // // }\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n if (countkyHieu > 0) {\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + fm(json[\"doanhthu\"]));\r\n });\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ttthdon\",\r\n header: [\"
Trạng thái
\", { content: \"textFilter\" }],\r\n template: \"#ttthdon#\",\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 150,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"
Trạng thái gửi CQT
\", { content: \"textFilter\" }],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"issendmail\",\r\n header: [\"
Gửi Email
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.rcheckbox()}\",\r\n },\r\n {\r\n id: \"error_status\",\r\n header: [\"
Có lỗi/Không có lỗi
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n template: function (obj) {\r\n if (obj.error_status == \"1\") {\r\n return \"Có lỗi \";\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"
Ngày hóa đơn
\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"
Mã số thuế
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mccqthue\", header: [\"
Mã CQT
\", { content: \"textFilter\" }], width: 100, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"ten\", header: [\"
Tên đơn vị/ Tên người mua
\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso == null ? 0 : fm(obj.tgtttbso);\r\n },\r\n columnType: \"decimal\",\r\n },\r\n { id: \"htttoan\", header: [\"
Hình thức TT
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"
Người lập
\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // hide: true,\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"kyhieu_id\",\r\n view: \"combo\",\r\n width: 300,\r\n label: _(\"Ký hiệu\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00058\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"kyhieu_id\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_invoiceViews',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n {\r\n id: \"nhanExcel\",\r\n value: \"Nhận Excel hàng loạt\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00010\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.setEditMode(2);\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.shdon + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Email\") + \"\",\r\n id: \"btnEmail\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể gửi email !\", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/sendemail\", \"app\"], function (sendemail, app) {\r\n var url = \"/Invoice68/GetEmailTemplate?type=Gửi hóa đơn&id=\" + item.hdon_id;\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n var win = webix.$$(\"invoiceViews\").$scope.ui(sendemail.$ui);\r\n var hoadon = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: item.hdon_id,\r\n id: item.hdon_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: item.email,\r\n his_email: json.his_email,\r\n lst_email: json.lst_email,\r\n hdon68: 1,\r\n alias: json.alias,\r\n };\r\n\r\n //console.log(JSON.stringify(json.lst_email));\r\n sendemail.setValues(hoadon);\r\n win.show();\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, false);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n //check validate và return ra list hoadon_id\r\n var lsthdon_id = commonHD.validate_HD_ReturnListHdonId();\r\n if (lsthdon_id.length > 0) {\r\n //call function excute hoa don\r\n commonHD.ExcuteHoaDon(lsthdon_id, true);\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Gửi CQT\") + \"\",\r\n id: \"btnGuiCQT\",\r\n click: function () {\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n var itemHdon = tableHdon.getSelectedItem();\r\n\r\n var datafrm = tableHdon.serialize();\r\n\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].hdon_id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var postData = {\r\n invs: data,\r\n mltdiep: \"203\",\r\n };\r\n\r\n if (data.length > 0) {\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai != null && data[i].tthai == \"Đã gửi\") {\r\n webix.message(\"Hóa đơn đã gửi không thể gửi !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn gửi hóa đơn tới CQT không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendInvoiceToCQT68\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Gửi CQT thành công!\");\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn!\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Nghiệp vụ\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n // {\r\n // view: \"button\", type: \"htmlbutton\", width: 115,\r\n // label: ' ' +\r\n // '' + _(\"EXPORT_EXCEL\") + '',\r\n // id: \"btnExport\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết suất Excel ... \",\r\n // buttons: [\"Hủy bỏ\"],\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // callback: function (result) {\r\n // switch (result) {\r\n // case \"0\":\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // var interVal = setTimeout(function () {\r\n // var table = $$(\"invoiceViews\");\r\n // webix.toExcel(table, {\r\n // filename: \"danh sach hoa don\",\r\n // rawValues: true,\r\n // filterHTML: true\r\n // });\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n // }, 1500);\r\n\r\n // // var rpParameter = table.config.rpParameter;\r\n // // if (rpParameter == undefined || rpParameter == null) {\r\n // // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // // return;\r\n // // }\r\n // // rpParameter.type = \"xlsx\";\r\n\r\n // // if (rpParameter != null) {\r\n // // var box = webix.modalbox({\r\n // // title: \"Đang kết xuất Excel ....\",\r\n // // text: \"

\",\r\n // // width: 350,\r\n // // height: 200\r\n // // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .headers({ 'Content-type': 'application/json' })\r\n // // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // // {\r\n // // error: function (text, data, XmlHttpRequest) {\r\n // // webix.modalbox.hide(box);\r\n // // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // // },\r\n // // success: function (text, data, XmlHttpRequest) {\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // webix.modalbox.hide(box);\r\n // // window.location.href = fileURL;\r\n // // }\r\n // // }\r\n // // // function (text, data) {\r\n\r\n // // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // // window.location.href = fileURL;\r\n // // // }\r\n // // );\r\n // // }\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n\r\n if (countkyHieu > 0) {\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n });\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"doanhThuNoCode\").setValue(\"Doanh thu xuất hóa đơn: \" + fm(json[\"doanhthunocode\"]));\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n }\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n header: [\"
Trạng thái
\", { content: \"textFilter\" }],\r\n template: \"#ttthdon#\",\r\n // template: function (obj, common) {\r\n // console.log(obj.tthdon);\r\n // return \"\" + obj.ttthdon + \"\";\r\n // },\r\n width: 150,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"
Trạng thái gửi CQT
\", { content: \"textFilter\" }],\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n },\r\n\r\n {\r\n id: \"btnMessagetn\",\r\n header: [\"
Lịch sử xử lý
\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 180,\r\n },\r\n {\r\n id: \"issendmail\",\r\n header: [\"
Gửi Email
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.rcheckbox()}\",\r\n },\r\n {\r\n id: \"error_status\",\r\n header: [\"
Có lỗi/Không có lỗi
\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n columnType: \"nvarchar\",\r\n template: function (obj) {\r\n if (obj.error_status == \"1\") {\r\n return \"Có lỗi \";\r\n } else {\r\n return \"\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"
Ngày hóa đơn
\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"
Mã số thuế
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"ten\", header: [\"
Tên đơn vị/ Tên người mua
\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso == null ? 0 : fm(obj.tgtttbso);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"
Hình thức TT
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"
Người lập
\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n // cols: [\r\n // {\r\n // view: \"icon\",\r\n // icon: \"fas fa-question-circle\",\r\n // id: \"help_form_main\",\r\n // tooltip: _(\"HELPER\"),\r\n // css: \"helper\",\r\n // click: function () {\r\n // webix.alert({\r\n // title: \"Thông báo !\",\r\n // text: \"Bạn chưa khai báo hướng dẫn nhanh cho màn hình này !\",\r\n // type: \"alert-warning\",\r\n // callback: function (result) {},\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"combo\",\r\n // label: _(\"MENU_QUICK\"),\r\n // id: \"QuickMenuMain\",\r\n // hide: true,\r\n // options: {\r\n // // view: \"gridsuggest\",\r\n // // id: \"grid_window\",\r\n // // template: \"#name#\",\r\n // // body: {\r\n // // scroll: true,\r\n // // autoheight: false,\r\n // // columns: [\r\n // // { id: \"window_id\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n // // { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n // // ],\r\n // // url: app.config.host + \"/System/GetQuickMenu\"\r\n // // },\r\n // // on: {\r\n // // onValueSuggest: function (obj) {\r\n // // var start = obj.window_id != \"\" ? obj.code + \":\" + obj.window_id : obj.code;\r\n // // window.location.hash = \"!/app/\" + start;\r\n // // $$(\"QuickMenu\").setValue(null);\r\n // // }\r\n // // }\r\n // },\r\n // on: {\r\n // onChange: function (newv, oldv) {},\r\n // },\r\n // },\r\n // {},\r\n // {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n // },\r\n // ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThuNoCode\",\r\n name: \"doanhThuNoCode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"kyhieu_id\",\r\n view: \"combo\",\r\n width: 300,\r\n label: _(\"Ký hiệu\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00054\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"kyhieu_id\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm_bienlai',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n var dt = new Date();\r\n var y = dt.getFullYear();\r\n var yearlast = y.toString().substring(2, 4);\r\n\r\n function onChangeKhmbl() {\r\n var res = $$(\"khm1\").getValue() + \"BLP\" + $$(\"khm2\").getValue() + \"-\" + $$(\"khm3\").getValue();\r\n $$(\"khmbl\").setValue(res);\r\n $$(\"khmbl\").refresh();\r\n }\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (table.validate() && $$(\"kh2\").getValue().toString().length == 2 && $$(\"khm3\").getValue().toString().length == 3) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 2;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n if ($$(\"kh2\").getValue().toString().length != 2) {\r\n webix.message(\"Ký hiệu nhập sai định dạng\", \"error\");\r\n } else if ($$(\"khm3\").getValue().toString().length != 3) {\r\n webix.message(\"Ký hiệu mẫu nhập sai định dạng\", \"error\");\r\n } else {\r\n webix.message(\"Dữ liệu nhập sai định dạng\", \"error\");\r\n }\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu biên lai\",\r\n on: {\r\n onBeforeShow: function () {\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"AB-\" + year.toString().substring(2, 4) + \"E\");\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"loaibl\",\r\n label: \"Loại biên lai\",\r\n //labelPosition: \"top\",\r\n id: \"loaibl\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"01\",\r\n invalidMessage: \"Loại biên lai không được bỏ trống !\",\r\n options: [\r\n { id: \"01\", value: \"Biên lai thu phí, lệ phí không có mệnh giá\" },\r\n { id: \"02\", value: \"Biên lai thu phí, lệ phí có mệnh giá\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // var kyhieu = $$(\"khmbl\").getValue();\r\n // var res = kyhieu.replace(kyhieu.substring(0, 2), newv);\r\n // $$(\"khmbl\").setValue(res);\r\n // $$(\"khmbl\").refresh();\r\n $$(\"khm1\").setValue(newv);\r\n $$(\"khm1\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n rows: [{\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Ký hiệu mẫu\",\r\n width: 120\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm1\",\r\n id: \"khm1\",\r\n value: \"01\",\r\n readonly: true,\r\n on: {\r\n onChange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm2\",\r\n id: \"khm2\",\r\n value: \"0\",\r\n required: true,\r\n readonly: true,\r\n attributes: {\r\n maxlength: 1\r\n },\r\n on: {\r\n onchange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khm3\",\r\n id: \"khm3\",\r\n value: \"001\",\r\n required: true,\r\n attributes: {\r\n maxlength: 3\r\n },\r\n on: {\r\n onChange: onChangeKhmbl\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khmbl\",\r\n id: \"khmbl\",\r\n required: true,\r\n value: \"01BLP0-001\",\r\n invalidMessage: \"Không được bỏ trống\",\r\n readonly: true,\r\n }\r\n ]\r\n }]\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Hình thức biên lai\",\r\n name: \"htbl\",\r\n id: \"htbl\",\r\n required: true,\r\n invalidMessage: \"Không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"E\",\r\n options: [\r\n { id: \"T\", value: \"Biên lai thu phí, lệ phí tự in\" },\r\n { id: \"P\", value: \"Biên lai đặt in\" },\r\n { id: \"E\", value: \"Biên lai điện tử\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n // var kyhieu = $$(\"khhdon\").getValue();\r\n // var res = kyhieu.substring(0, kyhieu.length - 1) + newv;\r\n // $$(\"khhdon\").setValue(res);\r\n // $$(\"khhdon\").refresh();\r\n $$(\"kh3\").setValue(newv);\r\n $$(\"kh3\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n label: \"Ký hiệu\",\r\n width: 100,\r\n },\r\n {},\r\n {\r\n view: \"text\",\r\n id: \"kh2\",\r\n name: \"kh2\",\r\n value: \"AB\",\r\n width: 40,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n newv = newv.toUpperCase();\r\n var res = newv + \"-\" + yearlast + $$(\"kh3\").getValue();\r\n $$(\"kh2\").setValue(newv);\r\n $$(\"kh2\").refresh();\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n attributes: {\r\n maxlength: 2,\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n id: \"kh3\",\r\n name: \"kh3\",\r\n width: 30,\r\n value: \"E\",\r\n readonly: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var res = $$(\"kh2\").getValue() + \"-\" + yearlast + $$(\"kh3\").getValue();;\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n // label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n readonly: true,\r\n // labelWidth: 120,\r\n width: 290,\r\n required: true,\r\n value: \"AA-22P\",\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n attributes: {\r\n maxlength: 8,\r\n },\r\n // validate: webix.rules.isMauSo\r\n },\r\n ]\r\n }\r\n ]\r\n },\r\n // {\r\n // view: \"text\",\r\n // label: \"Ký hiệu\",\r\n // name: \"khhdon\",\r\n // id: \"khhdon\",\r\n // disabled : true,\r\n // labelWidth: 120,\r\n // required: true,\r\n // value: \"01AA-22P\",\r\n // invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n // attributes: {\r\n // maxlength: 8,\r\n // },\r\n // // validate: webix.rules.isMauSo\r\n // },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02005\",\r\n on: {\r\n onChange: function (newv, oldv) { },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n\r\n var khm = $$(\"khmbl\").getValue();\r\n $$(\"khm1\").setValue(khm.substring(0, 2));\r\n $$(\"khm2\").setValue(khm.substring(5, 6));\r\n $$(\"khm3\").setValue(khm.substring(7, 10));\r\n\r\n var khhd = $$(\"khhdon\").getValue();\r\n $$(\"kh2\").setValue(khhd.substring(2, 4));\r\n $$(\"kh3\").setValue(khhd.substring(7, 8));\r\n\r\n if (khhd.length == 6) {\r\n $$(\"kh2\").setValue(khhd.substring(0, 2));\r\n $$(\"kh3\").setValue(khhd.substring(5, 6));\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm_bienlai\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68bienlai\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu biên lai\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu biên lai (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu biên lai cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fa fa-cube\",\r\n // label: \"Chức năng\",\r\n // width: 100,\r\n // css: \"button_raised\",\r\n // click: function () {\r\n // submenuChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // id: \"btnRegister\",\r\n // type: \"icon\",\r\n // icon: \"plus\",\r\n // label: \"Đăng ký\",\r\n // width: 100,\r\n // shortcut: \"F1\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(dangkyform.$ui);\r\n // dangkyform.setEditMode(0);\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"khmbl\",\r\n header: [\r\n \"Ký hiệu mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"trangThai\",\r\n // header: [\r\n // \"Số dòng in mẫu\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 120,\r\n // template: function (obj) {\r\n // return (\r\n // \"\" +\r\n // obj.trangThai +\r\n // \"\"\r\n // );\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu biên lai sử dụng\",\r\n details: \"Quản lý ký hiệu biên lai sử dụng\",\r\n });\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n css: \"mcls_uppercase\",\r\n options: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00230\",\r\n },on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n details: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url+ \"&loaikh=2\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if(selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({\"Content-type\": \"application/json\"})\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Kí hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi_tncn',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02001\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu chứng từ cho đơn vị\",\r\n details: \"Phân ký kiệu chứng từ cho đơn vị\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url+ \"&loaikh=3\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if(selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({\"Content-type\": \"application/json\"})\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_donvi',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_donvi\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetKyHieuDonVi68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: id,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[\"branch_code\"] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.setValues(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletekihieudonvi68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n webix.message(\"Chưa chọn dòng cần xóa\", \"info\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"phanhoadon_78_donvi_id\",\r\n header: \"phanhoadon_78_donvi_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"phanhoadon_78_id\",\r\n header: \"phanhoadon_78_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: \"Ngày bắt đầu\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"donvisudung\",\r\n header: [\r\n \"Đơn vị sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"branch_code\",\r\n view: \"combo\",\r\n width: 800,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"branch_code\");\r\n combo.setValue(this.getFirstId());\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n webix.$$(\"title\").parse({\r\n title: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n details: \"Phân ký kiệu hoá đơn cho đơn vị\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm_tncn',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 3;\r\n item.id = item.qlkhsdung_id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n on: {\r\n onBeforeShow: function () {\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"AB/\" +year.toString() + \"/E\");\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n /*{\r\n view: \"combo\",\r\n name: \"loaibl\",\r\n label: \"Loại biên lai\",\r\n //labelPosition: \"top\",\r\n id: \"loaibl\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"01\",\r\n invalidMessage: \"Loại hóa đơn không được bỏ trống !\",\r\n options: [\r\n { id: \"01\", value: \"Biên lai thu phí, lệ phí không có mệnh giá\" },\r\n { id: \"02\", value: \"Biên lai thu phí, lệ phí có mệnh giá\" }\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khmbl\").getValue();\r\n var res = kyhieu.replace(kyhieu.substring(0, 2), newv);\r\n $$(\"khmbl\").setValue(res);\r\n $$(\"khmbl\").refresh();\r\n },\r\n },\r\n },*/\r\n /*{\r\n view: \"combo\",\r\n label: \"Hình thức\",\r\n name: \"hthuc\",\r\n id: \"hthuc\",\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"K\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n\r\n },\r\n },\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu mẫu\",\r\n name: \"khmbl\",\r\n id: \"khmbl\",\r\n labelWidth: 120,\r\n required: true,\r\n readonly:false,\r\n value :\"03/TNCN\",\r\n invalidMessage: \"Không được bỏ trống\",\r\n },\r\n /*{\r\n view: \"combo\",\r\n label: \"Hình thức biên lai\",\r\n name: \"htbl\",\r\n id: \"htbl\",\r\n required: true,\r\n invalidMessage: \"Không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Biên lai thu phí, lệ phí tự in\" },\r\n { id: \"P\", value: \"Biên lai đặt in\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n var res = kyhieu.substring(0,kyhieu.length-1) + newv;\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },*/\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n labelWidth: 120,\r\n required: true,\r\n value :\"AB/2022/E\",\r\n invalidMessage: \"Định dạnh đúng: AB/2022/E. Kí tự cuối cùng phải là E\",\r\n validate: function (val) {\r\n var regText = /^([A-Z]{2})(\\/)(20[1-9]{2})(\\/E)$/g;\r\n if(regText.test(val))\r\n {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n // validate: webix.rules.isMauSo\r\n },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n hidden:true,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02002\",\r\n on: {\r\n onChange: function (newv, oldv) {},\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu chứng từ sử dụng\",\r\n details: \"Quản lý ký hiệu chứng từ sử dụng\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url +\"&loaikh=3\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu chứng từ\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu chứng từ (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu chứng từ cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fa fa-cube\",\r\n // label: \"Chức năng\",\r\n // width: 100,\r\n // css: \"button_raised\",\r\n // click: function () {\r\n // submenuChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // id: \"btnRegister\",\r\n // type: \"icon\",\r\n // icon: \"plus\",\r\n // label: \"Đăng ký\",\r\n // width: 100,\r\n // shortcut: \"F1\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(dangkyform.$ui);\r\n // dangkyform.setEditMode(0);\r\n // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"khmbl\",\r\n header: [\r\n \"Ký hiệu mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n // {\r\n // id: \"trangThai\",\r\n // header: [\r\n // \"Số dòng in mẫu\",\r\n // {\r\n // content: \"textFilter\",\r\n // },\r\n // ],\r\n // width: 120,\r\n // template: function (obj) {\r\n // return (\r\n // \"\" +\r\n // obj.trangThai +\r\n // \"\"\r\n // );\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 500,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieuForm',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n var khhdon = item.khhdon;\r\n\r\n if (item.lhdon != khhdon[0] || item.hthuc != khhdon[1] || item.khdon != khhdon[4]) {\r\n webix.message(\"Ký hiệu không hợp lệ\", \"error\");\r\n return;\r\n }\r\n var donginmau = item.sdmau;\r\n if (donginmau == undefined || donginmau == \"\") {\r\n webix.message(\"Dòng in mẫu không được để trống\", \"error\");\r\n return;\r\n }\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n item.editmode = editmode;\r\n item.code = param.code;\r\n item.loaikh = 1;\r\n item.id = item.qlkhsdung_id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/quanlykyhieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu hóa đơn\",\r\n on: {\r\n onBeforeShow: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (editmode == 1) {\r\n var date = new Date();\r\n var year = date.getFullYear();\r\n $$(\"khhdon\").setValue(\"1K\" + year.toString().substring(2, 4) + \"TYY\");\r\n } else if (editmode == 2) {\r\n if (selectedItem.tt_sd > 0) {\r\n $$(\"lhdon\").disable();\r\n $$(\"hthuc\").disable();\r\n $$(\"khhdon\").disable();\r\n $$(\"qlmtke_id\").disable();\r\n $$(\"khdon\").disable();\r\n }\r\n }\r\n },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"lhdon\",\r\n label: \"Loại hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"lhdon\",\r\n required: true,\r\n labelWidth: 120,\r\n value: \"1\",\r\n invalidMessage: \"Loại hóa đơn không được bỏ trống !\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn GTGT\" },\r\n { id: \"2\", value: \"Hóa đơn bán hàng\" },\r\n { id: \"3\", value: \"Hóa đơn điện tử bán tài sản công\" },\r\n { id: \"4\", value: \"Hóa đơn điện tử bán hàng dự trữ quốc gia\" },\r\n { id: \"5\", value: \"Hóa đơn khác: tem, vé, thẻ, phiếu...\" },\r\n { id: \"6\", value: \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n var res = kyhieu.replace(kyhieu.substring(0, 1), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Hình thức\",\r\n name: \"hthuc\",\r\n id: \"hthuc\",\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n labelWidth: 120,\r\n value: \"K\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n\r\n var res = kyhieu.replace(kyhieu.substring(1, 2), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n },\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Kiểu hóa đơn\",\r\n name: \"khdon\",\r\n id: \"khdon\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Hình thức không được bỏ trống\",\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tự đăng ký sử dụng\" },\r\n { id: \"D\", value: \"Hóa đơn đặc thù\" },\r\n { id: \"L\", value: \"Hóa đơn CQT cấp từng lần\" },\r\n { id: \"M\", value: \"Hóa đơn khởi tạo từ máy tính tiền\" },\r\n { id: \"N\", value: \"PXKKVCNB\" },\r\n { id: \"B\", value: \"PXKGBĐL\" },\r\n { id: \"G\", value: \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng\" },\r\n { id: \"H\", value: \"Tem, vé, thẻ điện tử là hóa đơn bán hàng\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var kyhieu = $$(\"khhdon\").getValue();\r\n\r\n var res = kyhieu.replace(kyhieu.substring(4, 5), newv);\r\n $$(\"khhdon\").setValue(res);\r\n $$(\"khhdon\").refresh();\r\n\r\n if(newv === 'M')\r\n {\r\n $$(\"mtttien\").show();\r\n\r\n\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"khhdon\",\r\n id: \"khhdon\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Ký hiệu không được bỏ trống hoặc sai định dạng\",\r\n attributes: {\r\n maxlength: 7,\r\n },\r\n validate: function(value) {\r\n var regex = /^[A-Z1-9]{1,7}$/;\r\n return regex.test(value);\r\n }\r\n \r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã máy tính tiền\",\r\n name: \"mtttien\",\r\n id: \"mtttien\",\r\n hidden: true,\r\n labelWidth: 120,\r\n attributes: {\r\n maxlength: 5,\r\n },\r\n },\r\n {\r\n id: \"sdmau\",\r\n name: \"sdmau\",\r\n label: \"Số dòng in mẫu\",\r\n labelWidth: 120,\r\n view: \"text\",\r\n value: 1,\r\n required: true,\r\n validate: function (val) {\r\n return !isNaN(val * 1) && val * 1 >= 0;\r\n },\r\n invalidMessage: \"Phải nhập số dương\",\r\n attributes: { type: \"number\" },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Mẫu thiết kế\",\r\n name: \"qlmtke_id\",\r\n id: \"qlmtke_id\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Mẫu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00053\",\r\n on: {\r\n onChange: function (newv, oldv) {},\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n if(editmode ==1) {\r\n webix\r\n .ajax()\r\n .get(app.config.host + \"/Invoice68/GetMaTinhTien\", function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"mtttien\").setValue(json['mccqt']);\r\n $$(\"mtttien\").refresh();\r\n });\r\n }\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n\r\n\r\n },\r\n };\r\n});\r\n\ndefine('views/68_kyhieu',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieuForm\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var initUI = function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var url = app.config.host + \"/Invoice68/GetDataquanlykyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var item = {\r\n columnName: \"code\",\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var submenuChucNang = webix.ui({\r\n id: \"submnchucnang\",\r\n view: \"submenu\",\r\n width: 250,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"UploadTemplate\",\r\n value: \"Tải mẫu lên\",\r\n },\r\n {\r\n id: \"SignTemplate\",\r\n value: \"Ký mẫu hóa đơn\",\r\n },\r\n {\r\n id: \"PreviewTemplate\",\r\n value: \"Xem mẫu hóa đơn (PDF)\",\r\n },\r\n {\r\n id: \"DownloadTemplate\",\r\n value: \"Tải mẫu thiết kế (.repx)\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n var selectedItem = webix.$$(\"congvieckinhdoanh\").getSelectedItem();\r\n if (selectedselectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng !\", \"error\");\r\n return;\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Ký hiệu đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"paramDonvi\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[id] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n kyhieuForm.initUI(params);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n var dataPost = {\r\n id: selectedItem.qlkhsdung_id,\r\n editmode: 3\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deletequanlykyhieu68\", dataPost, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(\"Xóa ký hiệu \" + selectedItem.khhdon + \" không thành công\", \"error\");\r\n console.error(json.error);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n webix.message(\"Xóa ký hiệu \" + selectedItem.khhdon + \" thành công\", \"success\");\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon?id=\" + item.qlkhsdung_id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"index\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00053\",\r\n */\r\n },\r\n ],\r\n width: 250,\r\n },\r\n {\r\n id: \"lhdon\",\r\n header: [\r\n \"Loại hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn GTGT (1)\" },\r\n { id: \"2\", value: \"Hóa đơn bán hàng (2)\" },\r\n { id: \"3\", value: \"Hóa đơn điện tử bán tài sản công (3)\" },\r\n { id: \"4\", value: \"Hóa đơn điện tử bán hàng dự trữ quốc gia (4)\" },\r\n { id: \"5\", value: \"Hóa đơn khác: tem, vé, thẻ, phiếu... (5)\" },\r\n { id: \"6\", value: \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý (6)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.lhdon) {\r\n case 1:\r\n return \"Hóa đơn GTGT (1)\";\r\n case 2:\r\n return \"Hóa đơn bán hàng (2)\";\r\n case 3:\r\n return \"Hóa đơn điện tử bán tài sản công (3)\";\r\n case 4:\r\n return \"Hóa đơn điện tử bán hàng dự trữ quốc gia (4)\";\r\n case 5:\r\n return \"Hóa đơn khác: tem, vé, thẻ, phiếu... (5)\";\r\n case 6:\r\n return \"Phiếu xuất kho kiêm vận chuyển nội bộ/ hàng gửi bán đại lý (6)\";\r\n default:\r\n return obj.lhdon;\r\n }\r\n },\r\n */\r\n },\r\n {\r\n id: \"hthuc\",\r\n header: [\r\n \"Hình thức\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"K\", value: \"Hóa đơn không có mã của CQT (K)\" },\r\n { id: \"C\", value: \"Hóa đơn có mã của CQT (C)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.hthuc) {\r\n case \"K\":\r\n return \"Hóa đơn không có mã của CQT (K)\";\r\n case \"C\":\r\n return \"Hóa đơn có mã của CQT (C)\";\r\n default:\r\n return null; // Handle default case if needed\r\n }\r\n }\r\n */\r\n },\r\n {\r\n id: \"khdon\",\r\n header: [\r\n \"Kiểu hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n /* Code tối ưu ui \r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"T\", value: \"Tự đăng ký sử dụng (T)\" },\r\n { id: \"D\", value: \"Hóa đơn đặc thù (D)\" },\r\n { id: \"L\", value: \"Hóa đơn CQT cấp từng lần (L)\" },\r\n { id: \"M\", value: \"Hóa đơn khởi tạo từ máy tính tiền (M)\" },\r\n { id: \"N\", value: \"PXKKVCNB (N)\" },\r\n { id: \"B\", value: \"PXKGBĐL (B)\" },\r\n { id: \"G\", value: \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng (G)\" },\r\n { id: \"H\", value: \"Tem, vé, thẻ điện tử là hóa đơn bán hàng (H)\" },\r\n ],\r\n */\r\n },\r\n ],\r\n width: 120,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n /* Code tối ưu ui \r\n template: function (obj) {\r\n switch (obj.khdon) {\r\n case \"T\":\r\n return \"Tự đăng ký sử dụng (T)\";\r\n case \"D\":\r\n return \"Hóa đơn đặc thù (D)\";\r\n case \"L\":\r\n return \"Hóa đơn CQT cấp từng lần (L)\";\r\n case \"M\":\r\n return \"Hóa đơn khởi tạo từ máy tính tiền (M)\";\r\n case \"N\":\r\n return \"PXKKVCNB (N)\";\r\n case \"B\":\r\n return \"PXKGBĐL (B)\";\r\n case \"G\":\r\n return \"Tem, vé, thẻ điện tử là hóa đơn giá trị gia tăng (G)\";\r\n case \"H\":\r\n return \"Tem, vé, thẻ điện tử là hóa đơn bán hàng (H)\";\r\n default:\r\n return null; // Handle default case if needed\r\n }\r\n }\r\n */\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"sdmau\",\r\n header: [\r\n \"Số dòng in mẫu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 160,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\r\n \"Người lập\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"tt_sd\",\r\n header: [\r\n \"Sử dụng\",\r\n ],\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"paramDonvi\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"code\",\r\n view: \"combo\",\r\n width: 800,\r\n label: _(\"Đơn vị\"),\r\n options: {\r\n body: {\r\n //comboId: comp.id,\r\n // isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\",\r\n ready: function () {\r\n // if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(\"code\");\r\n combo.setValue(this.getFirstId());\r\n }\r\n // }\r\n },\r\n },\r\n },\r\n // value_field: item.value_field,\r\n // isDefault: item.has_default,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var table = $$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"kyhieu\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n \r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý ký hiệu hóa đơn sử dụng\",\r\n details: \"Quản lý ký hiệu hóa đơn sử dụng\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
BIÊN BẢN HỦY BIÊN LAI
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n // fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
BIÊN BẢN HỦY BIÊN LAI
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n //required: true,\r\n //invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"loaihd\",\r\n name: \"loaihd\",\r\n width: 150,\r\n value: 1,\r\n hidden: true,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n readonly: true,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n // block editors in 'year' column\r\n return false;\r\n } else if (id.column == \"shdon\") {\r\n return false;\r\n }\r\n // else if (id.column == \"ladhddt\") {\r\n // return false;\r\n // }\r\n else if (id.column == \"ngay\") {\r\n return false;\r\n } else if (id.column == \"huygiaitrinh\") {\r\n return false;\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"id\", hidden: true, header: \"id\" },\r\n { id: _(\"khieu\"), width: 120, header: \"khieu\" },\r\n { id: _(\"shdon\"), width: 350, header: \"shdon\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02010\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var selectedItem = table.getSelectedItem();\r\n selectedItem[\"shdon\"] = obj[\"shdon\"];\r\n selectedItem[\"ngay\"] = obj[\"nlap\"];\r\n selectedItem[\"huygiaitrinh\"] = 1;\r\n selectedItem[\"hdon_id\"] = obj[\"id\"];\r\n selectedItem[\"ladhddt\"] = 1;\r\n selectedItem[\"tctbao\"] = 1;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số biên lai\",\r\n width: 200,\r\n editor: \"text\",\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 200,\r\n editor: \"text\",\r\n //format: webix.i18n.dateFormatStr,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Loại\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n readonly: true,\r\n value: 1,\r\n options: [{ id: 1, value: \"Hủy\" }],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\",\r\n view: \"button\",\r\n id: \"btnLuuTamHDDT\",\r\n label: \"Lưu tạm(F9)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n item.loaihd = 2;\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin biên lai cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSignBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thành công, trạng thái biên lai chỉ thay đổi khi ký biên bản !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký(F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n item.loaihd = 2;\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin biên lai cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n \r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n data_post.signMode = 1;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSignBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n // $$(\"dclhe\").setValue(json[0].address);\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt);\r\n // $$(\"dctdtu\").setValue(json[0].email);\r\n // $$(\"nlhe\").setValue(json[0].manage);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n setValuesEdit: function (item, winconfig, params) {\r\n $$(\"huyhoadon\").parse(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mau0405_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_huyhoadon_bienlai\"], function (app, _, user, form_0405) {\r\n \r\n var param;\r\n webix.$$(\"title\").parse({\r\n title: \"Thông báo hủy và rà soát biên lai\",\r\n details: \"Bảng tổng hợp biên lai\",\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mau04_68\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/getDatamau04\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array)) ;\r\n }\r\n }\r\n webix.ajax(url+\"&loaihd=2\", callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \"Thêm mới \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n\r\n form_0405.setEditMode(2);\r\n form_0405.setValuesEdit(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"huyhoadon\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"danhsach_hoadonhuy\").define(\"editable\",\"false\");\r\n $$(\"danhsach_hoadonhuy\").refresh();\r\n $$(\"btnLuuTamHDDT\").destructor();\r\n $$(\"btnGhiSignHuyHDDT\").destructor();\r\n }\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + selectedItem.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa biên lai\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau04\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký, bạn không thể ký lại! \", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: selectedItem.id,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: selectedItem.id,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết biên lai\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n // scroll: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"mau04_id\",\r\n name: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau04_chitiet_id\",\r\n name: \"mau04_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Mẫu số\",\r\n id: \"mau_so\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu\",\r\n width: 150,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số biên lai\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n template: function (obj) {\r\n switch (obj.tctbao) {\r\n case 1:\r\n return \"Hủy\";\r\n case 3:\r\n return \"Thay thế\";\r\n case 4:\r\n return \"Giải trình\";\r\n case 5:\r\n return \"Điều chỉnh tăng\";\r\n case 6:\r\n return \"Điều chỉnh giảm\";\r\n case 7:\r\n return \"Điều chỉnh khác\";\r\n default:\r\n break;\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n // scrollX: false,\r\n // autoheight: true,\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n // ShowHistory: function (event, cell, target){\r\n // debugger\r\n // var table = webix.$$(\"mau04_68\");\r\n // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // var hdon_id = cell.row;\r\n // hoadonHistory.setEditMode(hdon_id);\r\n // win.show();\r\n // },\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"biên lai điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/Invoice68/inMau04SS?id=\" + item.id, function (text) {\r\n var result = text.replace(new RegExp(\"\\\\\" + \"\\\\\", \"gi\"), \"\");\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n \"\" +\r\n '
' +\r\n result +\r\n \"
\" +\r\n \"\";\r\n newWin.document.write(html);\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"mau04_id\",\r\n header: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n template: \"{common.subrow()}\",\r\n width: 50,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"shdon\",\r\n header: [\r\n \"Số biên lai\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n\r\n width: 200,\r\n },\r\n {\r\n id: \"loai_tbao\",\r\n header: [\r\n \"Loại thông báo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.loai_tbao == \"5\" ? \"biên lai cần rà soát\" : \"Thông báo biên lai sai sót\";\r\n },\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa ký\" },\r\n { id: \"1\", value: \"Đã ký\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n ],\r\n // data: [\r\n // {\r\n // stt: 1,\r\n // loai_tb: \"4\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"001\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // },\r\n // {\r\n // stt: 2,\r\n // loai_tb: \"5\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"002\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // }\r\n // ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // if (mode == 1) {\r\n // table.add(item);\r\n // }\r\n // if (mode == 5) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_huyhoadon_32-78',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/68_mau0405\"], function (app, _, user, invoiceForms, mau0405) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Thông báo sai sót hóa đơn điện tử
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n width: 1100,\r\n height: 600,\r\n move: true,\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n position: \"center\",\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n template: \"
THÔNG BÁO SAI SÓT HÓA ĐƠN ĐIỆN TỬ
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Kính gửi: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 100,\r\n width: 300,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"Tên cơ quan thuế quản lý\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã đơn vị quan hệ ngân sách\",\r\n id: \"mdvqhnsach\",\r\n name: \"mdvqhnsach\",\r\n labelWidth: 200,\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên người nộp thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Tên người nộp thuế không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n id: \"mcqt\",\r\n name: \"mcqt\",\r\n label: \"Mã cơ quan thuế\",\r\n labelWidth: 150,\r\n required: true,\r\n invalidMessage: \"Mã cơ quan thuế quản lý không được để trống !\",\r\n view: \"text\",\r\n attributes: { maxlength: 5 },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa danh\",\r\n labelWidth: 150,\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa danh không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n label: \"Loại hóa đơn\",\r\n labelWidth: 150,\r\n id: \"lhdon\",\r\n name: \"lhdon\",\r\n value: \"1\",\r\n options: [\r\n { id: \"1\", value: \"Hóa đơn TT32\" }, // the initially selected item\r\n { id: \"2\", value: \"Hóa đơn TT78 nhà cung cấp khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv !== undefined && newv !== null) {\r\n if (newv === \"2\") {\r\n $$(\"danhsach_hoadonhuy\").editStop();\r\n $$(\"danhsach_hoadonhuy\").clearAll();\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mcqtcap\");\r\n } else {\r\n $$(\"danhsach_hoadonhuy\").editStop();\r\n $$(\"danhsach_hoadonhuy\").clearAll();\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mcqtcap\");\r\n }\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n label: \"Loại TBSS\",\r\n labelWidth: 150,\r\n id: \"tctbao_all\",\r\n name: \"tctbao_all\",\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { tctbao: newv }); \r\n }\r\n \r\n }\r\n }\r\n },\r\n {\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Lý do\",\r\n labelWidth: 150,\r\n id: \"ldo_all\",\r\n name: \"ldo_all\",\r\n on: {\r\n onblur: function () {\r\n var datatable = $$(\"danhsach_hoadonhuy\");\r\n var items = datatable.serialize(); \r\n if(items.length < 1){\r\n return;\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n datatable.updateItem(items[i].id, { ldo: this.getValue()}); \r\n }\r\n \r\n }\r\n }\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n { height: 3 },\r\n {\r\n template: \"Người nộp thuế thông báo về việc hủy/điều chỉnh/thay thế/giải trình hóa đơn điện tử do sai sót như sau:\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n label: \" (F9)\",\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var checkHD78 = $$(\"lhdon\").getValue();\r\n var ladhddt = checkHD78 === \"1\" ? 3 : 1;\r\n var item = { id: webix.uid(), ngay: new Date(), ladhddt: ladhddt, tctbao: \"1\" };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n autowidth: true,\r\n label: \" (F8)\",\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n name: \"danhsach_hoadonhuy\",\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mcqtcap\",\r\n name: \"mcatcap\",\r\n header: \"Mã cơ quan thuế cấp\",\r\n width: 100,\r\n editor: \"text\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau_so\",\r\n name: \"mau_so\",\r\n header: _(\"Mẫu số HĐ\"),\r\n editor: \"text\",\r\n width: 120,\r\n require: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu HĐ\"),\r\n editor: \"text\",\r\n width: 120,\r\n require: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn\",\r\n width: 120,\r\n editor: \"text\",\r\n require: true,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 150,\r\n editor: \"date\",\r\n require: true,\r\n format: webix.Date.dateToStr(\"%d/%m/%Y\"),\r\n },\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n editable: false,\r\n width: 400,\r\n editor: \"combo\",\r\n require: true,\r\n options: [\r\n { id: 1, value: \"Hóa đơn điện tử theo Nghị định 123/2020/NĐ-CP\" },\r\n { id: 2, value: \"Hóa đơn điện tử có mã xác thực của cơ quan thuế theo Quyết định số 1209/QĐ-BTC\" },\r\n { id: 3, value: \"Các loại hóa đơn theo Nghị định số 51/2010/NĐ-CP và Nghị định số 04/2014/NĐ-CP\" },\r\n { id: 4, value: \"Hóa đơn đặt in theo Nghị định 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n editor: \"combo\",\r\n require: true,\r\n options: [\r\n { id: \"1\", value: \"Hủy\" },\r\n { id: \"3\", value: \"Thay thế\" },\r\n { id: \"4\", value: \"Giải trình\" },\r\n { id: \"5\", value: \"Điều chỉnh tăng\" },\r\n { id: \"6\", value: \"Điều chỉnh giảm\" },\r\n { id: \"7\", value: \"Điều chỉnh khác\" },\r\n ],\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n editable: true,\r\n editor: \"text\",\r\n width: 300,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnStep299\",\r\n label: \"Lưu, chuyển sang bước tiếp theo\",\r\n type: \"form\",\r\n hidden: true,\r\n align: \"center\",\r\n click: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var detailForm = self.$scope.ui(invoiceForms.$ui);\r\n\r\n var cctbao_id = webix.$$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(null, data_post, null);\r\n detailForm.show();\r\n }, 100);\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnGhiHuyhoadon\",\r\n label: \"Ghi (F10)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: cks });\r\n item.details = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n var table1 = webix.$$(\"mau04_68\");\r\n table1.clearAll();\r\n table1.load(table1.config.url);\r\n table1.show();\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnGhiSignHuyHDDT\",\r\n label: \"Ký và gửi CQT (F14)\",\r\n width: 150,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n \r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n self.disable();\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n self.enable();\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n if (json.hasOwnProperty(\"id\")) { \r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n }\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n if (json.hasOwnProperty(\"id\")) { \r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n }\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message(\r\n \"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\",\r\n \"error\"\r\n );\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n $$(\"huyhoadonForms\").close(); \r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(\"Tạo thông báo sai sót thành công !\", \"success\");\r\n webix.message({ type: \"error\", text: json.error });\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n self.enable();\r\n });\r\n }\r\n }, 100);\r\n self.enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F4\",\r\n view: \"button\",\r\n id: \"btnSaveSignGiaiTrinh\",\r\n label: \"Ký và gửi CQT\",\r\n width: 150,\r\n hidden: true,\r\n align: \"center\",\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"huyhoadon\").getValues();\r\n var table = $$(\"huyhoadon\");\r\n\r\n if (table.validate()) {\r\n var cks = $$(\"danhsach_hoadonhuy\").serialize();\r\n if (cks.length == 0) {\r\n webix.message(\"Bạn chưa nhập thông tin hóa đơn cần hủy !\", \"error\");\r\n return;\r\n }\r\n var details = [];\r\n details.push({ data: $$(\"danhsach_hoadonhuy\").serialize() });\r\n item[\"details\"] = details;\r\n\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var tableDK = $$(\"huyhoadon\");\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/giaitrinhSaveSign\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSave\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 1,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedMau0405\", [null, null]);\r\n webix.message(\"Thành công !\", \"success\");\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt_ql);\r\n $$(\"ddanh\").setValue(json[0].city);\r\n $$(\"mcqt\").setValue(json[0].manage_tax_authorities);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item.detail);\r\n $$(\"huyhoadon\").parse(item);\r\n var ladhddt = item.detail[0].ladhddt;\r\n if (ladhddt === 3) {\r\n $$(\"lhdon\").define(\"value\", \"1\");\r\n $$(\"lhdon\").disable();\r\n } else {\r\n $$(\"lhdon\").define(\"value\", \"2\");\r\n $$(\"lhdon\").disable();\r\n $$(\"danhsach_hoadonhuy\").hideColumn(\"mau_so\");\r\n $$(\"danhsach_hoadonhuy\").showColumn(\"mcqtcap\");\r\n }\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mau0405',[\"app\", \"locale\", \"models/user\", \"views/commonHD\", \"views/forms/68_huyhoadon_32-78\"], function (app, _, user, commonHD, form_0405) {\r\n \r\n var param;\r\n webix.$$(\"title\").parse({\r\n title: \"Thông báo hủy và rà soát hóa đơn\",\r\n details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/getDatamau04\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 200,\r\n label: ' ' + '' + \"Sai sót TT32/NCC khác \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký và gửi CQT bạn không thể sửa! \", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"Mẫu 05 nhận từ CQT bạn không thể sửa! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.is_hdon78 == 1) {\r\n webix.message(\"Mẫu được này không được chỉnh sửa\");\r\n return;\r\n }\r\n\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(2);\r\n var item = table.getSelectedItem();\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n var result = webix.ajax().sync().get(url);\r\n var json = JSON.parse(result.response);\r\n item.detail = json;\r\n form_0405.setValues(item);\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var lstDataChoose = commonHD.GetHoaDonChonOfTableId({ id: \"mau04_68\" });\r\n\r\n if (lstDataChoose == null) {\r\n webix.message(\"Bạn chưa chọn thông báo ! \", \"error\");\r\n return;\r\n }\r\n\r\n for (var index = 0; index < lstDataChoose.length; index++) {\r\n var selectedItem = lstDataChoose[index];\r\n\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n index--;\r\n } else if (selectedItem.loai_tbao == \"5\") {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n index--;\r\n }\r\n }\r\n\r\n if (lstDataChoose.length > 0) {\r\n var text = \"Bạn có muốn xóa:\";\r\n lstDataChoose.forEach(function (selectedItem) {\r\n text += '' + \" TBSS số \" + selectedItem.shdon + \" kí hiệu \" + selectedItem.khieu + '' + \", \"\r\n })\r\n text += \"?\";\r\n webix.confirm({\r\n text: text,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var arrid = [];\r\n lstDataChoose.forEach(function (item) {\r\n arrid.push(item.id);\r\n })\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau04\", { arrid: arrid }, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.ok) {\r\n webix.message('Xóa thành công', \"success\");\r\n }\r\n else {\r\n var errarr = json.error;\r\n for (var erri = 0; erri < errarr.length; erri++) {\r\n webix.message(errarr[erri].error, \"error\");\r\n }\r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký gửi CQT\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var lstDataChoose = commonHD.GetHoaDonChonOfTableId({ id: \"mau04_68\" });\r\n\r\n if (lstDataChoose == null) {\r\n webix.message(\"Bạn chưa chọn thông báo ! \", \"error\");\r\n return;\r\n }\r\n\r\n for (var index = 0; index < lstDataChoose.length; index++) {\r\n var selectedItem = lstDataChoose[index];\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"TBSS số \" + selectedItem.shdon + \", kí hiệu \" + selectedItem.khieu + \": Mẫu đã ký và gửi CQT bạn không thể ký lại! \", \"error\");\r\n lstDataChoose.splice(index, 1);\r\n return;\r\n }\r\n }\r\n var arrid = [];\r\n lstDataChoose.forEach(function (item) {\r\n arrid.push(item.id);\r\n })\r\n if (lstDataChoose.length > 0) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n ids: arrid,\r\n };\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text).res;\r\n var hasError = false;\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n if (item.hasOwnProperty(\"error\")) {\r\n webix.message(item.error, \"error\");\r\n hasError = true;\r\n }\r\n }\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!hasError) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n }\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n ids: arrid,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/huyhoadonSign\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlMau0405?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlMau0405\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"mau04_id\",\r\n name: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"mau04_chitiet_id\",\r\n name: \"mau04_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Mẫu số\",\r\n id: \"mau_so\",\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"khieu\",\r\n name: \"khieu\",\r\n header: \"Ký hiệu hóa đơn điện tử\",\r\n width: 150,\r\n },\r\n {\r\n id: \"shdon\",\r\n name: \"shdon\",\r\n header: \"Số hóa đơn điện tử\",\r\n width: 120,\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập hóa đơn\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n\r\n {\r\n id: \"ladhddt\",\r\n name: \"ladhddt\",\r\n header: \"Loại áp dụng hóa đơn điện tử\",\r\n template: function (obj) {\r\n switch (obj.ladhddt) {\r\n case 1:\r\n return \"HĐĐT Nghị đinh số 123/2020/NĐ-CP \";\r\n case 2:\r\n return \"HĐĐT có mã của cơ quan thu \";\r\n case 3:\r\n return \"Các loại hóa đơn theo Nghị đinh 51/2010 \";\r\n case 4:\r\n return \"Hóa đơn đặt in theo Nghị định số 123/2020/NĐ-C \";\r\n default:\r\n break;\r\n }\r\n },\r\n width: 150,\r\n },\r\n {\r\n id: \"tctbao\",\r\n name: \"tctbao\",\r\n header: \"Hủy/Điều chỉnh/Thay thế/Giải trình\",\r\n editable: true,\r\n width: 200,\r\n template: function (obj) {\r\n switch (obj.tctbao) {\r\n case 1:\r\n return \"Hủy\";\r\n case 3:\r\n return \"Thay thế\";\r\n case 4:\r\n return \"Giải trình\";\r\n case 5:\r\n return \"Điều chỉnh tăng\";\r\n case 6:\r\n return \"Điều chỉnh giảm\";\r\n case 7:\r\n return \"Điều chỉnh khác\";\r\n default:\r\n break;\r\n }\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n {\r\n id: \"tttnhan\",\r\n name: \"tttnhan\",\r\n header: \"Trạng thái tiếp nhận\",\r\n template: function (obj) {\r\n if (obj.tttnhan == 1) {\r\n return \"Chấp thuận \";\r\n } else {\r\n if (obj.tttnhan == 2) {\r\n return \"Không chấp thuận \";\r\n } else {\r\n return \"Chờ phản hồi\";\r\n }\r\n }\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"ly_do\",\r\n name: \"ldly_doo\",\r\n header: \"Lý do không tiếp nhận\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n },\r\n },\r\n onClick: {\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n });\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMau04Rep?id=\" + item.id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () { },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n resize: false,\r\n },\r\n {\r\n id: \"mau04_id\",\r\n header: \"mau04_id\",\r\n hidden: true,\r\n },\r\n {\r\n template: \"{common.subrow()}\",\r\n width: 50,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"shdon\",\r\n header: [\r\n \"Số hóa đơn\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"selectFilter\",\r\n },\r\n ],\r\n\r\n width: 200,\r\n },\r\n {\r\n id: \"loai_tbao\",\r\n header: [\r\n \"Loại thông báo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.loai_tbao == \"5\" ? \"Hóa đơn cần rà soát\" : \"Thông báo hóa đơn sai sót\";\r\n },\r\n },\r\n {\r\n id: \"trang_thai\",\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverSelectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"0\", value: \"Chưa gửi CQT\" },\r\n { id: \"1\", value: \"Đã gửi CQT\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \"\";\r\n } else {\r\n return obj.trang_thai == 1\r\n ? \" Đã gửi CQT\"\r\n : \" Chưa gửi CQT\";\r\n }\r\n },\r\n },\r\n {\r\n id: \"cqtphoi\",\r\n header: [\r\n \"
Trạng thái tiếp nhận CQT
\",\r\n {\r\n content: \"serverSelectFilter\",\r\n value: \"\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"1\", value: \"Đã nhận phản hồi\" },\r\n { id: \"0\", value: \"Chưa nhận phản hồi\" },\r\n ],\r\n },\r\n ],\r\n // sort: \"int\",\r\n width: 150,\r\n\r\n template: function (obj) {\r\n return obj.cqtphoi == \"1\" ? \"Đã nhận phản hồi\" : \"Chưa nhận phản hồi\";\r\n },\r\n },\r\n\r\n {\r\n id: \"mtdiep_gui\",\r\n header: [\"Mã thông điệp gửi\"],\r\n\r\n width: 350,\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"ngay_gui\",\r\n header: [\r\n \"Ngày gửi\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \" \";\r\n } else {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n }\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.loai_tbao == \"5\") {\r\n return \" \";\r\n } else {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n }\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"nguoi_gui\",\r\n header: [\r\n \"Người gửi\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"Dowload0405Rep\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"btnInMau0405Rep\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.xml_nhan != null && obj.xml_nhan != \"\") {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"mtdiepcqt\",\r\n header: [\"\", \"Mã thông điệp CQT\"],\r\n width: 250,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_mauthietkeform',[\"app\", \"models/user\"], function (app, user) {\r\n var editmode = 0;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var table = $$(\"mauthietke-form\");\r\n var item = table.getValues();\r\n if (table.validate()) {\r\n item.editmode = editmode;\r\n $$(\"uploader68\").define(\"upload\", app.config.host + \"/Invoice68/quanlymau68\");\r\n $$(\"uploader68\").define(\"formData\", item);\r\n $$(\"uploader68\").send(function (res) {\r\n if (res != undefined) {\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Tạo mẫu thành công\", \"success\");\r\n\r\n var win = $$(\"uploader68\").getTopParentView();\r\n win.close();\r\n\r\n var table = $$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n } else {\r\n webix.message(\"Bạn chưa chọn mẫu \", \"error\");\r\n }\r\n });\r\n }\r\n }, 100);\r\n\r\n // $$(\"uploader68\").refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"mauthietke-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"mauthietke-win\",\r\n position: \"center\",\r\n head: \"Mẫu hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"mauthietke-form\",\r\n complexData: true,\r\n margin: 0,\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"mauthietke_id\",\r\n // id: \"mauthietke_id\",\r\n // name: \"mauthietke_id\",\r\n // hidden: true\r\n // },\r\n {\r\n view: \"text\",\r\n label: \"Mã mẫu\",\r\n name: \"mmau\",\r\n id: \"mmau\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 120,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tên mẫu\",\r\n name: \"tmau\",\r\n id: \"tmau\",\r\n labelWidth: 120,\r\n required: true,\r\n invalidMessage: \"Tên mẫu không được bỏ trống hoặc không đúng định dạng\",\r\n },\r\n {\r\n view: \"select\",\r\n label: \"Phân cách hàng nghìn\",\r\n name: \"thousand_point\",\r\n id: \"thousand_point\",\r\n labelWidth: 200,\r\n options: [\r\n { id: \".\", value: \"Dấu chấm\" },\r\n { id: \",\", value: \"Dấu phẩy\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \",\") {\r\n $$(\"decimal_point\").setValue(\".\");\r\n } else {\r\n $$(\"decimal_point\").setValue(\",\");\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"select\",\r\n label: \"Phân cách hàng thập phân\",\r\n name: \"decimal_point\",\r\n id: \"decimal_point\",\r\n options: [\r\n { id: \",\", value: \"Dấu phẩy\" },\r\n { id: \".\", value: \"Dấu chấm\" },\r\n ],\r\n labelWidth: 120,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == \",\") {\r\n $$(\"thousand_point\").setValue(\".\");\r\n } else {\r\n $$(\"thousand_point\").setValue(\",\");\r\n }\r\n },\r\n },\r\n },\r\n\r\n {\r\n view: \"uploader\",\r\n value: \"Upload file\",\r\n label: \"Mẫu thiết kế\",\r\n id: \"uploader68\",\r\n name: \"uploader68\",\r\n link: \"mylist\",\r\n accept: \"repx\",\r\n autosend: false,\r\n multiple: false,\r\n // upload: app.config.host + \"\",\r\n on: {\r\n onUploadComplete: function (response) {},\r\n onFileUploadError: function (file, response) {},\r\n onAfterDelete: function (id) {},\r\n },\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n autoheight: true,\r\n borderless: true,\r\n },\r\n {\r\n height: 20,\r\n },\r\n {\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var form = $$(\"mauthietke-form\");\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (app, _, user, mauthietkeform) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế biên lai\",\r\n details: \"Quản lý mẫu thiết kế biên lai\",\r\n });\r\n\r\n var loaimau =2;\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam) +\"&loaimau=\"+loaimau;\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n var selectedItem ={loaimau:2}\r\n mauthietkeform.setEditMode(1);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu biên lai\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu biên lai\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu biên lai (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế biên lai\",\r\n details: \"Quản lý mẫu thiết kế biên lai\",\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (app, _, user, mauthietkeform) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế Chứng từ thuế thu nhập cá nhân\",\r\n details: \"Quản lý mẫu thiết kế Chứng từ thuế thu nhập cá nhân\",\r\n });\r\n\r\n var loaimau =3;\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu Chứng từ cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu Chứng từ cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam) +\"&loaimau=\"+loaimau;\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n var selectedItem ={loaimau:3}\r\n mauthietkeform.setEditMode(1);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu chứng từ\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n $$(\"mauthietke-win\").getHead().setHTML(\"Mẫu chứng từ\");\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu chứng từ (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/68_mauthietke',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_mauthietkeform\"], function (commonHD, app, _, user, mauthietkeform) {\r\n \r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauBangKe\",\r\n value: \"Thêm mẫu bảng kê\",\r\n },\r\n {\r\n id: \"taiMauBangKe\",\r\n value: \"Tải mẫu bảng kê\",\r\n },\r\n {\r\n id: \"inMauBangKe\",\r\n value: \"In mẫu bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần thêm mẫu bảng kê ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu bảng kê\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadBangKeTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauBangKe\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải bảng kê! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Chưa có mẫu bảng kê để tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxBangKe?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu bảng kê (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"BangKeTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauBangKe\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmaubangke == 0) {\r\n webix.message(\"Mẫu bảng kê của hoá đơn chưa có để in ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu bảng kê của hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=1\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var subPhieuThu = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addMauPhieuThu\",\r\n value: \"Thêm mẫu phiếu thu\",\r\n },\r\n {\r\n id: \"taiMauPhieuThu\",\r\n value: \"Tải mẫu phiếu thu\",\r\n },\r\n {\r\n id: \"inMauPhieuThu\",\r\n value: \"In mẫu phiếu thu\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (record.id == \"addMauPhieuThu\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần thêm mẫu phiếu thu ! \", \"error\");\r\n return;\r\n }\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu phiếu thu\");\r\n win.show();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice68/UploadPhieuThuTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: selectedItem.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n\r\n if (record.id == \"taiMauPhieuThu\") {\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải phiếu thu! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.checkmauphieuthu == 0) {\r\n webix.message(\"Chưa tồn tại mẫu phiếu thu! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepxPhieuThu?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu phiếu thu (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"PhieuThuTemplate.repx\");\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n\r\n if (record.id == \"inMauPhieuThu\") {\r\n if (selectedItem == null || selectedItem == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in phiếu thu!\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.checkmauphieuthu == 0) {\r\n webix.message(\"Chưa tồn tại mẫu phiếu thu ! \", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu phiếu thu của hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + selectedItem.id + \"&checkLoaiMau=2\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n //var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"mauthietke\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDataQlymau\";\r\n var donVi = user.getDvcsID();\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n var tlbParam = [\r\n {\r\n columnName: \"code\",\r\n value: donVi,\r\n },\r\n ];\r\n // tlbParam = [];\r\n url = url + \"&tlbParam=\" + JSON.stringify(tlbParam);\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n mauthietkeform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần sửa ! \", \"error\");\r\n return;\r\n }\r\n\r\n // if (selectedItem.tt_sd > 0) {\r\n // webix.message(\"Mẫu thiết kế đã sử dụng không thể sửa ! \", \"error\");\r\n // return;\r\n // }\r\n var detailForm = this.$scope.ui(mauthietkeform.$ui);\r\n\r\n mauthietkeform.setEditMode(2);\r\n mauthietkeform.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu thiết kế ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.tt_sd > 0) {\r\n webix.message(\"Mẫu thiết kế đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/deleteMau68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.error !== undefined) webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Tải\") + \"\",\r\n id: \"btnDownload\",\r\n // view: \"button\",\r\n // id: \"btnDownload\",\r\n // type: \"icon\",\r\n // icon: \"download\",\r\n // label: \"Tải (F8)\",\r\n // width: 100,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần tải ! \", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/DowloadRepx?id=\" + selectedItem.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu hóa đơn (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnIn\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mauthietke\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMauHoadon_QuanLyMau?id=\" + item.id, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeMauIn\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeMauIn\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Phiếu thu\") + \"\",\r\n id: \"btnPhieuThuMauIn\",\r\n click: function () {\r\n subPhieuThu.show(webix.$$(\"btnPhieuThuMauIn\").$view);\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mauthietke\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.date_new) {\r\n // obj.date_new = new Date(obj.date_new);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"qlkhsdung_id\",\r\n header: \"qlkhsdung_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"ntao\",\r\n header: [\r\n \"Ngày tạo\",\r\n {\r\n content: \"serverDateRangeFilter\",\r\n },\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"mmau\",\r\n header: [\r\n \"Mã mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"tmau\",\r\n header: [\r\n \"Tên mẫu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n\r\n {\r\n id: \"ngtao\",\r\n header: [\r\n \"Người tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"decimal_point\",\r\n header: [\"Phân cách hàng thập phân\"],\r\n width: 200,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n template: function (obj) {\r\n console.log(\"thập phân \" + obj.decimal_point);\r\n var check = obj.decimal_point == \",\" ? \"Dấu phẩy\" : \"Dấu chấm\";\r\n return check;\r\n },\r\n },\r\n {\r\n id: \"thousand_point\",\r\n header: [\"Phân cách hàng nghìn\"],\r\n width: 200,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n template: function (obj) {\r\n console.log(\"hàng nghìn \" + obj.thousand_point);\r\n var check = obj.thousand_point == \".\" ? \"Dấu chấm\" : \"Dấu phẩy\";\r\n return check;\r\n },\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Sử dụng\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 90,\r\n template: function (obj) {\r\n var checked = obj.tt_sd > 0 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n {\r\n id: \"tt_sdung\",\r\n header: [\"Mẫu phiếu thu\"],\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n editor: \"checkbox\",\r\n width: 110,\r\n template: function (obj) {\r\n var checked = obj.checkmauphieuthu == 1 ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var table = webix.$$(\"mauthietke\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mauthietke\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show()\r\n }\r\n \r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mẫu thiết kế hóa đơn\",\r\n details: \"Quản lý mẫu thiết kế hóa đơn\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon_bienlai',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n item.id = item.phanhoadon_78_id\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n //labelPosition: \"top\",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02003\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon_bienlai\"], function (app, _, user, kyhieuForm) {\r\n \r\n var isActiveDbClick = true;\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array =[];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam) +\"&loaikh=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n if(isActiveDbClick) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Kí hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show();\r\n\r\n // Vẽ thêm thoong tin\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetConfigInvSymbol\", function (text) {\r\n var json = JSON.parse(text);\r\n var config = json['data']\r\n if(config == \"K\") {\r\n isActiveDbClick = false;\r\n webix.$$(\"btnPlus\").hide();\r\n webix.$$(\"btnEdit\").hide();\r\n webix.$$(\"btnDelete\").hide();\r\n } else {\r\n isActiveDbClick = true;\r\n }\r\n });\r\n \r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/DashboardTiles_License\", function (res) {\r\n var data = JSON.parse(res);\r\n console.log(data);\r\n\r\n if(data && data[\"items\"]) {\r\n var items = data[\"items\"];\r\n var total = items.find(function(e) {\r\n return e.css == \"orders\";\r\n })\r\n var used = items.find(function(e) {\r\n return e.css == \"number-orders\";\r\n })\r\n var available = items.find(function(e) {\r\n return e.css == \"users\";\r\n })\r\n\r\n $$(\"head-title\").removeView(\"head-title-subui\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"head-title-subui\",\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"label\", label: \"Tổng số hóa đơn đã đăng ký:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: total.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: used.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số hết hạn sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: \"0\", align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số còn lại:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: available.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n ]\r\n }\r\n ]\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng HĐ cho từng ký hiệu biên lai\",\r\n details: \"Quản lý số lượng HĐ cho từng ký hiệu biên lai\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon_tncn',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n //labelPosition: \"top\",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02000\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon_tncn\"], function (app, _, user, kyhieuForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng chứng từ cho từng ký hiệu chứng từ\",\r\n details: \"Quản lý số lượng chứng từ cho từng ký hiệu chứng từ\",\r\n });\r\n\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array =[];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam) +\"&loaikh=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu chứng từ cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", selectedItem, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: \"Ngày bắt đầu\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_hoadon',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n item.editmode = editmode;\r\n item.id = item.phanhoadon_78_id;\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu \",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"kyhieu_id\",\r\n label: \"Ký hiệu \",\r\n id: \"kyhieu_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n css: \"mcls_uppercase\",\r\n options: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00120\",\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tongso\",\r\n label: _(\"Số lượng\"),\r\n editor: \"autonumeric\",\r\n labelWidth: 120,\r\n required: true,\r\n css: { \"text-align\": \"right\" },\r\n validate: function (val) {\r\n if (val === undefined || val === null || val === \"\") return false;\r\n return !isNaN(val) && val >= 0 && val < 100000000;\r\n },\r\n attributes: { type: \"number\" },\r\n invalidMessage: \"Phải nhập số dương và nhỏ hơn 100000000\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n if (editmode == 2) {\r\n $$(\"kyhieu_id\").define(\"readonly\", true);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/68_quanlihoadon_kihieu',[\"views/commonHD\", \"app\", \"locale\", \"models/user\", \"views/forms/68_kyhieu_hoadon\"], function (commonHD, app, _, user, kyhieuForm) {\r\n \r\n var isActiveDbClick = true;\r\n var initUI = function () {\r\n // var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n\r\n // table.disable();\r\n // table.showProgress();\r\n // table.clearAll();\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetHoaDonkyhieu68\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n var array = [];\r\n if (params.filter != null) {\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n var arrayParam = [];\r\n var branchcode = {\r\n columnName: \"branch_code\",\r\n value: user.getDvcsID(),\r\n };\r\n arrayParam.push(branchcode);\r\n url = url + \"&tlbparam=\" + JSON.stringify(arrayParam);\r\n view.config.params = params\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n commonHD.clear_filter(table);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n kyhieuForm.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn! \", \"error\");\r\n return;\r\n }\r\n var detailForm = this.$scope.ui(kyhieuForm.$ui);\r\n\r\n kyhieuForm.setEditMode(2);\r\n kyhieuForm.setValues(selectedItem);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"kyhieu_hoadon\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn ký hiệu hóa đơn cần xóa ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.sosudung > 0) {\r\n webix.message(\"Ký hiệu đã sử dụng không thể xóa ! \", \"error\");\r\n return;\r\n }\r\n selectedItem.editmode = 3;\r\n var dataPost = {\r\n editmode: 3,\r\n id: selectedItem.phanhoadon_78_id,\r\n kyhieu_id: selectedItem.kyhieu_id\r\n }\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonkihieu68\", dataPost, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message(res.error, \"error\");\r\n } else {\r\n table.remove(selectedItem.id);\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"kyhieu_hoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 0; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n \r\n if (columnlst[i].id == \"chinhphu\") {\r\n exporttype = \"string\";\r\n }\r\n \r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n exportType: exporttype\r\n };\r\n \r\n arrcolumn.push(item);\r\n } \r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n debugger\r\n\r\n webix.toExcel($$(\"kyhieu_hoadon\"), {\r\n columns: arrcolumn,\r\n rawValues: false,\r\n filename: \"SoLuongHoaDonChoTungKyHieu\",\r\n });\r\n debugger;\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"kyhieu_hoadon\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function (obj) {\r\n // if (obj.ngayLap) {\r\n // obj.ngayLap = new Date(obj.ngayLap);\r\n // }\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n if(isActiveDbClick) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"kyhieu_id\",\r\n header: \"kyhieu_id\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"khhdon\",\r\n header: [\r\n \"Ký hiệu\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 240,\r\n },\r\n {\r\n id: \"tongso\",\r\n header: [\r\n \"Tổng số\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"sosudung\",\r\n header: [\r\n \"Số sử dụng\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n }, {\r\n id: \"soconlai\",\r\n header: [\r\n \"Số còn lại\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n format: function (text) {\r\n var test = new Date(text);\r\n if (test !== null && test !== \"null\") {\r\n var format = webix.Date.dateToStr(\"%d-%m-%Y %H:%i:%s\");\r\n text = removeTimeZoneT(test);\r\n return format(text);\r\n }\r\n return \"\";\r\n },\r\n width: 240,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\r\n \"Đơn vị tạo\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n columnType: \"numeric\",\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"kyhieu\");\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChangedKyhieu68\", function (mode, item) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n if (webix.$$(\"head-title\") != null) {\r\n webix.$$(\"head-title\").show();\r\n\r\n // Vẽ thêm thoong tin\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetConfigInvSymbol\", function (text) {\r\n var json = JSON.parse(text);\r\n var config = json['data']\r\n if(config == \"K\") {\r\n isActiveDbClick = false;\r\n webix.$$(\"btnPlus\").hide();\r\n webix.$$(\"btnEdit\").hide();\r\n webix.$$(\"btnDelete\").hide();\r\n } else {\r\n isActiveDbClick = true;\r\n }\r\n });\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/DashboardTiles_License\", function (res) {\r\n var data = JSON.parse(res);\r\n\r\n if(data && data[\"items\"]) {\r\n var items = data[\"items\"];\r\n var total = items.find(function(e) {\r\n return e.css == \"orders\";\r\n })\r\n var used = items.find(function(e) {\r\n return e.css == \"number-orders\";\r\n })\r\n var available = items.find(function(e) {\r\n return e.css == \"users\";\r\n })\r\n\r\n $$(\"head-title\").removeView(\"head-title-subui\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"head-title-subui\",\r\n rows: [\r\n {\r\n cols: [\r\n { view: \"label\", label: \"Tổng số hóa đơn đã đăng ký:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: total.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: used.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số hết hạn sử dụng:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: \"0\", align: \"left\", width: 100 },\r\n { view: \"label\", label: \"Số còn lại:\", align: \"right\", width: 200 },\r\n { view: \"label\", label: available.tien.toLocaleString('vi-VN'), align: \"left\", width: 100 },\r\n ]\r\n }\r\n ]\r\n }\r\n );\r\n }\r\n });\r\n }\r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý số lượng HĐ cho từng ký hiệu HĐ\",\r\n details: \"Quản lý số lượng HĐ cho từng ký hiệu HĐ\",\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/68_thongdiepthuetrave',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n \r\n\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý mã thông điệp CQT\",\r\n // details: \"Bảng tổng hợp hóa đơn\",\r\n });\r\n\r\n var initUI = function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetThongDiepThueTraVe\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n table.define(\"url\", url);\r\n };\r\n\r\n var controls = [\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n // id: \"btnRefresh\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n // id: \"btnPlus\",\r\n // shortcut: \"F4\",\r\n // on: {\r\n // onClick: function () {\r\n // // var detailForm = this.$scope.ui(form_0405.$ui);\r\n // // form_0405.setEditMode(0);\r\n // // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n // id: \"btnEdit\",\r\n // shortcut: \"F3\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn hóa đơn ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể sửa! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.loai_tbao == \"5\") {\r\n // webix.message(\"Mẫu 05 nhận từ CQT bạn không thể sửa! \", \"error\");\r\n // return;\r\n // }\r\n // // var detailForm = this.$scope.ui(form_0405.$ui);\r\n // // form_0405.setEditMode(0);\r\n // // detailForm.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n // id: \"btnDelete\",\r\n // shortcut: \"F8\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn khách hàng ! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.trang_thai == 1) {\r\n // webix.message(\"Mẫu đã ký và gửi CQT bạn không thể xóa! \", \"error\");\r\n // return;\r\n // }\r\n // if (selectedItem.loai_tbao == \"5\") {\r\n // webix.message(\"Mẫu 05 nhận từ CQT bạn không thể xóa! \", \"error\");\r\n // return;\r\n // }\r\n // webix.confirm({\r\n // text: \"Bạn có muốn xóa hóa đơn\",\r\n // ok: \"Có\",\r\n // cancel: \"Không\",\r\n // callback: function (choose) {\r\n // if (choose) {\r\n // webix.extend(table, webix.ProgressBar);\r\n // table.disable();\r\n // table.showProgress();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Invoice68/deleteMau04\", selectedItem, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.error, \"error\");\r\n // //webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // table.remove(selectedItem.id);\r\n // table.enable();\r\n // table.hideProgress();\r\n // },\r\n // });\r\n // }\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"htmlbutton\",\r\n // width: 100,\r\n // label: ' ' + '' + _(\"Xem in\") + \" (F7)\" + \"\",\r\n // id: \"btnPreview\",\r\n // shortcut: \"F7\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"mau04_68\");\r\n // var selectedItem = table.getSelectedItem();\r\n // if (selectedItem == null) {\r\n // webix.message(\"Bạn chưa chọn dòng in ! \", \"error\");\r\n // return;\r\n // }\r\n // var box = webix.modalbox({\r\n // title: \"Đang in hóa đơn ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"Hóa đơn điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n // webix\r\n // .ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .get(app.config.host + \"/Invoice68/inMau04?id=\" + selectedItem.id + \"&type=PDF&loai=\" + selectedItem.loai_tbao, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: \"application/pdf\" });\r\n // var fileURL = URL.createObjectURL(file);\r\n // //window.open(fileURL, '_blank');\r\n // webix.modalbox.hide(box);\r\n // newWin.location = fileURL;\r\n // },\r\n // });\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {},\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n // if (record.loai_tbao != \"5\") {\r\n // if (record.trang_thai != 1) {\r\n // webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n // return;\r\n // }\r\n // }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename =\r\n record.mltdiep == \"202\"\r\n ? \"202.xml\"\r\n : record.mltdiep == \"204\"\r\n ? \"204.xml\"\r\n : record.mltdiep == \"301\"\r\n ? \"301.xml\"\r\n : record.mltdiep == \"302\"\r\n ? \"302.xml\"\r\n : record.mltdiep == \"102\"\r\n ? \"102.xml\"\r\n : record.mltdiep == \"103\"\r\n ? \"103.xml\"\r\n : \"104.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepCQT?id=\" + record.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inMaThongDiepCQT?id=\" + item.id + \"&mltdiep=\" + item.mltdiep, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n on: {\r\n // onSubViewCreate: function (view, item) {\r\n // var subView = view;\r\n\r\n // if (subView != null) {\r\n // var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n // var url = app.config.host + \"/Invoice68/GetDataMau0405Detail?id=\" + item.id;\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n // }\r\n // },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n // {\r\n // id: \"id\",\r\n // header: \"id\",\r\n // hidden: true,\r\n // },\r\n // {\r\n // template: \"{common.subrow()}\",\r\n // width: 50,\r\n // },\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"mltdiep\",\r\n header: [\r\n \"Mã loại thông điệp\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n },\r\n {\r\n id: \"mltdiep\",\r\n header: [\r\n \"Tên loại thông điệp\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 200,\r\n template: function (obj) {\r\n return obj.mltdiep == \"202\"\r\n ? \"Cấp mã hóa đơn\"\r\n : obj.mltdiep == \"204\"\r\n ? \"Kiểm tra dữ liệu hóa đơn\"\r\n : obj.mltdiep == \"301\"\r\n ? \"Xử lý hóa đơn sai sót\"\r\n : obj.mltdiep == \"302\"\r\n ? \"Rà soát hóa đơn\"\r\n : obj.mltdiep == \"102\"\r\n ? \"Tiếp nhận tờ khai ĐK/SD HDDT\"\r\n : obj.mltdiep == \"103\"\r\n ? \"Chấp nhận tờ khai ĐK/SD HDDT\"\r\n : \"Chấp nhận tờ khai ĐK/SD HDDT khi ủy nhiệm/nhận ủy nhiệm\";\r\n },\r\n },\r\n {\r\n id: \"mtdiep_cqt\",\r\n //header: [\"\", \"Mã thông điệp CQT\"],\r\n header: [\r\n \"Mã thông điệp CQT\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 450,\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n return \" \";\r\n // if (obj.loai_tbao == \"5\") {\r\n // return \" \";\r\n // } else {\r\n // if (obj.trang_thai == 1) {\r\n // return \" \";\r\n // } else return \" \";\r\n // }\r\n },\r\n },\r\n {\r\n id: \"InMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.mltdiep != \"204\" && obj.mltdiep != \"202\") {\r\n return \" \";\r\n } else {\r\n return \" \";\r\n }\r\n },\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n\r\n // $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // // if (mode == 1) {\r\n // // table.add(item);\r\n // // }\r\n // // if (mode == 5) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // // }\r\n // });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách biên lai chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function (e) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n e.preventDefault();\r\n e.stopPropagation();\r\n },\r\n },\r\n click: function () {\r\n console.log(\"click\");\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký biên lai\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_BL_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, \"TCTPhi\");\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetBienLaiChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ duyệt\", details: \"Danh sách chờ duyệt\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy chứng từ\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ duyệt\", details: \"Danh sách chờ duyệt\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_choduyet',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", {\r\n excel_id: \"EX00011\",\r\n filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\",\r\n });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Duyệt\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ duyệt\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != \"\" && item.value != null) {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ duyệt\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"Ngày ký\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"Thời điểm lập\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"Tên loại HĐ\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Danh sách chờ duyệt\",\r\n details: \"Danh sách chờ duyệt\",\r\n });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy biên lai\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy biên lai có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"biên lai đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"biên lai chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"biên lai không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các biên lai chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"biên lai chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"biên lai chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"biên lai điều chỉnh cho biên lai số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách biên lai chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn biên lai !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại biên lai gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn duyệt biên lai ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ biên lai theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var fm = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số&loaihd=2\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái biên lai\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày biên lai\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số biên lai\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ sinh số\", details: \"Danh sách chờ sinh số\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy Chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các Chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Chứng từ điều chỉnh cho Chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách Chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn Chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in Chứng từ \",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại Chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn Chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in Chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn sinh số Chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ Chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày Chứng từ \", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số Chứng từ \", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ sinh số\", details: \"Danh sách chờ sinh số\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_chosinhso',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", {\r\n excel_id: \"EX00011\",\r\n filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\",\r\n });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Sinh số\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn sinh số hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.GetHoaDonChon();\r\n var lsHodonId = [];\r\n\r\n dsHoaDon.forEach(function (p) {\r\n lsHodonId.push(p.hdon_id);\r\n });\r\n\r\n commonHD.DuyetHoaDon(lsHodonId, \"Chờ sinh số\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != \"\" && item.value != null) {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ sinh số\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n // template: function (obj, common) {\r\n // console.log(obj);\r\n // },\r\n\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"Lịch sử xử lý\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"Gửi Email\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"Có lỗi/Không có lỗi\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"Ngày ký\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"Thời điểm lập\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"Tên loại HĐ\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({\r\n title: \"Danh sách chờ sinh số\",\r\n details: \"Danh sách chờ sinh số\",\r\n });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon_tncn',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy chứng từ\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy chứng từ có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"chứng từ đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"chứng từ chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"chứng từ không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các chứng từ chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"chứng từ chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"chứng từ chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"chứng từ điều chỉnh cho chứng từ số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chứng từ chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại chứng từ gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"chứng từ điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký chứng từ ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, \"TCTTNhap\");\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ chứng từ theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n\r\n var table = $$(\"invoiceViews\");\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký&loaihd=3\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n width: 200,\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái chứng từ\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày chứng từ\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"Số chứng từ\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Số thuế thu nhập\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/78_duyethoadon',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_huyhoadon\", \"views/forms/68_huyhoadon_1\", \"views/forms/68_hoadon_history\", \"views/commonHD\"], function (\r\n app,\r\n _,\r\n user,\r\n invoiceForms,\r\n huyhoadon,\r\n huyhoadon_1,\r\n hoadonHistory,\r\n commonHD\r\n) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var dataCount;\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var op = [];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [\r\n // {\r\n // id: \"huyhoadon\",\r\n // value: \"Hủy hóa đơn\",\r\n // },\r\n // {\r\n // id: \"huyhoadon2\",\r\n // value: \"Hủy hóa đơn có tạo mới\",\r\n // },\r\n // {\r\n // id: \"giaitrinh\",\r\n // value: \"Giải trình\",\r\n // },\r\n {\r\n id: \"notifyErrorInvoice\",\r\n value: \"Thông báo HĐĐT có sai sót\",\r\n },\r\n {\r\n id: \"replace_invoice\",\r\n value: \"Thay thế\",\r\n },\r\n {\r\n id: \"increase_change_invoice\",\r\n value: \"Điều chỉnh tăng\",\r\n },\r\n {\r\n id: \"reduce_change_invoice\",\r\n value: \"Điều chỉnh giảm\",\r\n },\r\n {\r\n id: \"info_change\",\r\n value: \"Điều chỉnh thông tin\",\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n value: \"Tải XML\",\r\n },\r\n {\r\n id: \"dowloadXmlMessageHD\",\r\n value: \"Tải XML thông điệp gửi HĐ\",\r\n },\r\n // {\r\n // id: \"nhanExcel\",\r\n // value: \"Nhận Excel hàng loạt\",\r\n // },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n this.hide();\r\n if (record.id == \"nhanExcel\") {\r\n var table = $$(\"invoiceViews\");\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: \"EX00011\", filename: \"Nhan hang loat hoa don 68 (GTGT).xlsx\" });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n // console.log(record);\r\n if (record.id == \"huyhoadon\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"huyhoadon2\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon == 3) {\r\n webix.message(\"Hóa đơn đã Hủy bạn không thể hủy thêm !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký, không thể hủy !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnStep299\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // webix.$$(\"btnStep299\").define(\"hidden\", false);\r\n // webix.$$(\"btnStep2\").show();\r\n // webix.$$(\"btnStep299\").hide();\r\n // $$(\"btnHuyHDDT\").addView({ view:\"button\",label: \"Bước 2\" }, 1);\r\n // console.log(item);\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 1,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n }\r\n if (record.id == \"dowloadXml\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"dowloadXmlMessageHD\") {\r\n // var btnEdit = $$(\"btnPlus\");\r\n // btnEdit.callEvent(\"onClick\");\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ ký\" || item.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn chưa được gửi tới CQT, không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLThongDiepHoadon?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, \"XmlThongDiepHoaDon.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (record.id == \"giaitrinh\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n if (item.tthdon != \"4\" && item.tthdon != \"0\") {\r\n webix.message(\"Hóa đơn không ở trạng thái rà soát không thể lập giải trình !\", \"error\");\r\n return;\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"danhsach_hoadonhuy\").define(\"editable\", false);\r\n // webix.$$(\"tctbao\").setValue(2);\r\n webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n this.hide();\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: 1,\r\n tctbao: 2,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n win.show();\r\n\r\n // var fn = Function(\"_\", \"user\", item.on_click);\r\n // fn(_, user);\r\n }\r\n if (record.id == \"notifyErrorInvoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var datafrm = table.serialize();\r\n var data = [];\r\n\r\n if (datafrm.length > 0) {\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i] != undefined) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 0) {\r\n var cungshd = true;\r\n for (var k = 1; k <= data.length - 1; k++) {\r\n if (data[k][\"stbao\"] !== data[0][\"stbao\"]) {\r\n cungshd = false;\r\n break;\r\n }\r\n }\r\n if (cungshd === true) {\r\n var loai = 1;\r\n if (data[0][\"stbao\"] !== null) loai = 2;\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].tthai == \"Chờ gửi\" || data[i].tthai == \"Chờ ký\" || data[i].tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n if (data[i].ladhddt == undefined) {\r\n data[i].ladhddt = \"1\";\r\n }\r\n if (data[i].tctbao == undefined) {\r\n data[i].tctbao = \"1\";\r\n }\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n var tongquat = {\r\n so: data[0].stbao,\r\n ntbccqt: data[0].ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n data.forEach(function (item) {\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n //this.hide();\r\n win.show();\r\n });\r\n } else {\r\n webix.message(\"Các hóa đơn chọn phải có số thông báo giống nhau\", \"error\");\r\n }\r\n } else {\r\n var item = table.getSelectedItem();\r\n\r\n var loai = 1;\r\n if (item[\"stbao\"] !== null) loai = 2;\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\" || item.tthai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn chưa gửi không thể thông báo sai sót\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.ladhddt == undefined) {\r\n item[\"ladhddt\"] = \"1\";\r\n }\r\n if (item.tctbao == undefined) {\r\n item[\"tctbao\"] = \"1\";\r\n }\r\n\r\n var win = table.$scope.ui(huyhoadon.$ui);\r\n huyhoadon.setEditMode(1);\r\n webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n var tongquat = {\r\n so: item.stbao,\r\n ntbccqt: item.ntbao,\r\n loai: loai,\r\n };\r\n huyhoadon.setValuesTongQuat(tongquat, null, null);\r\n\r\n var put = {\r\n khieu: item.khieu,\r\n shdon: item.shdon,\r\n ngay: item.nlap,\r\n ladhddt: item.ladhddt,\r\n tctbao: item.tctbao,\r\n hdon_id: item.id,\r\n };\r\n huyhoadon.setValues(put, null, null);\r\n\r\n //this.hide();\r\n win.show();\r\n }\r\n\r\n // var win = table.$scope.ui(huyhoadon.$ui);\r\n // huyhoadon.setEditMode(1);\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n\r\n // webix.$$(\"btnSaveSignGiaiTrinh\").show();\r\n // webix.$$(\"btnHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiHuyhoadon\").destructor();\r\n // webix.$$(\"btnGhiSignHuyHDDT\").destructor();\r\n // this.hide();\r\n // win.show();\r\n }\r\n if (record.id == \"replace_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 2;\r\n item.tthdon_original = 2;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n\r\n tableDetail.clearAll();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"increase_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 19;\r\n item.tthdon_original = 19;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n // var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n // tableDetail.clearAll();\r\n // tableDetail.refresh();\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n /*tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n tableDetail.getColumnConfig(\"tthue\").editor = null;*/\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n\r\n //detailForm.show();\r\n }\r\n if (record.id == \"reduce_change_invoice\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 21;\r\n item.tthdon_original = 21;\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n item.note = \"reduce_change_invoice\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n if (record.id == \"info_change\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai == \"Chờ gửi\" || item.tthai == \"Chờ ký\") {\r\n webix.message(\"Hóa đơn chưa ký không thể thực hiện\", \"error\");\r\n return;\r\n }\r\n var btnPlus = $$(\"btnPlus\");\r\n btnPlus.callEvent(\"onClick\");\r\n var detailForm = $$(\"invoiceForms\");\r\n\r\n var ngay_hoa_don = item.nlap;\r\n\r\n item.nlap = null;\r\n item.hdon_id_old = item.hdon_id;\r\n item.tthdon_old = item.tthdon;\r\n item.tthdon = 23;\r\n item.tthdon_original = 23;\r\n item.shdon_temp = item.shdon;\r\n item.shdon = \"\";\r\n item.nky = \"\";\r\n item.hdon_id = \"\";\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n item[arrayString[i]] = 0;\r\n }\r\n item[\"tgtttbchu\"] = \"\";\r\n\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setValues(item, null);\r\n\r\n var obj_detail = {\r\n id: webix.uid(),\r\n kmai: \"4\",\r\n ten: \"Hóa đơn điều chỉnh cho hóa đơn số \" + item.shdon_temp + \" ngày \" + moment(ngay_hoa_don).format(\"DD/MM/YYYY\") + \" ký hiệu \" + item.khieu,\r\n };\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n tableDetail.clearAll();\r\n tableDetail.add(obj_detail);\r\n var columns = tableDetail.config.columns;\r\n for (var i = 0; i < columns.length; i++) {\r\n var column = columns[i];\r\n //column.editor = null;\r\n }\r\n // tableDetail.getColumnConfig(\"sluong\").editor = null;\r\n // tableDetail.getColumnConfig(\"thtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tsuat\").editor = null;\r\n // tableDetail.getColumnConfig(\"tgtien\").editor = null;\r\n // tableDetail.getColumnConfig(\"tthue\").editor = null;\r\n tableDetail.refreshColumns();\r\n tableDetail.refresh();\r\n\r\n detailForm.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách hóa đơn chờ ký\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n { value: \"Thêm (F4)\", icon: \"far fa-plus\" },\r\n { value: \"Sửa (F3)\", icon: \"far fa-edit\" },\r\n { value: \"Xóa (F8)\", icon: \"far fa-trash\" },\r\n { $template: \"Separator\" },\r\n { value: \"Tải File đính kèm\", icon: \"fas fa-file-text-o\" },\r\n { value: \"Xem in\", icon: \"fas fa-print\" },\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm (F4)\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa (F3)\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa (F8)\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n self.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký chờ xử lý\") + \"\",\r\n id: \"btnKyCXL\",\r\n click: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n if ($$(\"chonAll\").getValue() == 0) {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n \r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n \r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true);\r\n }\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký toàn bộ hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.message(\"Hệ thống đang xử lý, vui lòng chờ trong giây lát!\");\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n //Lấy tất cả và validate hóa đơn\r\n var dsHoaDon = commonHD.getAllHD_ValidateHD();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n \r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, false, true, 2);\r\n }\r\n\r\n var params = table.config.params;\r\n var datafetch = table.config.datafetch;\r\n table.load(\r\n table.config.url,\r\n function () {\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"Ký và gửi CQT\") + \"\",\r\n id: \"btnKyGuiCQT\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn ký và gửi hóa đơn ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n //check validate và return ra list hoadon_id\r\n var dsHoaDon = commonHD.validate_HD_ReturnListHdonKhongMaVaCoMaVaMTTId();\r\n var lsCoMa = dsHoaDon[0];\r\n var lsKhongMa = dsHoaDon[1];\r\n var lstDataChooseMTT = dsHoaDon[2];\r\n\r\n // console.log(lsCoMa);\r\n // console.log(lsKhongMa);\r\n\r\n if (lsCoMa.length > 0 || lsKhongMa.length > 0) {\r\n var lsHodonId = [];\r\n lsHodonId.push(lsCoMa);\r\n lsHodonId.push(lsKhongMa);\r\n commonHD.ExcuteHoaDonForHasCodeAndNotHaveAnyCode(lsHodonId, true, true);\r\n }\r\n if (lstDataChooseMTT.length > 0) {\r\n var lsHodonId = $.map(lstDataChooseMTT, function (item) {\r\n return item.hdon_id;\r\n });;\r\n commonHD.ExcuteHoaDonMTT(lsHodonId);\r\n }\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Kết xuất màn hình\") + \"\",\r\n id: \"btnXuatExel\",\r\n click: function () {\r\n webix.confirm({\r\n text: \"Kết xuất màn hình toàn bộ hóa đơn theo filter?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n width: 300,\r\n callback: function (res) {\r\n if (res) {\r\n var table = $$(\"invoiceViews\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var datafetch = table.config.datafetch;\r\n table.config.datafetch = table.data.count();\r\n var params = table.config.params;\r\n if (params != null && params != undefined) {\r\n params.count = table.data.count();\r\n }\r\n var columnlst = table.config.columns;\r\n var arrcolumn = [];\r\n\r\n for (var i = 2; i < columnlst.length; i++) {\r\n var exporttype = \"\";\r\n if (columnlst[i].columnType == \"character varying\" || columnlst[i].columnType == \"nvarchar\") {\r\n exporttype = \"string\";\r\n } else {\r\n exporttype = columnlst[i].columnType;\r\n }\r\n var item = {\r\n id: columnlst[i].id,\r\n header: columnlst[i].header[0][\"text\"],\r\n\r\n exportType: exporttype,\r\n };\r\n arrcolumn.push(item);\r\n }\r\n table.load(\r\n table.config.url,\r\n function () {\r\n webix.toExcel($$(\"invoiceViews\"), {\r\n columns: arrcolumn,\r\n rawValues: true,\r\n filename: \"DanhSachHoaDonFull\",\r\n });\r\n table.config.datafetch = datafetch;\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n params\r\n );\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + _(\"Chọn toàn bộ\") + \"\",\r\n id: \"btnChonToanBo\",\r\n click: function (callback, params) {\r\n $$(\"chonAll\").getValue() ? $$(\"chonAll\").setValue(0) : $$(\"chonAll\").setValue(1);\r\n }\r\n },\r\n {\r\n view:\"checkbox\", \r\n id:\"chonAll\", \r\n label:\"Chọn toàn bộ\", \r\n labelWidth: 90,\r\n value:false,\r\n readonly: true\r\n },\r\n // Khong duoc xoa cai ngoac nhon nay\r\n // ok a\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n var daiKyHieu = \"\";\r\n //get count list combo ký hiệu\r\n //var countkyHieu = $$(\"kyhieu_id\") != undefined ? $$(\"kyhieu_id\").getPopup().getList().serialize().length : 0;\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDanhSachChoKy\";\r\n var table = $$(\"invoiceViews\");\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n table.define(\"params\", params);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n url = url + \"&tlbparam=null&tthai=Chờ ký\";\r\n \r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n //webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n // onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btnEdit\");\r\n // btnEdit.callEvent(\"onClick\");\r\n // },\r\n onAfterLoad: function () {\r\n // webix.delay(function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n // }, this);\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [\r\n { id: \"stt\", header: \"\", width: 30 },\r\n {\r\n id: \"ma\",\r\n header: _(\"Mã hàng hóa\"),\r\n editor: \"text\",\r\n width: 100,\r\n editable: true,\r\n },\r\n {\r\n id: \"ten\",\r\n header: _(\"Tên hàng hóa\"),\r\n editor: \"text\",\r\n width: 350,\r\n editable: true,\r\n },\r\n {\r\n id: \"mdvtinh\",\r\n header: _(\"ĐVT\"),\r\n editor: \"text\",\r\n width: 80,\r\n editable: true,\r\n },\r\n {\r\n id: \"sluong\",\r\n header: _(\"Số lương\"),\r\n editor: \"autonumeric\",\r\n width: 100,\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"dgia\",\r\n header: _(\"Đơn giá\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"thtien\",\r\n header: _(\"Tiền trước thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n // value_change: field.value_change\r\n },\r\n {\r\n id: \"tlckhau\",\r\n header: _(\"% CK\"),\r\n width: 80,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"stckhau\",\r\n header: _(\"Tiền CK\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tsuat\",\r\n header: _(\"Thuế suất\"),\r\n width: 100,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tthue\",\r\n header: _(\"Tiền thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"tgtien\",\r\n header: _(\"Tiền sau thuế\"),\r\n width: 150,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n id: \"khuyen_mai\",\r\n header: _(\"Khuyến mại\"),\r\n width: 100,\r\n editor: \"checkbox\",\r\n editable: true,\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n },\r\n ],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"stt\",\r\n header: [\"STT\"],\r\n //header: \"\",\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n //css: { \"line-height\": \"20px !important\", \"height\": \"63px !important\"}\r\n },\r\n {\r\n id: \"ttthdon\",\r\n\r\n header: [\r\n \"Trạng thái\",\r\n {\r\n content: \"serverMultiSelectFilter\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00502\",\r\n },\r\n ],\r\n // template: function (obj, common) {\r\n // console.log(obj);\r\n // },\r\n\r\n // template: \"#ttthdon#\",\r\n\r\n template: function (obj, common) {\r\n console.log(obj.tthdon);\r\n return \"\" + obj.ttthdon + \"\";\r\n },\r\n width: 200,\r\n },\r\n {\r\n id: \"tthai\",\r\n header: [\"Trạng thái gửi CQT\", { content: \"serverMultiSelectFilter\", options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00504\" }],\r\n width: 200,\r\n },\r\n //\r\n // {\r\n // id: \"btnMessagetn\",\r\n // header: [\"
Lịch sử xử lý
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // template: function (obj) {\r\n // return \" \";\r\n // },\r\n // width: 180,\r\n // },\r\n // {\r\n // id: \"issendmail\",\r\n // header: [\"
Gửi Email
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // checkValue: true, uncheckValue: false,\r\n // template: \"{common.rcheckbox()}\"\r\n // },\r\n // {\r\n // id: \"error_status\",\r\n // header: [\"
Có lỗi/Không có lỗi
\"],\r\n // css: { \"text-align\": \"center\" },\r\n // width: 120,\r\n // columnType: \"nvarchar\",\r\n // template: function (obj) {\r\n // if (obj.error_status == \"1\") {\r\n // return \"Có lỗi \";\r\n // } else {\r\n // return \"\";\r\n // }\r\n // }\r\n // },\r\n {\r\n id: \"nlap\",\r\n header: [\"Ngày hóa đơn\", { content: \"serverDateRangeFilter\" }],\r\n width: 120,\r\n css: { \"text-align\": \"center\" },\r\n //format:webix.i18n.dateFormatStr\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n // template: function (obj, common) {\r\n // if(obj.tthai!=\"Chờ ký\"){\r\n // return obj.nlap=\"\";\r\n // }\r\n // else{\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // var text = removeTimeZoneT(obj.nlap);\r\n // return format(text);\r\n // }\r\n // },\r\n columnType: \"datetime\",\r\n },\r\n // {\r\n // id: \"nky\",\r\n // header: [\"
Ngày ký
\", { content: \"serverDateRangeFilter\" }],\r\n // width: 150,\r\n // css: { \"text-align\": \"center\" },\r\n // //format:webix.i18n.dateFormatStr\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // columnType: \"datetime\",\r\n // },\r\n {\r\n id: \"khieu\",\r\n header: [\"Ký hiệu\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"is_hdcma_str\",\r\n header: [\"Tình trạng mã\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n /*columnType: \"integer\",\r\n template: function (obj) {\r\n return obj.is_hdcma === 0 ? \"Không mã\" : obj.is_hdcma === 1 ? \"Có mã\" : \"Không rõ tình trạng mã\";\r\n },*/\r\n },\r\n // {\r\n // id: \"khieu\", header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n // template: function (obj, common) {\r\n // return \"\" + obj.ten_trang_thai + \"\";\r\n // }, width: 100, columnType: \"nvarchar\"\r\n // },\r\n { id: \"shdon\", header: [\"Số hóa đơn\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n\r\n { id: \"mst\", header: [\"Mã số thuế\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_gui\", header: [\"
Mã thông điệp gửi đi
\", { content: \"textFilter\" }], width: 350, columnType: \"nvarchar\" },\r\n // { id: \"mtdiep_cqt\", header: [\"
Mã thông điệp cơ quan thuế
\", { content: \"textFilter\" }], width: 300, columnType: \"nvarchar\" },\r\n { id: \"mdvi\", header: [\"Đơn vị quản lý\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n { id: \"ten_str\", header: [\"Tên đơn vị/ Tên người mua\", { content: \"textFilter\" }], width: 150, columnType: \"nvarchar\" },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"Thành tiền sau thuế\", { content: \"textFilter\" }],\r\n width: 150,\r\n // format: webix.Number.numToStr({\r\n // groupDelimiter: \".\",\r\n // groupSize: 3,\r\n // decimalDelimiter: \",\",\r\n // decimalSize: 0\r\n // }),\r\n css: { \"text-align\": \"right\" },\r\n template: function (obj, common) {\r\n return obj.tgtttbso_last == null ? 0 : fm(obj.tgtttbso_last);\r\n },\r\n columnType: \"numeric\",\r\n },\r\n { id: \"htttoan\", header: [\"Hình thức TT\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\", css: { \"text-align\": \"center\" } },\r\n // {\r\n // id: \"tdlap\",\r\n // header: [\"
Thời điểm lập
\", { content: \"textFilter\" }],\r\n // width: 200,\r\n // columnType: \"nvarchar\",\r\n // format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // },\r\n // },\r\n {\r\n id: \"nglap\",\r\n header: [\"Người lập\", { content: \"textFilter\" }],\r\n width: 200,\r\n columnType: \"nvarchar\",\r\n },\r\n // { id: \"ten_loai\", header: [\"
Tên loại HĐ
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" }\r\n ],\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n dataCount = data.count;\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.$$(\"title\").parse({ title: \"Danh sách chờ ký\", details: \"Danh sách chờ ký\" });\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"invoiceViews\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\n// var form = $$(\"window-form\");\r\n// var values = form.getValues();\r\n// var currency = values[\"inv_currencyCode\"];\r\n// var table = $$(tableId);\r\n// var selectedItem = table.getItem(rowId)\r\n// //var selectedItem = table.getSelectedItem();\r\n// var loai_dc = selectedItem.ma1 == null ? 0 : selectedItem.ma1;\r\n\r\n// // Lấy phần thập phân ở danh mục ngoại tệ\r\n// var table_decimalPlaces = {\r\n// inv_quantity: 0,\r\n// inv_TotalAmountWithoutVat: 0,\r\n// inv_vatAmount: 0,\r\n// inv_TotalAmount: 0\r\n// }\r\n\r\n// table.eachColumn(function (columnId) {\r\n// var a = columnId.toString();\r\n// if (a == \"inv_quantity\" || a == \"inv_TotalAmountWithoutVat\" || a == \"inv_vatAmount\" || a == \"inv_TotalAmount\") {\r\n// var b = table.getColumnConfig(a).numericConfig.decimalPlaces;\r\n// if (b != null) {\r\n// table_decimalPlaces[a] = b;\r\n// }\r\n\r\n// }\r\n// });\r\n// //End call dmnt\r\n\r\n// if (loai_dc == 0) {\r\n\r\n// var inv_quantity = webix.rules.isNumber(selectedItem.inv_quantity) ? selectedItem.inv_quantity : 0;\r\n// var inv_unitPrice = webix.rules.isNumber(selectedItem.inv_unitPrice) ? selectedItem.inv_unitPrice : 0;\r\n// var inv_TotalAmountWithoutVat = webix.rules.isNumber(selectedItem.inv_TotalAmountWithoutVat) ? selectedItem.inv_TotalAmountWithoutVat : 0;\r\n// var inv_discountPercentage = webix.rules.isNumber(selectedItem.inv_discountPercentage) ? selectedItem.inv_discountPercentage : 0;\r\n// var inv_discountAmount = webix.rules.isNumber(selectedItem.inv_discountAmount) ? selectedItem.inv_discountAmount : 0;\r\n// var ma_thue = webix.rules.isNumber(selectedItem.ma_thue) ? selectedItem.ma_thue : 0;\r\n// if (ma_thue == -1) { ma_thue = 0; }\r\n// var inv_vatAmount = webix.rules.isNumber(selectedItem.inv_vatAmount) ? selectedItem.inv_vatAmount : 0;\r\n// var inv_TotalAmount = webix.rules.isNumber(selectedItem.inv_TotalAmount) ? selectedItem.inv_TotalAmount : 0;\r\n// var inv_exchangeRate = webix.rules.isNumber($$(\"inv_exchangeRate_inv_InvoiceAuth\").getValue()) ? $$(\"inv_exchangeRate_inv_InvoiceAuth\").getValue() : 0;\r\n\r\n// if (inv_quantity < 0) { inv_quantity = 0; }\r\n// if (inv_unitPrice < 0) { inv_unitPrice = 0; }\r\n// if (inv_TotalAmountWithoutVat < 0) { inv_TotalAmountWithoutVat = 0; }\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\" || columnId == \"inv_TotalAmount\" || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\") {\r\n\r\n// if (inv_unitPrice > 0) {\r\n// inv_TotalAmountWithoutVat = (inv_quantity * inv_unitPrice).toFixed(table_decimalPlaces.inv_TotalAmountWithoutVat);//Update dòng 1\r\n// } else {\r\n// if (inv_TotalAmountWithoutVat > 0) {\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// } else {\r\n// if (inv_TotalAmount > 0) {\r\n// if (inv_TotalAmountWithoutVat <= 0) {\r\n// inv_TotalAmountWithoutVat = (inv_TotalAmount / (1 + ma_thue / 100)).toFixed(table_decimalPlaces.inv_TotalAmountWithoutVat);// Update dòng 2\r\n// }\r\n\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// }\r\n// }\r\n// }\r\n\r\n// if (inv_discountPercentage < 0) { inv_discountPercentage = 0; }\r\n// if (inv_discountPercentage > 100) { inv_discountPercentage = 0; }\r\n\r\n// inv_discountAmount = inv_TotalAmountWithoutVat * inv_discountPercentage / 100;\r\n// if ((inv_discountAmount - inv_TotalAmountWithoutVat) > 0) {\r\n// inv_discountAmount = 0;\r\n// }\r\n// inv_vatAmount = ((inv_TotalAmountWithoutVat - inv_discountAmount) * ma_thue / 100).toFixed(table_decimalPlaces.inv_vatAmount); // Update dòng 3\r\n// //if(inv_TotalAmount <= 0){\r\n// inv_TotalAmount = currency == \"VND\" ? Math.round(inv_TotalAmountWithoutVat - inv_discountAmount + parseFloat(inv_vatAmount)) : (inv_TotalAmountWithoutVat - inv_discountAmount + parseFloat(inv_vatAmount));\r\n// //}\r\n\r\n// selectedItem.inv_quantity = inv_quantity;\r\n// selectedItem.inv_unitPrice = inv_unitPrice;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat;\r\n// selectedItem.inv_discountPercentage = inv_discountPercentage;\r\n// selectedItem.inv_discountAmount = inv_discountAmount;\r\n// selectedItem.inv_vatAmount = inv_vatAmount;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount;\r\n// table.updateItem(selectedItem.id, selectedItem);\r\n// }\r\n\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\"\r\n// || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\"\r\n// || columnId == \"ma_thue\" || columnId == \"inv_vatAmount\" || columnId == \"inv_promotion\"\r\n// || columnId == \"inv_TotalAmount\" || columnId == \"check_giam_tru\") {\r\n\r\n// var inv_TotalAmountWithoutVat = 0;\r\n// var inv_discountAmount = 0;\r\n// var inv_vatAmount = 0;\r\n// var inv_TotalAmount = 0;\r\n// var count = table.count();\r\n\r\n// for (var i = 0; i < count; i++) {\r\n// var rowIndex = table.getIdByIndex(i);\r\n// var record = table.getItem(rowIndex);\r\n\r\n// var check_giam_tru = record.hasOwnProperty(\"check_giam_tru\") ? record.check_giam_tru : false;\r\n\r\n// if (record.hasOwnProperty(\"inv_TotalAmountWithoutVat\")) {\r\n// var value = record.inv_TotalAmountWithoutVat == null ? 0 : Number(record.inv_TotalAmountWithoutVat);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_TotalAmountWithoutVat = currency == \"VND\" ? Math.round(inv_TotalAmountWithoutVat + value) : inv_TotalAmountWithoutVat + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_discountAmount\")) {\r\n// var value = record.inv_discountAmount == null ? 0 : Number(record.inv_discountAmount);\r\n// inv_discountAmount = currency == \"VND\" ? Math.round(inv_discountAmount + value) : inv_discountAmount + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_vatAmount\")) {\r\n// var value = record.inv_vatAmount == null ? 0 : Number(record.inv_vatAmount);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_vatAmount = currency == \"VND\" ? Math.round(inv_vatAmount + value) : inv_vatAmount + value;\r\n// }\r\n// if (record.hasOwnProperty(\"inv_TotalAmount\")) {\r\n// var value = record.inv_TotalAmount == null ? 0 : Number(record.inv_TotalAmount);\r\n// value = check_giam_tru === true ? -1 * value : value;\r\n// inv_TotalAmount = currency == \"VND\" ? Math.round(inv_TotalAmount + value) : inv_TotalAmount + value;\r\n// }\r\n// }\r\n\r\n\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount);\r\n// //$$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount);\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(inv_TotalAmount);\r\n\r\n\r\n// }\r\n// }\r\n// else {\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\" || columnId == \"inv_TotalAmount\" || columnId == \"inv_vatAmount\" || columnId == \"ma1\" || columnId == \"tieu_thuc\") {\r\n\r\n// var inv_quantity = webix.rules.isNumber(selectedItem.inv_quantity) ? selectedItem.inv_quantity : 0;\r\n// var inv_unitPrice = webix.rules.isNumber(selectedItem.inv_unitPrice) ? selectedItem.inv_unitPrice : 0;\r\n// var inv_TotalAmountWithoutVat = webix.rules.isNumber(selectedItem.inv_TotalAmountWithoutVat) ? selectedItem.inv_TotalAmountWithoutVat : 0;\r\n// var inv_discountPercentage = webix.rules.isNumber(selectedItem.inv_discountPercentage) ? selectedItem.inv_discountPercentage : 0;\r\n// var inv_discountAmount = webix.rules.isNumber(selectedItem.inv_discountAmount) ? selectedItem.inv_discountAmount : 0;\r\n// var ma_thue = webix.rules.isNumber(selectedItem.ma_thue) ? selectedItem.ma_thue : 0;\r\n// if (ma_thue == -1) { ma_thue = 0; }\r\n// var inv_vatAmount = webix.rules.isNumber(selectedItem.inv_vatAmount) ? selectedItem.inv_vatAmount : 0;\r\n// var inv_TotalAmount = webix.rules.isNumber(selectedItem.inv_TotalAmount) ? selectedItem.inv_TotalAmount : 0;\r\n// var inv_itemName = selectedItem.inv_itemName;\r\n// var tieu_thuc = selectedItem.tieu_thuc == null ? \"\" : selectedItem.tieu_thuc;\r\n// if (inv_unitPrice > 0) {\r\n// inv_TotalAmountWithoutVat = inv_quantity * inv_unitPrice;\r\n// } else {\r\n// if (inv_TotalAmountWithoutVat > 0) {\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// } else {\r\n// if (inv_TotalAmount > 0) {\r\n// inv_TotalAmountWithoutVat = inv_TotalAmount / (1 + ma_thue / 100);\r\n// if (inv_quantity > 0) {\r\n// inv_unitPrice = inv_TotalAmountWithoutVat / inv_quantity;\r\n// }\r\n// }\r\n// }\r\n// }\r\n\r\n// inv_discountAmount = inv_TotalAmountWithoutVat * inv_discountPercentage / 100;\r\n// inv_vatAmount = (inv_TotalAmountWithoutVat - inv_discountAmount) * ma_thue / 100;\r\n// inv_TotalAmount = inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount;\r\n// if (loai_dc == -1) {\r\n// //selectedItem.inv_itemName = \"Điều chỉnh giảm \" + tieu_thuc + \" \" + selectedItem.inv_itemName;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat * loai_dc;\r\n// selectedItem.inv_discountAmount = inv_discountAmount * loai_dc;\r\n// selectedItem.inv_vatAmount = inv_vatAmount * loai_dc;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount * loai_dc;\r\n// selectedItem.inv_unitPrice = inv_unitPrice;\r\n// selectedItem.inv_quantity = inv_quantity;\r\n// }\r\n// if (loai_dc == 1) {\r\n// //selectedItem.inv_itemName = \"Điều chỉnh tăng \" + tieu_thuc + \" \" + selectedItem.inv_itemName;\r\n// selectedItem.inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat < 0 ? inv_TotalAmountWithoutVat * -1 : inv_TotalAmountWithoutVat;\r\n// selectedItem.inv_discountAmount = inv_discountAmount < 0 ? inv_discountAmount * -1 : inv_discountAmount;\r\n// selectedItem.inv_vatAmount = inv_vatAmount < 0 ? inv_vatAmount * -1 : inv_vatAmount;\r\n// selectedItem.inv_TotalAmount = inv_TotalAmount < 0 ? inv_TotalAmount * -1 : inv_TotalAmount;\r\n// selectedItem.inv_unitPrice = inv_unitPrice < 0 ? inv_unitPrice * -1 : inv_unitPrice;\r\n// selectedItem.inv_quantity = inv_quantity < 0 ? inv_quantity * -1 : inv_quantity;\r\n// }\r\n// table.updateItem(selectedItem.id, selectedItem);\r\n// }\r\n\r\n\r\n// if (columnId == \"inv_quantity\" || columnId == \"inv_unitPrice\" || columnId == \"inv_TotalAmountWithoutVat\"\r\n// || columnId == \"inv_discountPercentage\" || columnId == \"inv_discountAmount\"\r\n// || columnId == \"ma_thue\" || columnId == \"inv_vatAmount\" || columnId == \"inv_promotion\" || columnId == \"ma1\" || columnId == \"inv_TotalAmount\") {\r\n\r\n// var inv_TotalAmountWithoutVat = 0;\r\n// var inv_discountAmount = 0;\r\n// var inv_vatAmount = 0;\r\n\r\n// var count = table.count();\r\n// for (var i = 0; i < count; i++) {\r\n// var rowIndex = table.getIdByIndex(i);\r\n// var record = table.getItem(rowIndex);\r\n\r\n// if (record.hasOwnProperty(\"inv_TotalAmountWithoutVat\")) {\r\n// var value = record.inv_TotalAmountWithoutVat == null ? 0 : Number(record.inv_TotalAmountWithoutVat);\r\n// inv_TotalAmountWithoutVat = inv_TotalAmountWithoutVat + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_discountAmount\")) {\r\n// var value = record.inv_discountAmount == null ? 0 : Number(record.inv_discountAmount);\r\n// inv_discountAmount = inv_discountAmount + value;\r\n// }\r\n\r\n// if (record.hasOwnProperty(\"inv_vatAmount\")) {\r\n// var value = record.inv_vatAmount == null ? 0 : Number(record.inv_vatAmount);\r\n// inv_vatAmount = inv_vatAmount + value;\r\n// }\r\n// }\r\n\r\n// if (loai_dc == -1) {\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat * loai_dc);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount * loai_dc);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount * loai_dc);\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue((inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount) * loai_dc);\r\n// }\r\n// if (loai_dc == 1) {\r\n// $$(\"inv_TotalAmountWithoutVat_inv_InvoiceAuth\").setValue(inv_TotalAmountWithoutVat < 0 ? inv_TotalAmountWithoutVat * -1 : inv_TotalAmountWithoutVat);\r\n// $$(\"inv_discountAmount_inv_InvoiceAuth\").setValue(inv_discountAmount < 0 ? inv_discountAmount * -1 : inv_discountAmount);\r\n// $$(\"inv_vatAmount_inv_InvoiceAuth\").setValue(inv_vatAmount < 0 ? inv_vatAmount * -1 : inv_vatAmount);\r\n// var tongtien = inv_TotalAmountWithoutVat - inv_discountAmount + inv_vatAmount;\r\n// $$(\"inv_TotalAmount_inv_InvoiceAuth\").setValue(tongtien < 0 ? tongtien * -1 : tongtien);\r\n// }\r\n// }\r\n\r\n// }\r\n\r\n// var data = table.serialize();\r\n// var tien_tt_all = 0;\r\n// var tien_thue_all = 0\r\n// var tien_ck_all = 0;\r\n// var tong_tien_all = 0\r\n\r\n// var tien_tt_10 = 0;\r\n// var tien_thue_10 = 0;\r\n// var tien_ck_10 = 0;\r\n// var tong_tien_10 = 0;\r\n\r\n// var tien_tt_5 = 0;\r\n// var tien_thue_5 = 0;\r\n// var tien_ck_5 = 0;\r\n// var tong_tien_5 = 0;\r\n\r\n// var tien_tt_0 = 0;\r\n// var tien_thue_0 = 0;\r\n// var tien_ck_0 = 0;\r\n// var tong_tien_0 = 0;\r\n\r\n// var tien_tt_kct = 0;\r\n// var tien_thue_kct = 0;\r\n// var tien_ck_kct = 0;\r\n// var tong_tien_kct = 0;\r\n\r\n// var tien_tt_kkk = 0;\r\n// var tien_thue_kkk = 0;\r\n// var tien_ck_kkk = 0;\r\n// var tong_tien_kkk = 0;\r\n\r\n// data.forEach(function (entry) {\r\n// tien_tt_all += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_all += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_all += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_all += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n\r\n// if (entry[\"ma_thue\"] == 10) {\r\n// tien_tt_10 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_10 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_10 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_10 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == 5) {\r\n// tien_tt_5 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_5 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_5 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_5 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == 0) {\r\n// tien_tt_0 += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_0 += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_0 += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_0 += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == -1) {\r\n// tien_tt_kct += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_kct += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_kct += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_kct += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n// if (entry[\"ma_thue\"] == -2) {\r\n// tien_tt_kkk += entry[\"inv_TotalAmountWithoutVat\"] == null ? 0 : entry[\"inv_TotalAmountWithoutVat\"];\r\n// tien_thue_kkk += entry[\"inv_vatAmount\"] == null ? 0 : entry[\"inv_vatAmount\"];\r\n// tien_ck_kkk += entry[\"inv_discountAmount\"] == null ? 0 : entry[\"inv_discountAmount\"];\r\n// tong_tien_kkk += entry[\"inv_TotalAmount\"] == null ? 0 : entry[\"inv_TotalAmount\"];\r\n// }\r\n\r\n// });\r\n\r\n// // $$(\"tgtcthue\").setValue(tien_tt_all);\r\n// $$(\"tgtcthue10_inv_InvoiceAuth\").setValue(tien_tt_10);\r\n// $$(\"tgtcthue5_inv_InvoiceAuth\").setValue(tien_tt_5);\r\n// $$(\"tgtcthue0_inv_InvoiceAuth\").setValue(tien_tt_0);\r\n// $$(\"tgtcthuekct_inv_InvoiceAuth\").setValue(tien_tt_kct);\r\n// $$(\"tgtcthuekkk_inv_InvoiceAuth\").setValue(tien_tt_kkk);\r\n\r\n// // $$(\"ttcktmai\").setValue(tien_ck_all);\r\n// $$(\"ttcktmai10_inv_InvoiceAuth\").setValue(tien_ck_10);\r\n// $$(\"ttcktmai5_inv_InvoiceAuth\").setValue(tien_ck_5);\r\n// $$(\"ttcktmai0_inv_InvoiceAuth\").setValue(tien_ck_0);\r\n// $$(\"ttcktmaikct_inv_InvoiceAuth\").setValue(tien_ck_kct);\r\n// $$(\"ttcktmaikkk_inv_InvoiceAuth\").setValue(tien_ck_kkk);\r\n\r\n// // $$(\"tgtthue\").setValue(tien_thue_all);\r\n// $$(\"tgtthue10_inv_InvoiceAuth\").setValue(tien_thue_10);\r\n// $$(\"tgtthue5_inv_InvoiceAuth\").setValue(tien_thue_5);\r\n// $$(\"tgtthue0_inv_InvoiceAuth\").setValue(tien_thue_0);\r\n// $$(\"tgtthuekct_inv_InvoiceAuth\").setValue(tien_thue_kct);\r\n// $$(\"tgtthuekkk_inv_InvoiceAuth\").setValue(tien_thue_kkk);\r\n\r\n// // $$(\"tgtttbso\").setValue(tong_tien_all);\r\n// $$(\"tgtttbso10_inv_InvoiceAuth\").setValue(tong_tien_10);\r\n// $$(\"tgtttbso5_inv_InvoiceAuth\").setValue(tong_tien_5);\r\n// $$(\"tgtttbso0_inv_InvoiceAuth\").setValue(tong_tien_0);\r\n// $$(\"tgtttbsokct_inv_InvoiceAuth\").setValue(tong_tien_kct);\r\n// $$(\"tgtttbsokkk_inv_InvoiceAuth\").setValue(tong_tien_kkk);\ndefine(\"views/aa1\", function(){});\n\ndefine('views/forms/account',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tdisabled: true,\r\n\t\t\t\t\t\trequired: false,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/*{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"store_code\",\r\n\t\t\t\t\t\tlabel: \"Cửa hàng\",\t\t\t\t\t\t\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00052\",\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\")\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"value\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 350,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\")\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tid: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\t\t\t\t\t\t\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn cửa hàng\"\r\n\t\t\t\t\t},*/\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tid: \"cbBranchCode\",\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"branch_code\",\r\n\t\t\t\t\t\tlabel: \"Đơn vị\",\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195\";\r\n\r\n\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"wb_branch_id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\"),\r\n\t\t\t\t\t\t\t\t\t\thidden: true\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"name\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 650,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\"),\r\n\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.space()}{common.icon()}#name#\"\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t//id: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn đơn vị\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (editmode != \"2\") {\r\n\t\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-username\").setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-username\").setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"account\";\r\n\t\t\t\t\t\t\t\t\t\titem.email_sso = item.email;\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, data.item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/account_hsm',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"accountHSM-win\",\r\n position: \"center\",\r\n head: \"Người sử dụng\",\r\n width: 500,\r\n height: 480,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"accountHSM-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n id: \"user_hsm_id\",\r\n view: \"text\",\r\n label: \"Mã UUID\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"user_hsm_id\",\r\n css:\"mcls_uppercase\",\r\n invalidMessage: \"Mã UUID không được để trống\",\r\n },\r\n {\r\n view: \"text\",\r\n type: \"password\",\r\n name: \"password_level2\",\r\n required: true,\r\n labelPosition: \"top\",\r\n label: \"Mật khẩu\",\r\n id: \"accountHSM-password_level2\",\r\n //validate: webix.rules.isEmail,\r\n invalidMessage: \"Mật khẩu không được để trống\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"accountHSM-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var itemData = table.getSelectedItem();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n\r\n var item = form.getValues();\r\n item.wb_user_id = itemData.wb_user_id;\r\n item.window_type = \"account\";\r\n\r\n var url = app.config.host + \"/Account/Update_HSM\";\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"accountHSM-win\").close();\r\n webix.message(\"Lưu thành công\", \"success\");\r\n // app.callEvent(\"dataChanged\", [editmode, data.item]);\r\n } else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n webix.$$(\"accountHSM-win\").close();\r\n },\r\n },\r\n {\r\n id: \"huyUserHSM\",\r\n shortcut: \"F8\",\r\n view: \"button\",\r\n label: \"Xóa (F8)\",\r\n type: \"delete\",\r\n align: \"center\",\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n webix.confirm({\r\n text: \"Bạn chắc chắn muốn xóa tài khoản HSM?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var form = webix.$$(\"accountHSM-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var itemData = table.getSelectedItem();\r\n\r\n var item = { wb_user_id: itemData.wb_user_id };\r\n\r\n var url = app.config.host + \"/Account/Delete_HSM\";\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"accountHSM-win\").close();\r\n webix.message(\"Xóa thành công\", \"success\");\r\n // app.callEvent(\"dataChanged\", [editmode, data.item]);\r\n } else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n // setEditMode: function (mode) {\r\n // \teditmode = mode;\r\n // }\r\n };\r\n});\r\n\ndefine('views/forms/accountpermission',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(item) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00005\",\r\n parameter: {\r\n wb_user_id: item.id,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n dtChuKySo.parse(json, \"json\");\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00006\",\r\n parameter: {\r\n wb_user_id: item.id,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n var dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n dtMauHoaDon.parse(json, \"json\");\r\n\r\n /* for(var i=0;i 0) {\r\n var form = webix.$$(\"accountHSM-form\");\r\n form.setValues(json[0]);\r\n $$(\"huyUserHSM\").show();\r\n } else {\r\n var form = webix.$$(\"accountHSM-form\");\r\n }\r\n });\r\n\r\n // var form = webix.$$(\"accountHSM-form\");\r\n // form.setValues(item);\r\n\r\n // dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByBranch\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: [\r\n \"Ký hóa đơn\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 100,\r\n },\r\n {\r\n id: \"is_sign_invoice_hsm\",\r\n header: [\r\n \"Ký hóa đơn HSM\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 140,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: [\r\n \"Xem\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_new_user\",\r\n header: [\r\n \"Mới\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: [\r\n \"Sửa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: [\r\n \"Xóa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: [\"Diễn giải\", { content: \"textFilter\" }],\r\n width: 350,\r\n hidden: true,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n hidden: true,\r\n },\r\n {\r\n id: \"branch_code\",\r\n header: [\"Chi nhánh\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"is_sso\",\r\n header: [\"Đang liên kết SSO\", {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: 1, value: \"Có\" },\r\n { id: 0, value: \"Không\" },\r\n ],\r\n },],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.is_sso == 1 ? \"Có\" : \"Không\"\r\n }\r\n },\r\n {\r\n id: \"email_sso\",\r\n header: [\"Email liên kết SSO\", { content: \"textFilter\" }],\r\n width: 200,\r\n }\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n table.refresh();\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/accountbranch',[\"app\",\"locale\"], function (app,_) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00190\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"store_code\",\r\n\t\t\t\t\t\tlabel: \"Cửa hàng\",\t\t\t\t\t\t\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00052\",\r\n\t\t\t\t\t\t\t\ttextValue: \"value\",\r\n\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"id\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"MA\")\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"value\",\r\n\t\t\t\t\t\t\t\t\t\twidth: 350,\r\n\t\t\t\t\t\t\t\t\t\theader: _(\"TEN\")\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tid: \"dmtab-store\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\t\t\t\t\t\t\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn cửa hàng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"accountbranch\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/branchpermission',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\tfunction initUI(item) {\r\n\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00095\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t, function (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n\t\t\t\tdtChuKySo.parse(json, \"json\");\r\n\r\n\r\n\r\n\t\t\t});\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00096\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n\t\t\t\tdtMauHoaDon.parse(json, \"json\");\r\n\t\t\t\t\r\n\r\n\t\t\t});\r\n\r\n\t\t\r\n\r\n\t\t$$(\"chkIssigninvoice\").setValue(item.is_sign_invoice);\r\n\t\t$$(\"chkIsviewuser\").setValue(item.is_view_user);\r\n\t\t$$(\"chkIsedituser\").setValue(item.is_edit_user);\r\n\t\t$$(\"chkIsdeluser\").setValue(item.is_del_user);\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"phanquyen-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\trows: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tmultiview: {\r\n\t\t\t\t\t\t\tfitBiggest: true\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"CHU_KY_SO\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtChuKySo\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tresizeRow: true,\r\n\t\t\t\t\t\t\t\t\tfixedRowHeight: false,\r\n\t\t\t\t\t\t\t\t\trowLineHeight: 25,\r\n\t\t\t\t\t\t\t\t\trowHeight: 70,\r\n\t\t\t\t\t\t\t\t\t//threeState: true,\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"cer_serial\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 280\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"subject_name\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Chủ thể\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 500\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"begin_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày bắt đầu\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"end_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày kết thúc\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"MAU_HDON\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtMauHoaDon\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ma_loai\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MA_LOAI\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"mau_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MAU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ky_hieu\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"KY_HIEU\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"tu_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"TU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"den_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"DEN_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ngay_bd_sd\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"NGAY_BD_SD\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150,\r\n\t\t\t\t\t\t\t\t\t\t\tformat: function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\t\t\t\t\t\ttext = removeTimeZoneT(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"QUYEN_TRUY_CAP_HD\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIssigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"issigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"KY_HOA_DON\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_VIEW_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelAlign: \"right\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_EDIT_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_DEL_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\",\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\t\t\t\t\t\t\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\t\t\t\t\twb_user_id: win.config.wb_user_id,\r\n\t\t\t\t\t\t\t\t\t\t\tckspermission: dtChuKySo.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvtemppermission: dtMauHoaDon.serialize(),\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tinvoicepermission: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tissigninvoice: $$(\"chkIssigninvoice\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisviewuser: $$(\"chkIsviewuser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisedituser: $$(\"chkIsedituser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisdeluser: $$(\"chkIsdeluser\").getValue()\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Phanquyen\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(data)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, data, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = webix.$$(\"dmwindowData\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_sign_invoice = this.invoicepermission.issigninvoice;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_view_user = this.invoicepermission.isviewuser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_edit_user = this.invoicepermission.isedituser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_del_user = this.invoicepermission.isdeluser;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttable.updateItem(item.id, item);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"phanquyen-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: result.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", shortcut: \"esc\", type: \"danger\", label: \"Hủy bỏ (ESC)\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theight: 5\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: initUI\r\n\t};\r\n\r\n});\ndefine('views/accountbranch',[\"app\", \"views/forms/accountbranch\", \"locale\", \"views/forms/branchpermission\"], function (app, dmwindowform, _, accountpermission) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Người sử dụng\", details: \"Danh mục người sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 100,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép sửa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép xóa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n item.window_type = \"accountbranch\";\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.username,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPhanQuyen\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-lock\",\r\n label: _(\"PHAN_QUYEN\"),\r\n width: 100,\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn người sử dụng\", \"error\");\r\n return;\r\n }\r\n\r\n var win = this.$scope.ui(accountpermission.$ui);\r\n win.config.wb_user_id = item.id;\r\n accountpermission.initUI(item);\r\n win.getHead().setHTML(\"Người sử dụng: \" + item.username);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByBranch\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: [\r\n \"Ký hóa đơn\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 150,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: [\r\n \"Xem\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: [\r\n \"Sửa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: [\r\n \"Xóa\",\r\n {\r\n content: \"selectFilter\",\r\n options: [\r\n { id: \"\", value: \"\" },\r\n { id: \"C\", value: \"C\" },\r\n { id: \"K\", value: \"K\" },\r\n ],\r\n },\r\n ],\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: [\"Diễn giải\", { content: \"textFilter\" }],\r\n width: 350,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/accountstore',[\"app\",\"locale\"], function (app,_) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Người sử dụng\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 480,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"username\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabel: \"Tên truy cập\",\r\n\t\t\t\t\t\tid: \"dmtab-username\",\r\n\t\t\t\t\t\tinvalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isSpecialCharacter,\r\n\t\t\t\t\t\tcss: \"mcls_uppercase\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tif (newv != undefined) {\r\n\t\t\t\t\t\t\t\t\tif (oldv != undefined) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv.toUpperCase() != oldv.toUpperCase()) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(this.config.id).setValue(newv.toUpperCase());\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tname: \"wb_role_id\",\r\n\t\t\t\t\t\tlabel: \"Nhóm quyền\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00191\",\r\n\t\t\t\t\t\tid: \"dmtab-nhomquyen\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Bạn chưa chọn nhóm quyền\"\r\n\t\t\t\t\t},\t\t\t\t\t\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"email\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Email\",\r\n\t\t\t\t\t\tid: \"dmtab-email\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Email không được để trống hoặc không đúng định dạng\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"fullname\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"Tên người sử dụng\",\r\n\t\t\t\t\t\tid: \"dmtab-fullname\",\r\n\t\t\t\t\t\t//validate: webix.rules.isEmail,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên người sử dụng không được để trống\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-issigninvoice\",\r\n\t\t\t\t\t\t\t\tname:\"issigninvoice\",\r\n\t\t\t\t\t\t\t\tlabel:\"Ký hóa đơn\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" ,\r\n\t\t\t\t\t\t\t\tlabelWidth:85\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"fieldset\",\r\n\t\t\t\t\t\tlabel:\"Quyền truy cập\",\r\n\t\t\t\t\t\tbody:{\r\n\t\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isviewuser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isviewuser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xem\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\tid:\"dmtab-isedituser\",\r\n\t\t\t\t\t\t\t\tname:\"isedituser\",\r\n\t\t\t\t\t\t\t\tlabel:\"Sửa\",\r\n\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview:\"checkbox\",\r\n\t\t\t\t\t\t\t\t\tid:\"dmtab-isdeluser\",\r\n\t\t\t\t\t\t\t\t\tname:\"isdeluser\",\r\n\t\t\t\t\t\t\t\t\tlabel:\"Xóa\",\r\n\t\t\t\t\t\t\t\t\tcheckValue:\"C\",\r\n\t\t\t\t\t\t\t\t\tuncheckValue:\"K\" \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{ view: \"textarea\", name: \"dien_giai\", labelPosition: \"top\", label: \"Diễn giải\", id: \"dmtab-diengiai\" },\r\n\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\titem.window_type = \"accountstore\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Update\";\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: data.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/storepermission',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\tfunction initUI(item) {\r\n\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"CM00095\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t, function (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\r\n\t\t\t\tdtChuKySo.parse(json, \"json\");\r\n\r\n\r\n\r\n\t\t\t});\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t.post(url,\r\n\t\t\t{\r\n\t\t\t\tcommand: \"USER_TEMP\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_user_id: item.id,\r\n\t\t\t\t\tstore_code: item.store_code\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction (text) {\r\n\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\r\n\t\t\t\tdtMauHoaDon.parse(json, \"json\");\t\t\t\t\r\n\r\n\t\t\t});\r\n\t\t\r\n\r\n\t\t$$(\"chkIssigninvoice\").setValue(item.is_sign_invoice);\r\n\t\t$$(\"chkIsviewuser\").setValue(item.is_view_user);\r\n\t\t$$(\"chkIsedituser\").setValue(item.is_edit_user);\r\n\t\t$$(\"chkIsdeluser\").setValue(item.is_del_user);\r\n\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"phanquyen-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\trows: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tmultiview: {\r\n\t\t\t\t\t\t\tfitBiggest: true\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"CHU_KY_SO\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtChuKySo\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tresizeRow: true,\r\n\t\t\t\t\t\t\t\t\tfixedRowHeight: false,\r\n\t\t\t\t\t\t\t\t\trowLineHeight: 25,\r\n\t\t\t\t\t\t\t\t\trowHeight: 70,\r\n\t\t\t\t\t\t\t\t\t//threeState: true,\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"cer_serial\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 280\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"subject_name\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Chủ thể\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 500\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"begin_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày bắt đầu\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"end_date\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: \"Ngày kết thúc\",\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"MAU_HDON\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tid: \"dtMauHoaDon\",\r\n\t\t\t\t\t\t\t\t\tview: \"datatable\",\r\n\t\t\t\t\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chon1\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [{ text: \"\", content: \"masterCheckbox\" }, _(\"CHON\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: 'C',\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: 'K',\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: \"{common.checkbox()}\"\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ma_loai\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MA_LOAI\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"mau_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"MAU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ky_hieu\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"KY_HIEU\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"tu_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"TU_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"den_so\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"DEN_SO\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 100\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"ngay_bd_sd\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: _(\"NGAY_BD_SD\"),\r\n\t\t\t\t\t\t\t\t\t\t\twidth: 150,\r\n\t\t\t\t\t\t\t\t\t\t\tformat: function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\t\t\t\t\t\ttext = removeTimeZoneT(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: _(\"QUYEN_TRUY_CAP_HD\"),\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIssigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"issigninvoice\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"KY_HOA_DON\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isviewuser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_VIEW_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelAlign: \"right\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isedituser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_EDIT_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid: \"chkIsdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\t\t\t\t\t\tname: \"isdeluser\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelRight: _(\"IS_DEL_USER\"),\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue: \"C\",\r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue: \"K\",\r\n\t\t\t\t\t\t\t\t\t\t\tlabelWidth: 0\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\",\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar dtChuKySo = $$(\"dtChuKySo\");\r\n\t\t\t\t\t\t\t\t\t\tvar dtMauHoaDon = $$(\"dtMauHoaDon\");\r\n\t\t\t\t\t\t\t\t\t\t//var dtDonvi = $$(\"dtDonvi\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = {\r\n\t\t\t\t\t\t\t\t\t\t\twb_user_id: win.config.wb_user_id,\r\n\t\t\t\t\t\t\t\t\t\t\tckspermission: dtChuKySo.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvtemppermission: dtMauHoaDon.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\t//dvpermission: dtDonvi.serialize(),\r\n\t\t\t\t\t\t\t\t\t\t\tinvoicepermission: {\r\n\t\t\t\t\t\t\t\t\t\t\t\tissigninvoice: $$(\"chkIssigninvoice\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisviewuser: $$(\"chkIsviewuser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisedituser: $$(\"chkIsedituser\").getValue(),\r\n\t\t\t\t\t\t\t\t\t\t\t\tisdeluser: $$(\"chkIsdeluser\").getValue()\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/Account/Phanquyen\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(data)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, data, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = webix.$$(\"dmwindowData\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_sign_invoice = this.invoicepermission.issigninvoice;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_view_user = this.invoicepermission.isviewuser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_edit_user = this.invoicepermission.isedituser;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.is_del_user = this.invoicepermission.isdeluser;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttable.updateItem(item.id, item);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"phanquyen-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: result.error });\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", shortcut: \"esc\", type: \"danger\", label: \"Hủy bỏ (ESC)\", align: \"center\",\r\n\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theight: 5\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: initUI\r\n\t};\r\n\r\n});\ndefine('views/accountstore',[\"app\", \"views/forms/accountstore\", \"locale\", \"views/forms/storepermission\"], function (app, dmwindowform, _, accountpermission) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Người sử dụng\", details: \"Danh mục người sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 100,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép sửa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item.username == \"ADMINISTRATOR\") {\r\n webix.message(\"Bạn không được phép xóa tài khoản này !\", \"error\");\r\n return;\r\n }\r\n\r\n item.window_type = \"accountstore\";\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.username,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPhanQuyen\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-lock\",\r\n label: _(\"PHAN_QUYEN\"),\r\n width: 100,\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn người sử dụng\", \"error\");\r\n return;\r\n }\r\n\r\n var win = this.$scope.ui(accountpermission.$ui);\r\n win.config.wb_user_id = item.id;\r\n accountpermission.initUI(item);\r\n win.getHead().setHTML(\"Người sử dụng: \" + item.username);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n url: app.config.host + \"/Account/AllUsersByStore\",\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"username\",\r\n header: [\"Tên truy cập\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n {\r\n id: \"wb_role_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00007\",\r\n header: [\"Nhóm quyền\", { content: \"selectFilter\" }],\r\n width: 250,\r\n },\r\n {\r\n id: \"email\",\r\n header: [\"Email\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"fullname\",\r\n header: [\"Tên người sử dụng\", { content: \"textFilter\" }],\r\n width: 200,\r\n },\r\n {\r\n id: \"is_sign_invoice\",\r\n header: \"Ký hóa đơn\",\r\n width: 150,\r\n },\r\n {\r\n id: \"is_view_user\",\r\n header: \"Xem\",\r\n width: 60,\r\n },\r\n {\r\n id: \"is_edit_user\",\r\n header: \"Sửa\",\r\n width: 60,\r\n },\r\n {\r\n id: \"is_del_user\",\r\n header: \"Xóa\",\r\n width: 60,\r\n },\r\n {\r\n id: \"explanation\",\r\n header: \"Diễn giải\",\r\n width: 350,\r\n },\r\n {\r\n id: \"store_code\",\r\n header: [\"Mã cửa hàng\", { content: \"textFilter\" }],\r\n width: 150,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/menus/search',[],function(){\r\n\r\nreturn {\r\n\t$ui:{\r\n\t\tview: \"popup\",\r\n\t\tid: \"searchPopup\",\r\n\r\n\t\twidth: 300,\r\n\t\tbody:{\r\n\t\t\trows:[\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"search\"\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tborderless:true, css: \"extended_search\", template: \"Extended search\", height: 40\r\n\t\t\t\t}\r\n\t\t\t]\r\n\r\n\t\t}\r\n\t}\r\n};\r\n\r\n});\ndefine('views/forms/changepass',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\", css: \"custom-window\",\r\n\t\t\thead: \"Đổi mật khẩu\",\r\n\t\t\tbody: {\r\n\t\t\t\tcss: \"custom-body\",\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id:\"oldpass\", name: \"oldpass\", required: true, invalidMessage: \"Mật khẩu cũ không được bỏ trống\", type: \"password\", label: \"Mật khẩu cũ\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"oldpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t// onBlur: function() {\r\n\t\t\t\t\t\t\t// \tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t// \t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t// \tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*(),.?\":{}|<>]).{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t// \tlet errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t// \tif (!errorLabel) {\r\n\t\t\t\t\t\t\t// \t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t// \t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t// \t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t// \t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t// \t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t// \t}\r\n\r\n\t\t\t\t\t\t\t// \t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t// \tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t// \t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t// \t} else {\r\n\t\t\t\t\t\t\t// \t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{ view: \"text\", id:\"newpass\", name: \"newpass\", required: true, invalidMessage: \"Mật khẩu mới không được bỏ trống\", type: \"password\", label: \"Mật khẩu mới\", labelPosition: \"top\" , css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"newpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view: \"text\", id:\"confirmpass\", name: \"confirmpass\", required: true, invalidMessage: \"Xác nhận mật khẩu không được bỏ trống\", type: \"password\", label: \"Xác nhận mật khẩu\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"confirmpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{ view: \"template\", template: \"Chú ý: Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt.\", css: \"warning-text\"},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcss: \"custom-button\",\r\n\t\t\t\t\t\tmargin: 30,\r\n\t\t\t\t\t\tcols: [\t\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Lưu (F10)\", hotkey: \"F10\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\r\n\t\t\t\t\t\t\t\t\tif (!passwordRegex.test(item.newpass) || !passwordRegex.test(item.confirmpass)) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.newpass != item.confirmpass) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu mới không giống nhau\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/ChangePass\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Đổi mật khẩu thành công !\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/modules/chatplugin',[\r\n 'app',\r\n 'models/user'\r\n], function (app, user) {\r\n \r\n var hub = null;\r\n // var ChatUrl = \"http://localhost:52527/signalr\";\r\n // //This will hold the connection to the signalr hub \r\n // var SignalrConnection = $.hubConnection(ChatUrl, {\r\n // useDefaultPath: false\r\n // });\r\n // var hub = SignalrConnection.createHubProxy('chatHub');\r\n // //connecting the client to the signalr hub \r\n // hub.on(\"addNewMessageToPage\", function (name, message) {\r\n // console.log(name + message);\r\n // });\r\n\r\n // SignalrConnection.disconnected(function () {\r\n // console.log('Connection disconnected');\r\n // });\r\n // SignalrConnection.start().done(function () {\r\n // console.log(\"Connected to Signalr Server\");\r\n // })\r\n // .fail(function () {\r\n // console.log(\"failed in connecting to the signalr server\");\r\n // });\r\n\r\n\r\n return {\r\n hub: function () {\r\n return hub;\r\n }\r\n }\r\n});\ndefine('views/forms/chat',[\"app\", \"models/user\", \"views/modules/chatplugin\"], function (app, user, proxy) {\r\n // var hub = proxy.hub();\r\n // hub.on(\"addNewMessageToPage\", function (name, message) {\r\n // addChatMessage(name, message);\r\n // });\r\n\r\n // function change_weather(i) {\r\n // var jj = proxy.hub();\r\n // jj.invoke('change_weather', i);\r\n // }\r\n\r\n function addChatMessage(name, message) {\r\n var chat = $$(\"chat\");\r\n\r\n chat.add({\r\n user: name,\r\n value: message,\r\n });\r\n\r\n var lastId = chat.getLastId();\r\n chat.scrollTo(0, lastId);\r\n\r\n $$(\"message\").setValue(\"\");\r\n $$(\"message\").focus();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"chat-win\",\r\n position: \"center\",\r\n head: \"MobiFone Invoice Chat\",\r\n // head: {\r\n // view: \"toolbar\",\r\n // height: 25,\r\n // cols: [\r\n // { view: \"label\", label: \"MobiFone Invoice Chat\" },\r\n // {\r\n // view: \"icon\", icon: \"times\", hotkey: \"esc\", click: function () {\r\n // $$(\"chat-win\").close();\r\n // }\r\n // }\r\n // ]\r\n // },\r\n width: 700,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"chat-form\",\r\n complexData: true,\r\n elements: [\r\n //rows: [\r\n // { template: \"Webix Based Chat\", type: \"header\" },\r\n // {\r\n // view: \"list\", id: \"chat\", gravity: 3,\r\n // // url: \"faye->/data\", save: \"faye->/data\",\r\n // // type: { height: \"auto\" },\r\n // // template: chat_template\r\n // },\r\n {\r\n view: \"list\",\r\n id: \"chat\",\r\n gravity: 3,\r\n type: { height: \"auto\" },\r\n template: function (obj) {\r\n return \"\" + obj.user + \" \" + obj.value;\r\n },\r\n },\r\n {\r\n cols: [\r\n { view: \"textarea\", id: \"message\", placeholder: \"Type message here\", gravity: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"button\",\r\n value: \"Send\",\r\n type: \"form\",\r\n // width: 100,\r\n click: function () {\r\n //change_weather(124124);\r\n var text = $$(\"message\").getValue();\r\n var ds = user.getCurrentUser();\r\n //webix.message(\"Hệ thống đang bảo trì !\", \"error\");\r\n //send(ds, text);\r\n var hub = proxy.hub();\r\n hub.invoke(\"Send\", user.getCurrentUser(), text)\r\n .done(function () {\r\n console.log(\"send ok !\");\r\n //addChatMessage(ds, text);\r\n })\r\n .fail(function (error) {\r\n console.log(error);\r\n });\r\n },\r\n // click: function () {\r\n // webix.message(\"Hệ thống đang bảo trì !\", \"error\");\r\n // }\r\n },\r\n {\r\n view: \"button\",\r\n value: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n hotkey: \"esc\",\r\n align: \"center\",\r\n // width: 100,\r\n click: function () {\r\n webix.$$(\"chat-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n //], type: \"space\", margin: 2\r\n },\r\n };\r\n});\r\n\ndefine('views/hotroform',[\"app\", \"locale\"], function (app, _) {\r\n //var json = version.getInfocompany();\r\n //$$(\"hotro-form\").setValues(json);\r\n\r\n var layout = {\r\n view: \"window\",\r\n modal: true,\r\n id: \"hotro-win\",\r\n position: \"center\",\r\n head: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n width: 500,\r\n // height: 700,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"hotro-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n id: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n id: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_lien_he\",\r\n id: \"nguoi_lien_he\",\r\n label: _(\"Người liên hệ\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n invalidMessage: \"Bạn phải nhập người liên hệ\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"sdt\",\r\n id: \"sdt\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n //webix.ru\r\n invalidMessage: \"Bạn phải nhập số điện thoại\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"teamview\",\r\n id: \"teamview\",\r\n label: _(\"Teamview (UltraViewer)\"),\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n id: \"pass\",\r\n label: \"Password\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"noi_dung\",\r\n view: \"textarea\",\r\n name: \"noi_dung\",\r\n label: \"Yêu cầu hỗ trợ\",\r\n height: 120,\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"hotro-form\");\r\n\r\n var item = form.getValues();\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y - %H:%i\");\r\n var string = format(new Date());\r\n\r\n var descrip =\r\n \"Ngày :\" +\r\n string +\r\n \"
\" +\r\n \"Công ty :\" +\r\n item.ten_dvcs +\r\n \"
\" +\r\n \"Mã số thuế :\" +\r\n item.ms_thue +\r\n \"
\" +\r\n \"Người liên hệ: \" +\r\n item.nguoi_lien_he +\r\n \"
\" +\r\n \"Số điện thoại: \" +\r\n item.sdt +\r\n \"
\" +\r\n \"Teamview (UltraViewer): \" +\r\n item.teamview +\r\n \"
\" +\r\n \"Pass: \" +\r\n item.pass +\r\n \"
\" +\r\n \"Nội dung cần hỗ trợ: \" +\r\n item.noi_dung +\r\n \"
\";\r\n\r\n if ($$(\"hotro-form\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var data = {\r\n mst: item.ms_thue,\r\n noidung: item.noi_dung,\r\n nguoi_lien_he: item.nguoi_lien_he,\r\n sdt_nguoi_lien_he: item.sdt,\r\n ultra_teamview: item.teamview,\r\n pass: item.pass,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/SendSupport\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n webix.message(\"Gửi yêu cầu hỗ trợ thành công !\", \"debug\");\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhập lại (F9)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n },\r\n },\r\n\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"hotro-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n return {\r\n $ui: layout,\r\n initUI: function (json) {\r\n $$(\"hotro-form\").setValues(json);\r\n },\r\n };\r\n});\r\n\ndefine('views/menus/version',[\"app\"], function (app) {\r\n\r\n // var user = null,\r\n // credentials = {},\r\n // oauthUrl = ''\r\n // ;\r\n\r\n // var host = \"\";\r\n // var start = \"\";\r\n\r\n // require([\"app\"], function (app) {\r\n // host = app.config.host;\r\n // start = app.config.start;\r\n // });\r\n\r\n // credentials = Cookies.getJSON(\"appCookie\") || {};\r\n\r\n // function saveSetting(key, value, reload) {\r\n // if (current_user) {\r\n // var id = current_user.id,\r\n // settings = current_user.settings;\r\n\r\n // if (!settings[key] || value != settings[key]) {\r\n // if (reload)\r\n // document.location.reload();\r\n // }\r\n // }\r\n // }\r\n\r\n return {\r\n //saveSetting: saveSetting,\r\n // getVersion: function () {\r\n // var result = webix.ajax().sync().get(app.config.host + \"/System/GetVersion\");\r\n // var json = JSON.parse(result.response);\r\n // //console.log(json);\r\n // return json;\r\n // },\r\n\r\n getWarning: function () {\r\n // var item = {\r\n // command: \"NOTYFI_INV_TEMP\",\r\n // parameter: {\r\n\r\n // }\r\n // }\r\n // webix.ajax()\r\n // .headers({ \"Content-Type\": \"application/json\" })\r\n // .post(app.config.host + \"/System/ExecuteCommand\", item, function (text) {\r\n // var res = JSON.parse(text);\r\n\r\n // if (res.hasOwnProperty(\"error\")) {\r\n // webix.message({ type: \"error\", text: res.error });\r\n // }\r\n // else {\r\n // webix.message(\"Đã thực hiện xong\");\r\n // }\r\n // });\r\n // webix.ajax().post(app.config.host + \"/System/ExecuteCommand\", item, function () {\r\n\r\n // });\r\n // var json = JSON.parse(result.response);\r\n // //console.log(json);\r\n // return json;\r\n },\r\n getInfocompany: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetInfoCompany\");\r\n var json = JSON.parse(result.response);\r\n //console.log(json);\r\n return json;\r\n },\r\n getMST: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetMST\");\r\n var json = result.response.substring(1, result.response.length - 1);\r\n return json;\r\n },\r\n GetSchema: function () {\r\n var result = webix.ajax().sync().get(app.config.host + \"/Invoice/GetSchema\");\r\n var json = result.response.substring(1, result.response.length - 1);\r\n return json;\r\n }\r\n\r\n };\r\n\r\n});\ndefine('views/forms/link_sso',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\",\r\n\t\t\thead: \"Liên kết tài khoản SSO\",\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id: \"email_sso\", name: \"email_sso\", placeholder: \"Nhập địa chỉ Email SSO\", label: \"Email\", required: true, invalidMessage: \"Email để trống hoặc nhập không đúng định dạng!\",validate: webix.rules.isEmail, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"otp\",name: \"otp\", disabled:true, label: \"Mã OTP\", labelPosition: \"top\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"btn-sendOtp\", label: \"Gửi OTP\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/GenerateOtpSSO\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t $$(\"confirm-link-btn\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"otp\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"btn-sendOtp\").setValue(\"Gửi lại OTP\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Gửi yêu cầu thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"confirm-link-btn\", label: \"Xác nhận liên kết\", type: \"success\", align: \"center\", disabled: true, width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.otp == null||item.otp == \"\") {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mã OTP không được để trống!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/VerifyOtpSSO\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(\"Liên kết thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.modalbox({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"LIÊN KẾT THÀNH CÔNG!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Quý khách vui lòng đăng nhập bằng tài khoản SSO để tiếp tục sử dụng dịch vụ.\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttons: [\"OK\"],\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\t$oninit: function () {\r\n // Load data from API and fill the form\r\n\t\t\tvar apiUrl = app.config.sso + \"/partner/getInfo\";\r\n\t\t\twebix.ajax().get(apiUrl, function (text) {\r\n\t\t\t\tvar userData = JSON.parse(text);\r\n\t\t\t\tvar userInfo = userData.result.userInfo;\r\n\t\t\t\tvar form = $$(\"listuser-form\");\r\n\t\t\t\tform.setValues(userInfo);\r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/menus/profile',[\"models/user\", \"views/forms/changepass\", \"locale\", \"views/forms/chat\", \"views/hotroform\", \"views/menus/version\", \"views/forms/link_sso\"], function (user, changepass, _, chat, hotroform, version, link_sso) {\r\n var data = [\r\n { id: \"1\", icon: \"mdi mdi-key\", value: \"USER\" },\r\n { id: \"changepasssso\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS_SSO\") },\r\n { id: \"changepass\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS\") },\r\n { id: \"link_sso\", icon: \"mdi mdi-link\", value: _(\"LINK_SSO\") },\r\n { id: \"delcache\", icon: \"mdi mdi-settings\", value: _(\"DEL_CACHE\") },\r\n { id: \"signOut\", icon: \"mdi mdi-logout\", value: _(\"LOGOUT\") },\r\n ];\r\n\r\n var cookie = user.getAppCookie();\r\n var id_token = \"\";\r\n // Ktra xem có hiển thị link SSO không\r\n if ((cookie.id_token != null && cookie.id_token != \"\") || (cookie != null && cookie.is_link_sso == true)) {\r\n id_token = cookie.id_token;\r\n data = data.filter(function(item) {\r\n return item.id !== \"link_sso\";\r\n });\r\n }\r\n else{\r\n data = data.filter(function(item) {\r\n return item.id !== \"changepasssso\";\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"popup\",\r\n id: \"profilePopup\",\r\n css: \"profilePopup\",\r\n resize: true,\r\n autofit: true,\r\n minHeight: 300,\r\n minWidth: 300,\r\n body: {\r\n view: \"list\",\r\n select: true,\r\n datatype: \"json\",\r\n css: \"profile\",\r\n data: data,\r\n template: function (obj) {\r\n if (obj.value == \"USER\") {\r\n var k =\r\n \"
\" +\r\n \"

\" +\r\n user.getCurrentUser() +\r\n \"


\" +\r\n // + \"

Tên công ty: 1


\"\r\n // + \"

Mã số thuế: 2


\"\r\n \"

Phiên bản: 1.0.0.0


\" +\r\n \"

Copyrights © 2021 Phần mềm Hóa đơn điện tử MobiFone Invoice


\" +\r\n \"Xem thêm\" +\r\n \"
\" +\r\n \"
\";\r\n return k;\r\n } else {\r\n return \" \" + obj.value + \"\";\r\n }\r\n },\r\n type: {\r\n height: \"auto\",\r\n },\r\n // view: \"submenu\",\r\n // id: \"profilePopup\",\r\n // width: 200,\r\n // padding: 0,\r\n // data: [\r\n // \t/* {id: 1, icon: \"user\", value: \"Thông tin cá nhân\"},\r\n // \t{id: 2, icon: \"cog\", value: \"Thông tin tài khoản\"},\r\n // \t{id: 3, icon: \"calendar\", value: \"Lịch làm việc\"},\r\n // \t{id: 5, icon: \"tasks\", value: \"Nhiệm vụ\"},\r\n // \t{ $template:\"Separator\" }, */\r\n // \t{ id: \"changepass\", icon: \"mdi mdi-key\", value: _(\"CHANGE_PASS\") },\r\n // \t{ id: \"delcache\", icon: \"mdi mdi-settings\", value: _(\"DEL_CACHE\") },\r\n // \t{ $template: \"Separator\" },\r\n // \t// { id: \"hotro\", icon: \"mdi mdi-ambulance\", value: _(\"MobiFone Invoice Hỗ trợ\") },\r\n // \t// { id: \"chat\", icon: \"mdi mdi-comment-account-outline\", value: _(\"MobiFone Invoice Chat\") },\r\n // \t// { $template: \"Separator\" },\r\n // \t{ id: \"signOut\", icon: \"mdi mdi-logout\", value: _(\"LOGOUT\") }\r\n\r\n // ],\r\n // type: {\r\n // \ttemplate: function (obj) {\r\n // \t\tif (obj.type)\r\n // \t\t\treturn \"
\";\r\n // \t\treturn \" \" + obj.value + \"\";\r\n // \t}\r\n // },\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n\r\n if (id == \"signOut\") {\r\n user.logout();\r\n // document.location.reload();\r\n\r\n /* require([\"app\"], function(app){\r\n\t\t\t\t\t\t\t\tapp.router(app.config.start);\r\n\t\t\t\t\t\t\t}); */\r\n }\r\n\r\n if (id == \"changepasssso\") {\r\n window.open(\"https://auth-sso.mobifone.vn/vn/profile-information\", \"_blank\");\r\n }\r\n\r\n if (id == \"changepass\") {\r\n var win = this.$scope.ui(changepass.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"link_sso\") {\r\n var win = this.$scope.ui(link_sso.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"hotro\") {\r\n var json = version.getInfocompany();\r\n\r\n var win = this.$scope.ui(hotroform.$ui);\r\n hotroform.initUI(json);\r\n win.show();\r\n }\r\n\r\n if (id == \"chat\") {\r\n var win = this.$scope.ui(chat.$ui);\r\n win.show();\r\n }\r\n\r\n if (id == \"delcache\") {\r\n webix.storage.local.remove(\"APP_CACHE\");\r\n webix.storage.local.put(\"APP_CACHE\", {});\r\n\r\n webix.message(\"Đã xóa cache dữ liệu\", \"debug\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n };\r\n});\r\n\n// JavaScript source code\r\ndefine('views/menus/notify',[\"app\", \"models/user\"], function (app, user) {\r\n var checkDataEmpty = 0;\r\n var dataList = new webix.DataCollection({\r\n data: [],\r\n });\r\n\r\n return {\r\n $ui: {\r\n view: \"popup\",\r\n id: \"notifyPopup\",\r\n css: \"notifyPopup\",\r\n resize: true,\r\n autofit: true,\r\n minHeight: 250,\r\n minWidth: 300,\r\n body: {\r\n view: \"list\",\r\n select: true,\r\n datatype: \"json\",\r\n css: \"profile\",\r\n // url: {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // var url = app.config.host + \"/Invoice68/GetInvoiceNotify\";\r\n\r\n // return webix.ajax(url, callback, view);\r\n\r\n // //webix.ajax().get(app.config.host + \"/Invoice68/GetInvoiceNotify\", function (text) {\r\n // // var listcerts = JSON.parse(text);\r\n // // if (listcerts.length > 0) {\r\n // // return listcerts;\r\n // // }\r\n // // else {\r\n // // var itemEmpty = {\r\n // // tgian_gui: null,\r\n // // contentnotify: \"Không có dữ liệu để hiển thị.\"\r\n // // };\r\n // // listcerts.push(itemEmpty);\r\n // // return listcerts;\r\n // // }\r\n // // //return webix.ajax(url, callback, view);\r\n // //});\r\n // }\r\n // },\r\n template: function (obj) {\r\n if (obj.tgian_gui != null) {\r\n return \"

\" + obj.contentnotify + \"

\" + \"

\" + obj.tgian_gui + \"

\";\r\n }\r\n else {\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.height = \"80px\";\r\n return \"

\" + obj.contentnotify + \"

\";\r\n }\r\n },\r\n type: {\r\n height: \"auto\",\r\n },\r\n on: {\r\n onAfterLoad: function () {\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.borderRadius = \"8px\";\r\n },\r\n },\r\n data: dataList\r\n },\r\n },\r\n showNotify: function() {\r\n if(dataList && dataList.count() == 0) {\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetInvoiceNotify\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n dataList.parse(listcerts);\r\n document.getElementsByClassName(\"notifyPopup\")[0].style.borderRadius = \"8px\";\r\n }\r\n });\r\n } \r\n }\r\n };\r\n});\r\n\ndefine('views/menus/menubar',[\"app\"], function (app) {\r\n\twebix.Touch.enable();\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"menu\",\r\n\t\t\tid: \"app:menu\",\r\n\t\t\turl: app.config.host + \"/System/GetMenuBar\",\r\n\t\t\tautowidth: true,\r\n\t\t\tcss: { \"background\": \"#005EB2\", \"padding-top\": \"0px\" },\r\n\t\t\topenAction:\"click\",\r\n\t\t\ttemplate: function (obj) {\r\n\t\t\t\tvar html = '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ ' ' + obj.icon\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
' + obj.value + '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\treturn html;\r\n\t\t\t},\r\n\t\t\twidth:1200,\r\n\t\t\ton: {\r\n\t\t\t\tonMenuItemClick: function (id) {\r\n\t\t\t\t\tvar item = this.getMenuItem(id);\r\n\r\n\t\t\t\t\tif (item.url != \"\") {\r\n\t\t\t\t\t\tvar win = window.open(item.url, '_blank');\r\n\t\t\t\t\t\twin.focus();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (item.code == \"\") return;\r\n\t\t\t\t\tif (item.code == \"dashboard\") {\r\n\t\t\t\t\t\t$$(\"head-title\").define(\"hidden\", true);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t$$(\"head-title\").show();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar start = item.window_id != \"\" ? item.code + \":\" + item.window_id : item.code;\r\n\t\t\t\t\tthis.$scope.show(\"./\" + start);\r\n\r\n\t\t\t\t\tvar _URL = window.location.href;\r\n\t\t\t\t\tif (!_URL.includes(item.window_id)) {\r\n\t\t\t\t\t\t$$(\"head-title\").removeView(\"tlbParams\");\r\n\t\t\t\t\t\twebix.$$(\"title\").parse({ title: item.value, details: item.details });\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.code == \"tinhhinhsudung\" || item.code == \"bangkebanra\") {\r\n\t\t\t\t\t\t$$(\"head-title\").removeView(\"tlbParams\");\r\n\t\t\t\t\t\twebix.$$(\"title\").parse({ title: item.value, details: item.details });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ttype: {\r\n\t\t\t\tsubsign: true\r\n\t\t\t}\r\n\t\t},\r\n\t\tgetApiHost: function () {\r\n\t\t\treturn app.config.host;\r\n\t\t}\r\n\t};\r\n\r\n});\n// icon button with count marker\r\nwebix.protoUI({\r\n\tname:\"icon\",\r\n\t$skin:function(){\r\n\t\tthis.defaults.height = webix.skin.$active.inputHeight;\r\n\t},\r\n\tdefaults:{\r\n\t\ttemplate:function(obj){\r\n\t\t\tvar html = \"\";\r\n\t\t\treturn html;\r\n\t\t},\r\n\t\twidth:33\r\n\t},\r\n\t_set_inner_size:function(){\r\n\r\n\t}\r\n}, webix.ui.button);\ndefine(\"views/webix/icon\", function(){});\n\n// Type for left menu\r\nwebix.type(webix.ui.tree, {\r\n\tname:\"menuTree\",\r\n\theight: 40,\r\n\ticon:function(obj, common){\r\n\t\tvar html = \"\";\r\n\t\t/*var open = \"\";\r\n\t\tfor (var i=1; i<=obj.$level; i++){\r\n\t\t\tif (i==obj.$level && obj.$count){\r\n\t\t\t\tvar dir = obj.open?\"down\":\"right\";\r\n\t\t\t\thtml+=\"\";\r\n\t\t\t}\r\n\t\t}*/\r\n\t\treturn html;\r\n\t},\r\n\tfolder:function(obj, common){\r\n\t\tif(obj.icon)\r\n\t\t\treturn \"\";\r\n\t\treturn \"\";\r\n\t}\r\n});\r\nwebix.type(webix.ui.tree, {\r\n\tname:\"menuTree2\",\r\n\theight: 40,\r\n\r\n\ticon:function(obj, common){\r\n\t\tvar html = \"\";\r\n\t\tvar open = \"\";\r\n\t\tfor (var i=1; i<=obj.$level; i++){\r\n\t\t\tif (i==obj.$level && obj.$count){\r\n\t\t\t\tvar dir = obj.open?\"down\":\"right\";\r\n\t\t\t\thtml+=\"\";\r\n\t\t }\r\n\t\t}\r\n\t\treturn html;\r\n\t},\r\n\tfolder:function(obj, common){\r\n\t\tif(obj.icon)\r\n\t\t\treturn \"\";\r\n\t\treturn \"\";\r\n\t}\r\n});\ndefine(\"views/webix/menutree\", function(){});\n\ndefine('views/app',[\r\n \"views/modules/minvoiceplugin\",\r\n \"views/menus/search\",\r\n \"views/menus/profile\",\r\n \"views/menus/notify\",\r\n //\"views/menus/sidebar\",\r\n \"views/menus/menubar\",\r\n \"models/user\",\r\n \"views/menus/version\",\r\n // \"views/menus/notification\",\r\n \"views/webix/icon\",\r\n \"views/webix/menutree\",\r\n], function (plugin, search, profile, notify, menuBar, user, version) {\r\n var apiHost = menuBar.getApiHost();\r\n\r\n webix.attachEvent(\"onBeforeAjax\", function (mode, url, data, request, headers, files, promise) {\r\n var token = user.getAccessToken();\r\n\r\n if (token == null) {\r\n webix.message(\"Authorization has been denied for this request.\", \"error\");\r\n user.logout();\r\n document.location.reload();\r\n }\r\n\r\n var dvcs = user.getDvcsID();\r\n\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n\r\n headers[\"Authorization\"] = \"Bear \" + bear;\r\n });\r\n\r\n webix.attachEvent(\"onLoadError\", function (text, xml, ajax, owner) {\r\n console.log(text);\r\n console.log(xml);\r\n console.log(ajax);\r\n console.log(owner);\r\n\r\n if (text != undefined) {\r\n //console.log(text);\r\n var json = JSON.parse(text);\r\n\r\n if (json.Message == \"Authorization has been denied for this request.\") {\r\n webix.message(json.Message, \"Hết hạn phiên đăng nhập!\");\r\n user.logout();\r\n var baseUrl = document.location.href;\r\n if (baseUrl.startsWith(\"file\")) {\r\n webix.storage.local.remove(\"appCookie\");\r\n } else {\r\n Cookies.remove(\"appCookie\");\r\n }\r\n document.location.reload();\r\n }\r\n }\r\n });\r\n\r\n //Top toolbar\r\n var mainToolbar = {\r\n css: { \"background-color\": \"#005EB2 !important\" },\r\n view: \"toolbar\",\r\n elements: [\r\n {\r\n height: 40,\r\n id: \"person_template\",\r\n css: \"header_person\",\r\n view: \"template\",\r\n borderless: true,\r\n width: 250,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = apiHost + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {};\r\n\r\n parameters.command = \"CM00010\";\r\n parameters.parameter = {\r\n code: user.getDvcsID(),\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n\r\n template: function (obj) {\r\n var html = \"
\";\r\n html += \"
\";\r\n html += \"\";\r\n html += \"
\";\r\n html += \"
\" + obj.name + \"
MST: \" + obj.tax_code + \"
\";\r\n return html;\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var body = {\r\n rows: [\r\n { height: 2 },\r\n {\r\n id: \"head-title\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n hidden: true,\r\n cols: [\r\n {\r\n height: 30,\r\n id: \"title\",\r\n css: \"title\",\r\n width: 360,\r\n view: \"template\",\r\n template: \"
#title#
\",\r\n data: { text: \"\", title: \"Trang chủ\", details: \"Phân tích và thống kê\" },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"scrollview\",\r\n css: \"bodycolor\",\r\n body: {\r\n cols: [{ $subview: true }],\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n css: { background: \"#005EB2\" },\r\n label: \"\",\r\n width: 150,\r\n },\r\n {\r\n css: { background: \"#005EB2\" },\r\n view: \"scrollview\",\r\n scroll: \"x\",\r\n body: menuBar,\r\n },\r\n mainToolbar,\r\n ],\r\n },\r\n body,\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $menu: \"app:menu\",\r\n $oninit: function (view, scope) {\r\n scope.ui(search.$ui);\r\n scope.ui(profile.$ui);\r\n scope.ui(notify.$ui);\r\n // scope.ui(notification.$ui);\r\n\r\n var js = version.getInfocompany();\r\n document.title = js.tax_code + \" - \" + js.name;\r\n\r\n if(webix.$$(\"notifyPopup\")) {\r\n var popup = webix.$$(\"notifyPopup\");\r\n popup._originalShow = popup.show;\r\n\r\n // Ghi đè hàm show\r\n popup.show = function() {\r\n this._originalShow.apply(this, arguments);\r\n notify.showNotify();\r\n };\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/bangkebanra',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\"\r\n], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n var date = new Date();\r\n var _month = date.getMonth() + 1;\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n function subviewT() {\r\n $$('cbQuy').define('label', \"Tháng\");\r\n $$('cbQuy').refresh();\r\n $$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n //webix.extend(config, $$('cbQuy').config);\r\n //webix.ui(config, $$('cbThang'));\r\n //$$('cbThang').destructor();\r\n }\r\n\r\n function subviewQ() {\r\n\r\n $$('cbQuy').define('label', \"Quý\");\r\n $$('cbQuy').refresh();\r\n $$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n // webix.extend($$('cbQuy').config, config, true);\r\n //webix.ui(config, $$('cbQuy'));\r\n //$$('cbQuy').destructor();\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Bảng kê bán ra\",\r\n width: 550,\r\n resize: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n view: \"form\",\r\n id: \"bangkebr\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n\t\t\t\t\t{\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n labelWidth: 80,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\" \r\n }\r\n } \r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"radio\",\r\n id: \"head_extension\",\r\n value: 1,\r\n options: [\r\n { \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n { \"id\": 2, \"value\": \"Quý\" }\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n if (newv == 2) {\r\n subviewQ();\r\n $$(\"cbQuy\").setValue(quarter1);\r\n }\r\n if (newv == 1) {\r\n subviewT();\r\n $$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: _month,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n on: {\r\n onChange: function () {\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n\r\n var option = $$('head_extension').getValue();\r\n if (option == 2) {\r\n var nam = d.getFullYear();\r\n var thang;\r\n var quy = $$(\"cbQuy\").getValue();\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"tu_ngay\").setValue(firstDate);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDate);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n if (option == 1) {\r\n var year = d.getFullYear();\r\n var month = $$(\"cbQuy\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"tu_ngay\").setValue(firstDay1);\r\n $$(\"tu_ngay\").refresh();\r\n $$(\"den_ngay\").setValue(lastDay1);\r\n $$(\"den_ngay\").refresh();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n view: \"datepicker\", label: _(\"TU_NGAY\"), name: \"tu_ngay\", id: \"tu_ngay\", value: firstDay, labelWidth: 80\r\n },\r\n {\r\n view: \"datepicker\", label: _(\"DEN_NGAY\"), name: \"den_ngay\", id: \"den_ngay\", value: lastDay, labelWidth: 80\r\n },\r\n {\r\n view: \"multicombo\",\r\n label: _(\"KY_HIEU\"),\r\n name: \"ky_hieu\",\r\n labelWidth: 80,\r\n // required: true,\r\n // invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n // validate: webix.rules.isNotEmpty,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n }\r\n }\r\n //value: \"2\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", width: 100, type: \"form\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = this.getParentView().getParentView();\r\n var win = this.getTopParentView();\r\n\r\n var item = form.getValues();\r\n var load_event = \"loadBangkebanra\";\r\n\r\n app.callEvent(load_event, [item]);\r\n\r\n win.close();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", width: 100, align: \"center\", type: \"danger\",\r\n click: function () {\r\n this.getTopParentView().close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n },\r\n\r\n setValues: function (item) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n\r\n form.setValues(item);\r\n }\r\n };\r\n\r\n});\r\n\ndefine('views/bangkebanra',[\"app\", \"locale\", \"models/user\", \"views/forms/bangkebanra\"], function (app, _, user, bangkebanra) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Bảng kê bán ra\", details: \"Báo cáo bảng kê bán ra hóa đơn\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnReload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n css: \"webix_secondary\",\r\n label: _(\"REFRESH\"),\r\n width: 95,\r\n on: {\r\n onClick: function () {\r\n var wininfoparam = this.$scope.ui(bangkebanra.$ui);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n css: \"webix_secondary\",\r\n label: _(\"PRINT\") + \" PDF\",\r\n width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"PDF\";\r\n //console.log(rpParameter);\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExport\",\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-file\",\r\n label: _(\"EXPORT_EXCEL\"),\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"bangkebanra\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n //window.location.href = fileURL;\r\n webix.html.download(file, \"BangKeBanRa.xlsx\");\r\n },\r\n }\r\n // function (text, data) {\r\n\r\n // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // window.location.href = fileURL;\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"bangkebanra\",\r\n select: true,\r\n resizeColumn: true,\r\n fullScreen: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n // on: {\r\n // onResize: function () {\r\n // this.adjustRowHeight(\"ghi_chu\", true);\r\n // this.render();\r\n // }\r\n // },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"so_hd\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 500,\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.so_hd;\r\n },\r\n },\r\n {\r\n id: \"ngay_hd\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"inv_buyerlegalname\", header: \"
Tên người mua
\", width: 300 },\r\n // {\r\n // header: \"
Trạng thái
\", width: 150, template: function (obj) {\r\n // if (obj.$group == true) return \"\";\r\n // return \"\" + obj.trang_thai + \"\"\r\n // }\r\n // },\r\n { id: \"ms_thue\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"tien_tt0\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n {\r\n id: \"tien\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 150 },\r\n // {\r\n // id: \"nhom\", header: \"Nhóm\", width: 500\r\n // }\r\n // {\r\n // id: \"ngay_thuchien\", header: \"Ngày thực hiện\", width: 150, format: function (text) {\r\n // var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n // text = removeTimeZoneT(text);\r\n // return format(text);\r\n // }\r\n // }\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"nhom\",\r\n //,css:{ \"text-align\": \"right\" }\r\n // map:{\r\n // \tnguoi_lien_he:[\"nguoi_lien_he\", \"count\"]\r\n // }\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n this.adjustRowHeight(\"ghi_chu\", true);\r\n this.refresh();\r\n },\r\n //url: app.config.host + \"/System/ExecuteQuery?sql=\" + sql\r\n //autoheight: true,\r\n //autowidth:true,\r\n //data: big_film_set\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"loadBangkebanra\", function (item) {\r\n var table = $$(\"bangkebanra\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n table.config.rpParameter = item;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Bcthsd/bangkebanra\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(json);\r\n $$(\"bangkebanra\").clearAll();\r\n $$(\"bangkebanra\").parse(json);\r\n $$(\"bangkebanra\").refresh();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/infowindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n], function (app, _, user) {\r\n\tvar editmode = 0;\r\n\r\n\tvar _date = new Date();\r\n\tvar _month = _date.getMonth() + 1;\r\n\tfunction subviewT() {\r\n\t\t$$('cbQuy').define('label', \"Tháng\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n\t\t//webix.extend(config, $$('cbQuy').config);\r\n\t\t//webix.ui(config, $$('cbThang'));\r\n\t\t//$$('cbThang').destructor();\r\n\t}\r\n\r\n\tfunction subviewQ() {\r\n\r\n\t\t$$('cbQuy').define('label', \"Quý\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n\t\t// webix.extend($$('cbQuy').config, config, true);\r\n\t\t//webix.ui(config, $$('cbQuy'));\r\n\t\t//$$('cbQuy').destructor();\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\",\r\n\t\t\tmodal: true,\r\n\t\t\tposition: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tresize: true,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: []\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tinitUI: function (infoWindowId) {\r\n\r\n\t\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\t\tvar parameters = {\r\n\t\t\t\tcommand: \"CM00013\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_infowindow_id: infoWindowId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\twebix.ajax().headers({ \"Content-Type\": \"application/json\" })\r\n\t\t\t\t.post(url, parameters, function (response) {\r\n\t\t\t\t\tvar result = JSON.parse(response);\r\n\r\n\t\t\t\t\tvar win = webix.$$(infoWindowId);\r\n\r\n\t\t\t\t\twin.define(\"width\", result[0].window_width);\r\n\t\t\t\t\twin.define(\"height\", result[0].window_height);\r\n\r\n\t\t\t\t\tvar form = win.getChildViews()[1];\r\n\t\t\t\t\tform.clear();\r\n\r\n\t\t\t\t\tvar view_extension = {\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"radio\",\r\n\t\t\t\t\t\t\t\tid: \"head_extension\",\r\n\t\t\t\t\t\t\t\tvalue: 1,\r\n\t\t\t\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 2, \"value\": \"Quý\" }\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewQ();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(quarter1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewT();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tid: \"cbQuy\",\r\n\t\t\t\t\t\t\t\tname: \"quy\",\r\n\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\tlabel: \"Tháng\",\r\n\t\t\t\t\t\t\t\t//height: 30,\r\n\t\t\t\t\t\t\t\tvalue: _month,\r\n\t\t\t\t\t\t\t\toptions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar option = $$('head_extension').getValue();\r\n\t\t\t\t\t\t\t\t\t\tif (option == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar nam = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar thang;\r\n\t\t\t\t\t\t\t\t\t\t\tvar quy = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 3;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 3) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 6\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 4) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 9\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDate = new Date(nam, thang, 1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDate = new Date(nam, thang + 3, 0);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (option == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar year = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar month = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tvar date1 = month + \"/01\" + \"/\" + year;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar date = new Date(date1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar formValues = {};\r\n\r\n\t\t\t\t\tvar rows_max = result[0].rows_max;\r\n\r\n\t\t\t\t\tvar el = [];\r\n\r\n\t\t\t\t\tfor (var i = 1; i <= rows_max; i++) {\r\n\t\t\t\t\t\tel.push({ cols: [] });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var i = 0; i < result.length; i++) {\r\n\r\n\t\t\t\t\t\tvar field = result[i];\r\n\r\n\t\t\t\t\t\tvar row = field.row;\r\n\r\n\t\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\t\tview: field.type_editor,\r\n\t\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\t\tlabel: _(field.caption),\r\n\t\t\t\t\t\t\twidth: field.width,\r\n\t\t\t\t\t\t\tlabelPosition: field.label_position,\r\n\t\t\t\t\t\t\tlabelWidth: field.label_width,\r\n\t\t\t\t\t\t\tformat: field.format,\r\n\t\t\t\t\t\t\thidden: field.hidden == \"C\" ? true : false,\r\n\t\t\t\t\t\t\tid: win.config.id + \"_\" + field.name\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (field.default_value != null) {\r\n\t\t\t\t\t\t\tvar defaultValue = field.default_value;\r\n\r\n\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\tvar firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\t\t\t\t\t\t\tvar lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n\t\t\t\t\t\t\tif (defaultValue.startsWith(\"@Default=\")) {\r\n\t\t\t\t\t\t\t\tdefaultValue = defaultValue.replace(\"@Default=\", \"\");\r\n\t\t\t\t\t\t\t\tif (defaultValue == \"MA_DVCS\" || defaultValue == \"BRANCH_CODE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getDvcsID();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"USER\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getCurrentUser();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"MA_CT\") {\r\n\t\t\t\t\t\t\t\t\titem.value = \"MA_CT\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"FIRST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"LAST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\titem.value = defaultValue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.hidden == true) {\r\n\t\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"combo\" || item.view == \"multiselect\") {\r\n\t\t\t\t\t\t\titem.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"multicombo\"){\r\n\t\t\t\t\t\t\titem.suggest= {\r\n\t\t\t\t\t\t\t\tselectAll: true,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id \r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"radio\") {\r\n\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\tradio_id: item.id,\r\n\t\t\t\t\t\t\t\twin_id: win.config.id\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tajax.get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id, function (text) {\r\n\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\tvar radio = $$(this.radio_id);\r\n\t\t\t\t\t\t\t\tradio.define(\"options\", json);\r\n\t\t\t\t\t\t\t\tradio.refresh();\r\n\r\n\t\t\t\t\t\t\t\t$$(this.win_id).resize();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"treesuggest\") {\r\n\r\n\t\t\t\t\t\t\t//item.REF_ID = field.REF_ID.toString();\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridcombo\") {\r\n\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/api/System/GetDataByReferencesId?id=\" + field.wb_references_id,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridsuggest\") {\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"text\";\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\tvalue_suggest: field.value_suggest,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tdatatype: \"json\",\r\n\t\t\t\t\t\t\t\t\tdataFeed: function (filtervalue, filter) {\r\n\t\t\t\t\t\t\t\t\t\tif (filtervalue.length < 3) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar refid = this.config.refid;\r\n\t\t\t\t\t\t\t\t\t\tvar pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n\t\t\t\t\t\t\t\t\t\tvar urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n\t\t\t\t\t\t\t\t\t\tthis.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonValueSuggest: function (obj) {\r\n\t\t\t\t\t\t\t\t\t\tif (this.config.value_suggest != null) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n\t\t\t\t\t\t\t\t\t\t\tfn(obj, this.config.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"tu_ngay\") {\r\n\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"den_ngay\") {\r\n\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\tel[row - 1].cols.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tform.setValues(formValues);\r\n\r\n\t\t\t\t\tvar buttons = {\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\ttype: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = this.getParentView().getParentView();\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t// xóa header ngày tháng trong sproc ko cần\r\n\t\t\t\t\t\t\t\t\t\tdelete item.quy;\r\n\t\t\t\t\t\t\t\t\t\tvar load_event = win.config.load_event == null ? \"loadReport\" : win.config.load_event;\r\n\r\n\t\t\t\t\t\t\t\t\t\tapp.callEvent(load_event, [win.config.report_id, win.config.id, item, win.config.menuitem]);\r\n\r\n\t\t\t\t\t\t\t\t\t\twin.close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\talign: \"center\", type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tel.push(buttons);\r\n\r\n\t\t\t\t\twebix.ui(el, form);\r\n\t\t\t\t\tif ($$(win.config.id + \"_tu_ngay\") != undefined && $$(win.config.id + \"_den_ngay\") != undefined) {\r\n\t\t\t\t\t\tform.addView(view_extension, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twin.getHead().setHTML(result[0][\"window_name\"]);\r\n\r\n\t\t\t\t\t//win.config.height= result[0][\"WINDOW_HEIGHT\"];\r\n\t\t\t\t\t//win.config.width= result[0][\"WINDOW_WIDTH\"];\r\n\r\n\t\t\t\t\tif (win.config.editmode != null) {\r\n\t\t\t\t\t\tif (win.config.editmode == 1) {\r\n\t\t\t\t\t\t\tform.setValues(win.config.formvalues);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//win.resize();\r\n\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t},\r\n\t\tsetValues: function (item) {\r\n\t\t\tvar win = $$(this.$ui.id);\r\n\t\t\tvar form = win.getChildViews()[1];\r\n\r\n\t\t\tform.setValues(item);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/forms/editwindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n],function(app,_,user){\r\n\tvar editmode = 0;\t\r\n var tables = [];\r\n\r\n\tvar windowno = app.path[1].params[0];\r\n var col=[];\r\n\tvar rw =[];\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n\tvar url = app.config.host + \"/System/GetAllByWindowNo?window_id=\" + windowno;\r\n\r\n\tfunction setParentValue(windowId){\r\n\r\n\t\tvar win = $$(windowId);\r\n\t\tvar form = win.getChildViews()[1];\t\t\t\t\t\t\t\r\n\t\tvar item = form.getValues();\r\n\t\tvar valueField = win.config.valueField;\r\n\r\n\t\tif (win.config.editorId == null){\r\n\t\t\tvar table = $$(win.config.tableId);\r\n\t\t\tvar selectedItem = table.getSelectedItem();\r\n\r\n\t\t\tselectedItem[win.config.columnName] = item[valueField];\t\t\t\r\n\r\n\t\t\tif (win.config.fieldExpression!=null){\r\n\t\t\t\tvar fields = win.config.fieldExpression.split(';');\r\n\r\n\t\t\t\tfor(var i=0;i 0) {\r\n json[0].editorId = this.editorId;\r\n json[0].formId = this.formId;\r\n json[0].fieldExpression = this.fieldExpression;\r\n json[0].editmode = this.editmode;\r\n json[0].editorvalue = this.editorvalue;\r\n json[0].suggest = this.suggest;\r\n\r\n var windowno = json[0].windowno;\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n var a = webix.ajax(url);\r\n url = app.config.host + \"/System/GetRecordByReferencesId?id=\" + json[0].wb_references_id + \"&value=\" + this.editorvalue;\r\n var b = webix.ajax(url);\r\n var c = this.editmode;\r\n var d = json[0];\r\n\r\n webix.promise.all([a, b, c, d]).then(function (results) {\r\n var windowconfig = results[0].json();\r\n var res_b = results[1].json();\r\n var mode = results[2];\r\n var master = results[3];\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n if (mode == 1) {\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setEditMode(mode);\r\n editwindow.setValues(null, windowconfig);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n } else {\r\n if (res_b.length == 0) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n text: \"Không tìm thấy dữ liệu\",\r\n });\r\n\r\n return;\r\n }\r\n\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n master: master,\r\n vc_window: vc_window,\r\n };\r\n\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + vc_window.code + \"&id=\" + res_b[0].doc_id;\r\n\r\n ajax.get(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json;\r\n\r\n var vc_window = this.vc_window;\r\n var master = this.master;\r\n\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setEditMode(2);\r\n editwindow.setValues(data, windowconfig);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function tableShowEditWindow(table, editmode) {\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n var suggest = $$(editor.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n var sql = {\r\n command: \"SYS003\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.code as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n // var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n //var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n var model = sql;\r\n var tableId = table.config.id;\r\n //console.log(tableId);\r\n var columnName = editor.config.id;\r\n\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n editorId: null,\r\n tableId: tableId,\r\n fieldExpression: suggest.config.fieldExpression,\r\n columnName: columnName,\r\n editmode: editmode,\r\n editorvalue: editor.getValue(),\r\n suggest: editor.config.suggest,\r\n };\r\n\r\n ajax.post(url, model, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n json[0].editorId = this.editorId;\r\n json[0].tableId = this.tableId;\r\n json[0].fieldExpression = this.fieldExpression;\r\n json[0].columnName = this.columnName;\r\n json[0].editmode = this.editmode;\r\n json[0].editorvalue = this.editorvalue;\r\n json[0].suggest = this.suggest;\r\n\r\n var windowno = json[0].windowno;\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n var a = webix.ajax(url);\r\n url = app.config.host + \"/System/GetRecordByReferencesId?id=\" + json[0].wb_references_id + \"&value=\" + this.editorvalue;\r\n var b = webix.ajax(url);\r\n var c = this.editmode;\r\n var d = json[0];\r\n\r\n webix.promise.all([a, b, c, d]).then(function (results) {\r\n var windowconfig = results[0].json();\r\n var res_b = results[1].json();\r\n var mode = results[2];\r\n var master = results[3];\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n if (mode == 1) {\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n editwindow.$ui.tableId = master.tableId;\r\n editwindow.$ui.columnName = master.columnName;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setValues(null, windowconfig);\r\n editwindow.setEditMode(mode);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n } else {\r\n if (res_b.length == 0) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n text: \"Không tìm thấy dữ liệu\",\r\n });\r\n\r\n return;\r\n }\r\n var ajax = webix.ajax();\r\n\r\n ajax.master = {\r\n master: master,\r\n vc_window: vc_window,\r\n };\r\n\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + vc_window.code + \"&id=\" + res_b[0].doc_id;\r\n\r\n ajax.get(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json;\r\n\r\n var vc_window = this.vc_window;\r\n var master = this.master;\r\n\r\n editwindow.$ui.id = vc_window.code;\r\n editwindow.$ui.editorId = master.editorId;\r\n editwindow.$ui.valueField = master.value_field;\r\n editwindow.$ui.fieldExpression = master.fieldExpression;\r\n editwindow.$ui.formId = master.formId;\r\n editwindow.$ui.tableId = master.tableId;\r\n editwindow.$ui.columnName = master.columnName;\r\n\r\n var win = webix.ui(editwindow.$ui);\r\n\r\n editwindow.initUI(windowconfig);\r\n editwindow.setValues(data, windowconfig);\r\n editwindow.setEditMode(2);\r\n\r\n $$(master.suggest).hide();\r\n win.show();\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"window-win\",\r\n position: \"center\",\r\n //width:800,\r\n head: \"Thông tin khách hàng\",\r\n //fullscreen:true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"window-form\",\r\n complexData: true,\r\n keepViews: true,\r\n multiview: { keepViews: true },\r\n margin: 0,\r\n elements: el,\r\n },\r\n },\r\n initUI: function (windowconfig) {\r\n \r\n var rp = windowconfig;\r\n var max_row = rp[\"data\"][0][\"max_row\"];\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n\r\n var win = $$(vc_window.code);\r\n\r\n if (typeof win.showProgress === \"undefined\") webix.extend(win, webix.ProgressBar);\r\n\r\n el = [];\r\n col = [];\r\n\r\n if (vc_window.width == null && vc_window.height == null) {\r\n win.config.fullscreen = true;\r\n }\r\n\r\n if (vc_window.after_save != null) {\r\n win.config.after_save = vc_window.after_save;\r\n }\r\n // nếu có layout_detail thì bindding layout vào el\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n // if (field.hidden == true) {\r\n // continue;\r\n // }\r\n\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n //keepViews: true,\r\n multiview: { keepViews: true },\r\n name: field.column_name,\r\n label: _(field.column_name),\r\n id: field.column_name + \"_\" + rp[\"data\"][0][\"Tabs\"][0][\"table_name\"],\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n hidden: field.hidden,\r\n };\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n item.inputAlign = \"left\";\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n }\r\n\r\n if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n }\r\n\r\n if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n }\r\n\r\n if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n }\r\n\r\n if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n // if (item.view == \"search\") {\r\n // \tvar express = item.fieldExpression;\r\n\r\n // \titem.on.onSearchIconClick = function (e) {\r\n // \t\tvar form = $$(this.getFormView());\r\n\r\n // \t\t//get value của form hiện tại để đổi giá trị\r\n // \t\tvar parentItem = form.getValues();\r\n\r\n // \t\tvar field_express = this.config.fieldExpression;\r\n // \t\tvar text = this.getValue();\r\n // \t\tvar datapost = { \"masothue\": text };\r\n // \t\tvar form = $$(\"window-form\");\r\n // \t\twebix.extend(form, webix.ProgressBar);\r\n // \t\tform.disable();\r\n // \t\tform.showProgress();\r\n // \t\twebix.ajax()\r\n // \t\t\t.headers({ 'Content-type': 'application/json' })\r\n // \t\t\t.post(app.config.host + \"/System/GetInfoMST\", datapost, function (text) {\r\n\r\n // \t\t\t\tvar json = JSON.parse(text);\r\n\r\n // \t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n // \t\t\t\t\tif (field_express != null) {\r\n\r\n // \t\t\t\t\t\tvar fields = field_express.split(';');\r\n // \t\t\t\t\t\t// tách json thành array\r\n // \t\t\t\t\t\tfor (var i = 0; i < fields.length; i++) {\r\n // \t\t\t\t\t\t\tvar field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n // \t\t\t\t\t\t\tvar array = field.split(\":\");\r\n\r\n // \t\t\t\t\t\t\tparentItem[array[1]] = json[array[0]];\r\n\r\n // \t\t\t\t\t\t}\r\n // \t\t\t\t\t\tform.setValues(parentItem);\r\n // \t\t\t\t\t}\r\n // \t\t\t\t\telse {\r\n // \t\t\t\t\t\twebix.message(\"FIELD_EXPRESSION IS NULL IN FIELD !\", \"error\", 2000);\r\n // \t\t\t\t\t}\r\n // \t\t\t\t}\r\n // \t\t\t\telse {\r\n // \t\t\t\t\t// nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n // \t\t\t\t\twebix.message(json.error, \"error\", 2000);\r\n // \t\t\t\t}\r\n // \t\t\t\tform.enable();\r\n // \t\t\t\tform.hideProgress();\r\n // \t\t\t});\r\n\r\n // \t}\r\n // }\r\n\r\n if (item.view == \"search\") {\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var mst = this.getValue();\r\n // window.location.href = \"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst;\r\n window.open(\"http://tracuunnt.gdt.gov.vn/tcnnt/mstdn.jsp?mst=\" + mst);\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.code == \"F4\" || e.code == \"F3\") {\r\n var editmode = e.code == \"F3\" ? 2 : 1;\r\n showEditWindow(this, editmode);\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n if (this.config.validate != null && editmode != 0) {\r\n this.validate();\r\n }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n\r\n if (this.config.value_change != null) {\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.editmode == 0) return;\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", this.config.value_change);\r\n fn(newv, oldv, this.config.id);\r\n }\r\n };\r\n }\r\n\r\n jsonElement[i] = item;\r\n var finish_replace = findJson.findAndReplace(el, jsonElement[i].name, item);\r\n // console.log(finish_replace);\r\n //webix.extend(el,jsonElement[i], true);\r\n }\r\n }\r\n }\r\n //console.log(jsonElement);\r\n } // nếu không có thì push vào el theo field\r\n else {\r\n // insert số dòng max của form\r\n \r\n if (vc_window.code == \"WIN00107\") {\r\n el.push({\r\n view: \"label\",\r\n height: 80,\r\n template: \"
Chú ý: Khi thêm cấu hình, toàn bộ hóa đơn đã ký sẽ tự động gửi trực tiếp tới Cơ quan thuế, không gửi Bảng tổng hợp dữ liệu
\"\r\n });\r\n }\r\n for (var i = 1; i <= max_row; i++) {\r\n el.push({ cols: [] });\r\n }\r\n\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n // field của tab master (đầu phiếu )\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i];\r\n\r\n if (field.hidden == true) {\r\n continue;\r\n }\r\n\r\n var row = field.row;\r\n\r\n var item = {\r\n view: field.type_editor,\r\n resizeColumn: true,\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n name: field.column_name,\r\n label: _(field.column_name),\r\n id: field.column_name + \"_\" + rp[\"data\"][0][\"Tabs\"][0][\"table_name\"],\r\n width: field.width,\r\n labelPosition: field.label_position,\r\n labelWidth: field.label_width,\r\n format: field.format,\r\n value_change: field.value_change,\r\n fieldExpression: field.field_expression,\r\n data_width: field.data_width,\r\n column_type: field.column_type,\r\n css: field.css,\r\n attributes: {},\r\n on: {},\r\n };\r\n\r\n if (field.type_editor == \"password\") {\r\n item.view = \"text\";\r\n item.type = \"password\";\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n\r\n if (field.type_editor == \"datepicker\" && field.column_type != \"time\") {\r\n item.editor = \"date\";\r\n item.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n item.timepicker = true;\r\n }\r\n\r\n if (field.type_editor == \"datepicker\" && field.column_type == \"time\") {\r\n item.editor = \"date\";\r\n item.type = \"time\";\r\n item.format = \"%H:%i\";\r\n item.timepicker = true;\r\n }\r\n\r\n if (item.data_width != null) {\r\n if (item.data_width != 0) {\r\n item.attributes.maxlength = item.data_width;\r\n //style: \"text-transform: uppercase;\"\r\n }\r\n }\r\n\r\n if (field.styleinput != null && field.styleinput != \"\") {\r\n item.attributes.style = field.styleinput;\r\n }\r\n\r\n if (field.height != null) {\r\n if (field.height != 0) {\r\n item.height = field.height;\r\n }\r\n }\r\n\r\n if (field.caption != null) {\r\n item.label = _(field.caption);\r\n }\r\n\r\n if (field.read_only == \"C\") {\r\n item.readonly = true;\r\n }\r\n\r\n if (item.view == \"combo\") {\r\n item.suggest = {\r\n body: {\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n };\r\n //item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"select\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n if (item.view == \"checkbox\") {\r\n if (field.label_position == \"right\") {\r\n item.labelRight = _(field.column_name);\r\n item.label = \"\";\r\n }\r\n\r\n if (field.column_type == \"char\") {\r\n item.checkValue = \"C\";\r\n item.uncheckValue = \"K\";\r\n }\r\n\r\n if (field.column_type == \"tinyint\") {\r\n item.checkValue = \"1\";\r\n item.uncheckValue = \"0\";\r\n }\r\n\r\n if (field.column_type == \"bit\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n }\r\n\r\n if (item.view == \"autonumeric\" || field.column_type == \"numeric\") {\r\n item.inputAlign = \"left\";\r\n item.decimalPlaces = field.data_decimal;\r\n }\r\n\r\n if (field.valid_rule != null) {\r\n var rule = field.valid_rule;\r\n\r\n if (rule == \"isNotEmpty\") {\r\n item.required = true;\r\n item.invalidMessage = item.label + \" không được bỏ trống\";\r\n item.validate = webix.rules.isNotEmpty;\r\n }\r\n\r\n if (rule == \"isSpecialCharacter\") {\r\n item.required = true;\r\n item.invalidMessage = \"Không bỏ trống hoặc ký tự không hợp lệ (a-z,A-Z,0-9)\";\r\n item.validate = webix.rules.isSpecialCharacter;\r\n }\r\n\r\n if (rule == \"isEmail\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isEmail;\r\n }\r\n\r\n if (rule == \"isTaxCode\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isTaxCode;\r\n }\r\n\r\n if (rule == \"isPositiveNumbers\") {\r\n item.invalidMessage = item.label + \" không hợp lệ\";\r\n item.validate = webix.rules.isPositiveNumbers;\r\n }\r\n }\r\n\r\n if (item.view == \"treesuggest\") {\r\n //item.REF_ID = field.REF_ID.toString();\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"treesuggest\",\r\n textValue: field.display_field,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n\r\n if (item.view == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"combo\";\r\n item.options = {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n body: {\r\n columns: listColumns,\r\n refid: field.REF_ID,\r\n textValue: field.display_field,\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F4\") {\r\n alert(\"Moi\");\r\n }\r\n };\r\n }\r\n if (item.view == \"search\") {\r\n var express = item.fieldExpression;\r\n\r\n item.on.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n //get value của form hiện tại để đổi giá trị\r\n var parentItem = form.getValues();\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n if (field_express != null) {\r\n var fields = field_express.split(\";\");\r\n // tách json thành array\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n parentItem[array[1]] = json[array[0]];\r\n }\r\n form.setValues(parentItem);\r\n } else {\r\n webix.message(\"FIELD_EXPRESSION IS NULL IN FIELD !\", \"error\", 2000);\r\n }\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n\r\n if (item.view == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n item.view = \"search\";\r\n item.icon = \"mdi mdi-plus\";\r\n item.on.onSearchIconClick = function (e) {\r\n showEditWindow(this, 1);\r\n };\r\n item.suggest = {\r\n view: \"gridsuggest\",\r\n autoheight: false,\r\n value_suggest: field.value_suggest,\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n textValue: field.display_field,\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n //console.log(obj);\r\n var master = $$(this.config.master);\r\n if (master.config.fieldExpression != null) {\r\n var win = master.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n //console.log(form);\r\n var parentItem = form.getValues();\r\n //console.log(parentItem);\r\n var fields = master.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n //console.log(array);\r\n parentItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n form.setValues(parentItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n\r\n item.on.onKeyPress = function (code, e) {\r\n if (e.code == \"F2\") {\r\n var suggest = $$(this.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n\r\n suggest.hide();\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //var sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n //var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var win = this.getTopParentView();\r\n var form = win.getChildViews()[1];\r\n\r\n var editorId = this.config.id;\r\n var formId = form.config.id;\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = this.config.suggest;\r\n var c = this.config.id;\r\n var d = this.config.fieldExpression;\r\n var e = editorId;\r\n var f = formId;\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n searchId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n formId: f,\r\n editorId: e,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var txtSearch = $$(this.searchId);\r\n\r\n var win = txtSearch.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.formId = this.formId;\r\n win.config.editorId = this.editorId;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.code == \"F4\" || e.code == \"F3\") {\r\n var editmode = e.code == \"F3\" ? 2 : 1;\r\n showEditWindow(this, editmode);\r\n }\r\n };\r\n }\r\n\r\n if (item.value_change != null || item.css != null || item.validate != null) {\r\n item.on.onChange = function (newv, oldv) {\r\n if (this.config.validate != null && editmode != 0) {\r\n this.validate();\r\n }\r\n\r\n if (this.config.css != null) {\r\n if (this.config.css == \"mcls_uppercase\" && newv !== undefined && oldv !== undefined) {\r\n if (newv.toUpperCase() != oldv.toUpperCase()) {\r\n webix.$$(this.config.id).setValue(newv.toUpperCase());\r\n }\r\n }\r\n }\r\n\r\n if (this.config.value_change != null) {\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.editmode == 0) return;\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", this.config.value_change);\r\n fn(newv, oldv, this.config.id);\r\n }\r\n };\r\n }\r\n\r\n el[row - 1].cols.push(item);\r\n //console.log(el);\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var cells = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption != null ? _(field.caption) : _(field.column_name),\r\n editor: field.type_editor,\r\n hidden: field.hidden,\r\n value_change: field.value_change,\r\n };\r\n\r\n if (field.read_only == \"C\" || field.type_editor == \"checkbox\") {\r\n delete subCol.editor;\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n subCol.template = \"{common.checkbox()}\";\r\n subCol.checkValue = true;\r\n subCol.uncheckValue = false;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n if (field.column_type == \"autonumeric\") {\r\n subCol.css = { \"text-align\": \"left\" };\r\n }\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n if (field.type_editor == \"combo\" || field.type_editor == \"multiselect\") {\r\n subCol.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n subCol.optionslist = true;\r\n }\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n if (field.type_editor == \"datepicker\") {\r\n subCol.editor = \"date\";\r\n subCol.format = function (text) {\r\n if (text != null && text != undefined) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n };\r\n }\r\n\r\n if (field.type_editor == \"treesuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"treesuggest\",\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n var popup = webix.ui({\r\n view: \"gridsuggest\",\r\n textValue: field.display_field,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n textValue: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id,\r\n },\r\n });\r\n\r\n subCol.popup = popup;\r\n subCol.editor = \"combo\";\r\n }\r\n if (field.type_editor == \"search\") {\r\n subCol.onSearchIconClick = function (e) {\r\n var form = $$(this.getFormView());\r\n\r\n var field_express = this.config.fieldExpression;\r\n var text = this.getValue();\r\n var datapost = { masothue: text };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n //console.log(JSON.stringify(json));\r\n form.setValues(json);\r\n } else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n };\r\n }\r\n if (field.type_editor == \"gridsuggest\") {\r\n var listColumns = JSON.parse(field.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id.toUpperCase());\r\n }\r\n\r\n subCol.editor = \"textsearch\";\r\n subCol.tableId = \"edit_\" + tab.table_name;\r\n subCol.onIconButtonClick = function (e) {\r\n var tableId = this.getAttribute(\"tableId\");\r\n var table = $$(tableId);\r\n tableShowEditWindow(table, 1);\r\n };\r\n\r\n subCol.suggest = {\r\n view: \"gridsuggest\",\r\n value_suggest: field.value_suggest,\r\n fieldExpression: field.field_expression,\r\n displayField: field.display_field,\r\n tableId: \"edit_\" + tab.table_name,\r\n columnName: field.column_name,\r\n body: {\r\n columns: listColumns,\r\n refid: field.ref_id,\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n if (this.config.fieldExpression != null) {\r\n var table = $$(this.config.tableId);\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var fields = this.config.fieldExpression.split(\";\");\r\n\r\n for (var i = 0; i < fields.length; i++) {\r\n var field = fields[i].replace(\"{\", \"\").replace(\"}\", \"\");\r\n var array = field.split(\":\");\r\n\r\n selectedItem[array[1]] = obj[array[0]];\r\n }\r\n\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n\r\n if (this.config.value_suggest != null) {\r\n var fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n fn(obj, this.config.id);\r\n }\r\n },\r\n },\r\n };\r\n }\r\n\r\n subCols.push(subCol);\r\n }\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var item = {\r\n header: tab.name,\r\n select: \"cell\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 28,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n width: 60,\r\n icon: \"fas fa-plus\",\r\n css: { \"font-size\": \"15px\" },\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n var vc_window = windowconfig[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type == \"Detail\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n //console.log(item);\r\n table.add(item);\r\n\r\n table.select(item.id, table.config.columns[0].id, false);\r\n table.edit({ row: item.id, column: table.config.columns[0].id });\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F8)\",\r\n width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F7)\",\r\n width: 45,\r\n icon: \"fas fa-copy\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var parentView = this.getParentView().getParentView();\r\n var childViews = parentView.getChildViews();\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var childview = childViews[i];\r\n\r\n if (childview.config.view == \"datatable\") {\r\n var table = childview;\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n //item.id = webix.uid();\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n copy[tab.table_name + \"_id\"] = null;\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, table.config.columns[0].id, false);\r\n table.edit({ row: copy.id, column: table.config.columns[0].id });\r\n\r\n break;\r\n }\r\n }\r\n },\r\n },\r\n },\r\n {\r\n hidden: vc_window.code !== \"WIN00023\" ? true : false,\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Import file excel mẫu\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"edit_\" + tab.table_name);\r\n require([\"views/forms/uploadexceltemplate\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n var form = webix.$$(\"window-form\");\r\n var data = form.getValues();\r\n win.show();\r\n var formData = { wb_excel_id: data.id, excel_id: data.code, filename: data.name };\r\n\r\n if(parentCodeParam) {\r\n formData['parent_code'] = $$(parentCodeParam.id).getValue();\r\n }\r\n\r\n webix.$$(\"uploader\").define(\"formData\", formData);\r\n webix.$$(\"uploader\").hide();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"edit_\" + tab.table_name,\r\n tab_table: tab.table_name,\r\n tab_id: tab.tab_id,\r\n editable: true,\r\n select: \"cell\",\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n columns: subCols,\r\n on: {\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n\r\n if (this.config.oncheck != null) {\r\n var fn = Function(\"row\", \"column\", \"state\", \"tableId\", this.config.oncheck);\r\n fn(row, column, state, this.config.id);\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (editor.config.value_change != null && editor.config.value_change != \"\") {\r\n var selectedItem = null;\r\n\r\n if (typeof editor.getPopup === \"function\") {\r\n var popup = editor.getPopup();\r\n\r\n if (popup != null) {\r\n var list = popup.getList();\r\n\r\n if (list != null) {\r\n selectedItem = list.getSelectedItem();\r\n }\r\n }\r\n }\r\n\r\n var fn = Function(\"newv\", \"oldv\", \"id\", \"selectedItem\", editor.config.value_change);\r\n fn(state.value, state.old, editor.config.id, selectedItem);\r\n }\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"columnId\", \"tableId\", \"rowId\", this.config.cell_editstop);\r\n fn(editor.config.id, this.config.id, editor.row);\r\n }\r\n },\r\n // onKeyDown: function(code, e)\r\n // {\r\n // \t\tif (e.key == 40) {\r\n // \t\tvar toolbar = this.getParentView().getChildViews()[0];\r\n // \t\tvar btnPlus = toolbar.getChildViews()[0];\r\n // \t\tconsole.log(btnPlus);\r\n // \t\tbtnPlus.callEvent(\"onItemClick\");\r\n // \t}\r\n // },\r\n onKeyPress: function (code, e) {\r\n var table = this;\r\n\r\n if (e.key == \"F8\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnMinus = toolbar.getChildViews()[1];\r\n\r\n btnMinus.callEvent(\"onItemClick\");\r\n }\r\n if (e.key == \"F9\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnPlus = toolbar.getChildViews()[0];\r\n\r\n btnPlus.callEvent(\"onItemClick\");\r\n }\r\n if (e.key == \"F7\") {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n var btnCopy = toolbar.getChildViews()[2];\r\n\r\n btnCopy.callEvent(\"onItemClick\");\r\n }\r\n\r\n if (e.key == \"F2\") {\r\n var editor = table.getEditState();\r\n\r\n if (editor === false) return;\r\n\r\n var suggest = $$(editor.config.suggest);\r\n var refid = suggest.config.body.refid;\r\n var sql = {\r\n command: \"SYS004\",\r\n parameter: {\r\n refid: refid,\r\n },\r\n };\r\n //\tvar sql = \"SELECT a.*,b.window_id as WINDOWNO FROM #SCHEMA_NAME#.wb_references a INNER JOIN #SCHEMA_NAME#.wb_window b ON a.wb_window_id=b.wb_window_id WHERE a.wb_references_id='\" + refid + \"'\";\r\n // var url = app.config.host + \"/System/ExecuteQuery?sql=\" + sql;\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var a = webix.ajax().post(url, sql);\r\n var b = editor.config.suggest;\r\n var c = table.config.id;\r\n var d = suggest.config.fieldExpression;\r\n var e = editor.config.id;\r\n var f = suggest.config.displayField;\r\n //console.log(f);\r\n\r\n webix.promise.all([a, b, c, d, e, f]).then(function (results) {\r\n var res_a = results[0].json();\r\n //\tconsole.log(res_a);\r\n var suggest = $$(results[1]);\r\n\r\n suggest.hide();\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + res_a[0][\"windowno\"];\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = {\r\n tableId: results[2],\r\n fieldExpression: d,\r\n valueField: res_a[0][\"value_field\"],\r\n editorId: null,\r\n columnName: e,\r\n displayField: f,\r\n };\r\n\r\n ajax.get(url, function (text) {\r\n var windowconfig = JSON.parse(text);\r\n var table = $$(this.tableId);\r\n //console.log(windowconfig);\r\n var win = table.$scope.ui(selectwindow.$ui);\r\n\r\n win.config.valueField = this.valueField;\r\n win.config.fieldExpression = this.fieldExpression;\r\n win.config.tableId = this.tableId;\r\n win.config.editorId = null;\r\n win.config.columnName = this.columnName;\r\n win.config.displayField = this.displayField;\r\n\r\n selectwindow.initUI(windowconfig);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n win.show();\r\n });\r\n });\r\n\r\n var win = this.$scope.ui(selectwindow.$ui);\r\n win.show();\r\n }\r\n\r\n if (e.key == \"F4\" || e.key == \"F3\") {\r\n var editor = table.getEditState();\r\n\r\n if (editor === false) {\r\n var toolbar = this.getParentView().getChildViews()[0];\r\n //console.log(toolbar);\r\n var btnPlus = toolbar.getChildViews()[0];\r\n //console.log(btnPlus);\r\n btnPlus.callEvent(\"onItemClick\");\r\n return;\r\n }\r\n var editmode = e.key == \"F3\" ? 2 : 1;\r\n tableShowEditWindow(table, editmode);\r\n }\r\n },\r\n onSelectChange: function () {\r\n var selectedItem = this.getSelectedId();\r\n\r\n if (this.config.select_change != null) {\r\n var fn = Function(\"selectedItem\", this.config.select_change);\r\n fn(selectedItem);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n cells.push(item);\r\n }\r\n }\r\n\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n scrollX: true,\r\n cells: cells,\r\n tabbar: {\r\n width: 200,\r\n },\r\n };\r\n\r\n if (vc_window.width != null || vc_window.height != null) {\r\n subview.height = 250;\r\n }\r\n\r\n //el.push(subview);\r\n\r\n var myJsonString = JSON.stringify(el);\r\n var x = findJson.getObjects(JSON.parse(myJsonString), \"id\", \"tab_replace\");\r\n //replace tab chi tiết\r\n if (x.length > 0) {\r\n var Y = x[0];\r\n //webix.extend(Y, subview, true);\r\n // cần cập nhật lại x[0] cho el\r\n\r\n for (var i = 0; i < el.length; i++) {\r\n if (el[i].id == \"tab_replace\") {\r\n //console.log(el[i]);\r\n el[i] = subview;\r\n }\r\n }\r\n } else {\r\n if (vc_window.tab_row != null) {\r\n el[vc_window.tab_row - 1] = subview;\r\n } else {\r\n el.push(subview);\r\n }\r\n }\r\n }\r\n\r\n var cols = [\r\n // {},\r\n {\r\n // \t\t view: \"button\", type: \"htmlbutton\", width: 100,\r\n // label: ' ' +\r\n // 'LƯU (F10)',\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"LƯU (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 110,\r\n before_save: vc_window.before_save,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var form = webix.$$(\"window-form\");\r\n\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n\r\n if (self.config.before_save != null) {\r\n var fn = Function(self.config.before_save);\r\n var result = fn();\r\n\r\n if (result == false) return;\r\n }\r\n\r\n var item = form.getValues();\r\n\r\n var khData = {};\r\n\r\n khData.windowid = String(rp[\"data\"][0][\"code\"]);\r\n khData.editmode = editmode;\r\n khData.data = [];\r\n\r\n var vc_window = rp[\"data\"][0];\r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var tabs = vc_window.Tabs;\r\n var details = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n\r\n details.push({\r\n tab_id: tab.code,\r\n tab_table: tab.table_name,\r\n data: table.serialize(),\r\n });\r\n }\r\n }\r\n\r\n item[\"details\"] = details;\r\n }\r\n\r\n khData.data.push(item);\r\n\r\n self.getTopParentView().disable();\r\n self.getTopParentView().showProgress();\r\n \r\n var box = null\r\n if(khData.windowid == \"WIN00026\" && item.code == \"CHECK_QUANTITY_KH\") {\r\n box = webix.modalbox({\r\n title: \"Hệ thống đang cập nhật cấu hình. Vui lòng không phát hành hóa đơn!\",\r\n text: \"

\",\r\n width: 450,\r\n height: 200,\r\n });\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if(box) {\r\n webix.modalbox.hide(box)\r\n }\r\n\r\n var json = JSON.parse(text);\r\n\r\n $$(json.windowid).enable();\r\n $$(json.windowid).hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var after_save = $$(json.windowid).config.after_save;\r\n\r\n if (after_save != null) {\r\n //Function\r\n var fn = Function(\"editmode\", \"data\", after_save);\r\n fn(editmode, json.data);\r\n //console.log(editmode);\r\n }\r\n\r\n $$(json.windowid).close();\r\n app.callEvent(\"dataChanged\", [editmode, json.data]);\r\n webix.message(\"Cập nhật cấu hình thành công\", \"success\", 2000);\r\n } else {\r\n webix.message(json.error, \"error\", 2000);\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n shortcut: \"esc\",\r\n label: \"HỦY (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n this.getTopParentView().close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n height: 40,\r\n cols: cols,\r\n });\r\n\r\n webix.ui(el, $$(\"window-form\"));\r\n //console.log(el);\r\n\r\n win.getHead().setHTML(windowconfig.data[0].name);\r\n },\r\n focusFirstElement: function () {\r\n var form = $$(\"window-form\");\r\n form.focus(form.elements[0]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n\r\n var form = webix.$$(\"window-form\");\r\n var topParentView = form.getTopParentView();\r\n topParentView.config.editmode = mode;\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var form = webix.$$(\"window-form\");\r\n var vc_window = winconfig[\"data\"][0];\r\n webix.editors.$popup = {\r\n date: {\r\n view: \"popup\",\r\n body: { view: \"calendar\", timepicker: true, icons: true },\r\n },\r\n };\r\n if (item == null) {\r\n var tabs = vc_window.Tabs;\r\n\r\n item = {};\r\n\r\n if (params != null) {\r\n item = params;\r\n }\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n } else {\r\n form.setValues(item);\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type != \"Detail\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n //if (field.hidden != true) {\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n if (item[field.column_name] != null && item[field.column_name] != undefined) {\r\n item[field.column_name] = removeTimeZoneT(item[field.column_name]);\r\n form.setValues(item);\r\n }\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n \r\n if (item[field.column_name] != null && item[field.column_name] != undefined) {\r\n item[field.column_name] = new Date(item[field.column_name]);\r\n form.setValues(item);\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n if(winconfig[\"data_params\"] && winconfig[\"data_params\"].length > 0) {\r\n parentCodeParam = winconfig[\"data_params\"].find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n }\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + vc_window.code + \"&id=\" + item.id + \"&tab_table=\" + tab.table_name;\r\n if(parentCodeParam) {\r\n url = url + \"&parent_code=\" + $$(parentCodeParam.id).getValue();\r\n }\r\n table.clearAll();\r\n // if(editmode == 4) continue;\r\n table.load(url);\r\n }\r\n }\r\n }\r\n },\r\n copyValues: function (item, winconfig) {\r\n var form = webix.$$(\"window-form\");\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var dataParam = null;\r\n if(winconfig[\"data_params\"] && winconfig[\"data_params\"].length > 0) {\r\n dataParam = winconfig[\"data_params\"].find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var table = webix.$$(\"edit_\" + tab.table_name);\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + vc_window.code + \"&id=\" + item.id + \"&tab_table=\" + tab.table_name;\r\n if(dataParam) {\r\n url = url + \"&parent_code=\" + $$(dataParam.id).getValue();\r\n }\r\n\r\n table.clearAll();\r\n\r\n if (vc_window.code == \"WIN00008\") {\r\n continue;\r\n }\r\n\r\n table.load(url);\r\n }\r\n }\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/detailreport',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"views/forms/infowindow\",\r\n\t\"views/forms/window\"\r\n],function(app,_,infowindow,windowform){\r\n\tvar editmode = 0;\r\n\tvar tableId = 0;\r\n\r\n\tvar contextmenu = webix.ui({\r\n view:\"contextmenu\",\r\n id:\"ctxMenuDetail\",\r\n on:{\r\n onMenuItemClick:function(id){\r\n var item = this.getItem(id);\r\n\r\n if (id==\"SUACTGOCDETAIL\"){\r\n var table =this.getContext().obj;\r\n var row = table.getSelectedItem(); \r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\"+row.MA_CT+\"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\tajax.master = table;\r\n\r\n ajax.get(url,function(text){\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n \r\n var table = this;\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\"+data.WINDOW_ID + \"&id=\"+row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+ data.WINDOW_ID);\r\n\t\t\t\t\t\t\tvar c = table.config.id;\r\n\r\n webix.promise.all([a,b,c]).then(function(results){\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(c);\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n \r\n var item = a_result.data[0]; \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n });\r\n \r\n });\r\n }\r\n else {\r\n var ctx =this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\"+ item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n \r\n\r\n \r\n }\r\n }\r\n });\r\n\r\n\r\n\tfunction initData(windowId,tableId,infoWindowId,report_id){\r\n\r\n\t\tvar win = $$(windowId);\r\n\t\tvar table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n\t\tvar menuitem = win.config.menuitem;\r\n\r\n\t\tvar parentParamter = win.config.parentParameter;\r\n\t\tvar parentRow = win.config.parentRow;\r\n\r\n\t\tinfowindow.$ui.id = infoWindowId;\r\n\t\tinfowindow.$ui.report_id = report_id;\r\n\t\tinfowindow.$ui.editmode = 1;\r\n\t\tinfowindow.$ui.load_event = \"loadDetailReport\";\r\n\t\tinfowindow.$ui.menuitem = menuitem;\r\n\r\n\t\tvar parameters = menuitem.PARAMETERS\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t.split(';');\r\n\r\n\t\tvar item = {};\r\n\r\n\t\tfor(var i=0;i\" + _(col.REPORTCOLUMN_NAME) +\"\",\r\n\t\t\t\t\t\twidth: col.REPORTCOLUMN_WIDTH,\r\n\t\t\t\t\t\thidden: col.HIDDEN == \"C\" ? true : false\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (col.HEADER!=null){\r\n\t\t\t\t\t\tif (col.HEADER!=\"\"){\r\n\t\t\t\t\t\t\tvar headers = JSON.parse(col.HEADER);\r\n\r\n\t\t\t\t\t\t\tfor(var j=0;j\" + _(hd.text) +\"\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.header = headers;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (col.COLUMN_TYPE == \"VC_DATE\"){\r\n\t\t\t\t\t\titem.format = function(text) {\r\n\t\t\t\t\t\t\tvar format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n\t\t\t\t\t\t\ttext = removeTimeZoneT(text); \r\n\t\t\t\t\t\t\treturn format(text);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (col.COLUMN_TYPE == \"VC_TYGIA\" || col.COLUMN_TYPE == \"VC_TIEN\"){\r\n\t\t\t\t\t\titem.css = { \"text-align\" : \"right\" };\r\n\t\t\t\t\t\titem.format = webix.Number.numToStr({\r\n\t\t\t\t\t\t\t\tgroupDelimiter:\",\",\r\n\t\t\t\t\t\t\t\tgroupSize:3,\r\n\t\t\t\t\t\t\t\tdecimalDelimiter:\".\",\r\n\t\t\t\t\t\t\t\tdecimalSize:0\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcols.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\r\n\t\t\t\ttable.config.columns = cols;\r\n\t\t\t\ttable.config.report_id = json[0][\"VC_REPORT_id\"];\r\n\t\t\t\ttable.config.infowindow_id = json[0][\"INFOWINDOW_ID\"];\r\n\r\n\t\t\t\ttable.refreshColumns();\t\r\n\t\t\t\t\r\n\t\t\t\tinitData(win.config.id,table.config.id,json[0][\"INFOWINDOW_ID\"],json[0][\"VC_REPORT_id\"]);\r\n\r\n\t\t\t});\r\n\t\t},\r\n\t\t$oninit: function(view,$scope) {\r\n\t\t\t\r\n\t\t\t $scope.on(app, \"loadDetailReport\", function(report_id,infoWindowId,item,menuitem){\r\n\t\t\t\t\r\n var win = $$(infoWindowId);\r\n\t\t\t\tvar table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id){\r\n\r\n var rpParameter={\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post( app.config.host + \"/api/System/CreateReport\", rpParameter, function(text){\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data,\"json\");\r\n });\r\n }\r\n\r\n \r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/baocao_bangkebienlai',[\"app\", \"locale\", \"views/forms/infowindow\", \"views/forms/detailreport\", \"views/forms/window\", \"models/user\"], function (app, _, infowindow, detailreport, windowform, user) {\r\n \r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-refresh\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n on: {\r\n onClick: function () {\r\n //console.log($$(\"cbReport\").getValue());\r\n \r\n if ($$(\"cbReport\").getValue() == null || $$(\"cbReport\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn báo cáo !\", \"error\");\r\n return;\r\n }\r\n var cbReport = webix.$$(\"cbReport\");\r\n var list = cbReport.getList();\r\n\r\n var item = list.getItem(cbReport.getValue());\r\n\r\n infowindow.$ui.id = item.wb_infowindow_id;\r\n infowindow.$ui.report_id = cbReport.getValue();\r\n infowindow.$ui.load_event = \"loadReport\";\r\n\r\n if ($$(\"tblReportBangKe\").config.rpParameter != null) {\r\n infowindow.$ui.editmode = 1;\r\n infowindow.$ui.formvalues = $$(\"tblReportBangKe\").config.rpParameter.parameters;\r\n } else {\r\n infowindow.$ui.editmode = 0;\r\n infowindow.$ui.formvalues = null;\r\n }\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n infowindow.initUI(item.wb_infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (PDF)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" PDF\",\r\n // width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReportBangKe\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"PDF\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExport\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-file\",\r\n // label: _(\"EXPORT_EXCEL\"),\r\n // width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReportBangKe\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n //var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n var reportItem = $$(\"cbReport\").getList().getSelectedItem();\r\n\r\n if (reportItem != null) {\r\n var export_name = reportItem.export_name;\r\n webix.html.download(file, export_name + \".xlsx\");\r\n }\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n id: \"cbReport\",\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Chọn báo cáo\",\r\n labelWidth: 90,\r\n suggest: {\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00097\",\r\n parameter: {\r\n window_id: windowno,\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n template: \"#name#\",\r\n body: {\r\n template: \"#name#\",\r\n },\r\n },\r\n on: {\r\n onChange: function () {\r\n var report_id = this.getValue();\r\n\r\n if (report_id == \"\") {\r\n return;\r\n }\r\n var name = $$(\"cbReport\").getText();\r\n\r\n webix.$$(\"title\").parse({ title: name, details: name });\r\n initTable(report_id);\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"tblReportBangKe\",\r\n view: \"treetable\",\r\n resizeColumn: true,\r\n select: true,\r\n css: \"report\",\r\n columns: [],\r\n headermenu: {\r\n width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n },\r\n scheme: {\r\n $change: function (item) {\r\n if (item.BOLD == \"C\") item.$css = \"rowBold\";\r\n },\r\n $group: {\r\n by: \"nhom\"\r\n },\r\n },\r\n pager: \"pagerA\",\r\n on: {\r\n onBeforeContextMenu: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (item.DOC_ID != null && item.MA_CT != null) {\r\n var mn = $$(\"ctxMenu\");\r\n var menuitem = mn.getItem(\"SUACTGOC\");\r\n if (menuitem == null) {\r\n mn.add({ id: \"SUACTGOC\", value: \"Sửa chứng từ\" });\r\n }\r\n }\r\n\r\n webix.delay(function () {\r\n this.clearSelection();\r\n this.select(id.row, id.column);\r\n }, this);\r\n },\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var contextmenu = webix.ui({\r\n view: \"contextmenu\",\r\n id: \"ctxMenu\",\r\n on: {\r\n onMenuItemClick: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (id == \"SUACTGOC\") {\r\n var table = $$(\"tblReportBangKe\");\r\n var row = table.getSelectedItem();\r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\" + row.MA_CT + \"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\" + data.WINDOW_ID + \"&id=\" + row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + data.WINDOW_ID);\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n\r\n var item = a_result.data[0];\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n });\r\n });\r\n } else {\r\n var ctx = this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\" + item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function initTable(report_id) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00012\",\r\n parameter: {\r\n wb_report_id: report_id,\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, parameters, function (text) {\r\n var json = JSON.parse(text);\r\n var table = webix.$$(\"tblReportBangKe\");\r\n\r\n table.clearAll();\r\n table.config.rpParameter = null;\r\n\r\n var cols = [];\r\n var isFooter = false;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var col = json[i];\r\n //console.log(col);\r\n\r\n var item = {\r\n id: col.value_field,\r\n header: \"
\" + _(col.header_title) + \"
\",\r\n width: col.width,\r\n hidden: col.hidden == \"C\" ? true : false,\r\n };\r\n\r\n // cột tổng dưới footer\r\n if (col.footer === \"\" || col.footer === null) {\r\n } else {\r\n var temp = JSON.parse(col.footer);\r\n item.footer = temp;\r\n\r\n isFooter = true;\r\n }\r\n\r\n //console.log(col.sum);\r\n if (col.header != null) {\r\n if (col.header != \"\") {\r\n var headers = JSON.parse(col.header);\r\n\r\n for (var j = 0; j < headers.length; j++) {\r\n var hd = headers[j];\r\n if (hd != null) {\r\n hd.text = \"
\" + _(hd.text) + \"
\";\r\n }\r\n }\r\n\r\n item.header = headers;\r\n }\r\n }\r\n\r\n if (col.data_type == \"datetime\" || col.data_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (col.data_type == \"decimal\" || col.data_type == \"int\" || col.data_type == \"integer\" || col.data_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n });\r\n }\r\n\r\n if (col.data_type == \"boolean\") {\r\n item.template = function (obj, common, value) {\r\n if (value) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (col.value_field == \"nlap\" && col.wb_report_id == \"7fdfab2b-9508-4471-98e0-96d36443ab08\") {\r\n item.template = function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.nlap;\r\n };\r\n }\r\n\r\n if (col.value_field == \"ord\") {\r\n item.sort = \"int\";\r\n }\r\n\r\n cols.push(item);\r\n }\r\n\r\n table.define(\"footer\", isFooter);\r\n\r\n table.config.columns = cols;\r\n table.config.report_id = json[0][\"wb_report_id\"];\r\n table.refreshColumns();\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var windowno = app.path[1].params[0];\r\n var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1\";\r\n\r\n var url = app.config.host + \"/System/ExecuteQuery?sql=\" + encodeURIComponent(query);\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n var title = $$(\"title\");\r\n\r\n if (title != undefined && title != null) {\r\n title.parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n if (app.path[1].params[1] != null) {\r\n var id = app.path[1].params[1];\r\n $$(\"cbReport\").setValue(id);\r\n\r\n var load_event = \"loadReport\";\r\n var report_id = \"d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n var id = \"5accccd3-51bd-4370-b130-b01ab35d6c86\";\r\n\r\n var now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n var item = {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: null,\r\n den_ngay: now,\r\n };\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.report_id = report_id;\r\n\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: id,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n });\r\n }\r\n\r\n $scope.on(app, \"loadReport\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"tblReportBangKe\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n webix.delay(\r\n function () {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReportBangKe\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n },\r\n null,\r\n null,\r\n 1000\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var data = JSON.parse(text);\r\n\r\n // var table = $$(\"tblReportBangKe\");\r\n // table.clearAll();\r\n // table.parse(data, \"json\");\r\n });\r\n }\r\n });\r\n\r\n $scope.on(app, \"loadDetailReport\", function (report_id, infoWindowId, item, menuitem) {\r\n var win = $$(\"dtrp_\" + menuitem.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = menuitem;\r\n\r\n ajax.headers({ \"Content-type\": \"application/json\" }).post(app.config.host + \"/api/System/CreateReport\", rpParameter, function (text) {\r\n var win = $$(\"dtrp_\" + this.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n \r\n table.clearAll();\r\n var data = JSON.parse(text);\r\n table.parse(data, \"json\");\r\n table.refresh();\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n }\r\n });\r\n },\r\n initUI: function () {},\r\n };\r\n});\r\n\ndefine('views/forms/chukyso',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin chứng thư số\",\r\n\t\t\t// height: 490,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"chukyso-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"cer_serial\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\twidth: 550\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"textarea\",\r\n\t\t\t\t\t\tname: \"subject_name\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SUBJECTNAME\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\theight: 100\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"textarea\",\r\n\t\t\t\t\t\tname: \"issuer\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"DONVI\"),\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\theight: 80\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"datepicker\",\r\n\t\t\t\t\t\t\t\tlabel: _(\"NGAY_BAT_DAU\"),\r\n\t\t\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\t\t\tname: \"begin_date\",\r\n\t\t\t\t\t\t\t\ttimepicker: true,\r\n\t\t\t\t\t\t\t\tformat: \"%d/%m/%Y %H:%i:%s\",\r\n\t\t\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"datepicker\",\r\n\t\t\t\t\t\t\t\tlabel: _(\"NGAY_KET_THUC\"),\r\n\t\t\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\t\t\tname: \"end_date\",\r\n\t\t\t\t\t\t\t\tformat: \"%d/%m/%Y %H:%i:%s\",\r\n\t\t\t\t\t\t\t\ttimepicker: true,\r\n\t\t\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"token_serial\",\r\n\t\t\t\t\t\tlabel: _(\"TOKEN_SERIAL\"),\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\",\r\n\t\t\t\t\t\treadonly: true\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"signer\",\r\n\t\t\t\t\t\tlabel: _(\"NGUOI_KY\"),\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\tview: \"checkbox\",\r\n\t\t\t\t\t\tname: \"chon\",\r\n\t\t\t\t\t\tlabel: _(\"CHON\"),\r\n\t\t\t\t\t\tcheckValue: true,\r\n\t\t\t\t\t\tuncheckValue: false,\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"chukyso-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/chukyso',[\"app\", \"views/forms/chukyso\", \"locale\", \"views/modules/minvoiceplugin\"], function (app, dmwindowform, _, plugin) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký chứng thư số\", details: \"Danh sách chứng thư số\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n function (text) {\r\n var array = JSON.parse(text);\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.code == \"FILE\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.code == \"SERVER_CERT\") {\r\n server_cert = item.value;\r\n }\r\n }\r\n\r\n if (kytaptrung == \"C\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n\r\n var item = {\r\n certs: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveCerts\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_HET_HAN\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"tokenSerial\",\r\n header: _(\"TOKEN_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: server_cert + \"/Token/AllCertificates\",\r\n });\r\n } else {\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n\r\n var item = {\r\n certs: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveChukysoFile\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"serial_number\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 250,\r\n },\r\n {\r\n id: \"file_path\",\r\n header: _(\"Đường dẫn\"),\r\n width: 250,\r\n },\r\n // {\r\n // id: \"pass\",\r\n // header: _(\"Mật khẩu\"),\r\n // type:\"password\",\r\n // editor:\"password\",\r\n // width: 200\r\n // }\r\n ],\r\n url: app.config.host + \"/Token/AllCertificatesFile\",\r\n });\r\n } else {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"RegisterCert\") {\r\n var item = {\r\n chon: true,\r\n so_serial: json.data.so_serial,\r\n subjectname: json.data.subjectname,\r\n issuer: json.data.issuer,\r\n ngaybatdau: json.data.ngaybatdau,\r\n ngayketthuc: json.data.ngayketthuc,\r\n tokenSerial: \"\",\r\n };\r\n\r\n var certs = [];\r\n certs.push(item);\r\n\r\n var parameter = {\r\n certs: certs,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveCerts\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"RegisterCert\",\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n }\r\n }\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n //var chon = item.chon;\r\n\r\n //item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n\r\n item.begin_date = removeTimeZoneT(item.begin_date);\r\n item.end_date = removeTimeZoneT(item.end_date);\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 80,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.cer_serial,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-file-text-o\",\r\n css: \"webix_secondary\",\r\n label: \"Tải file\",\r\n width: \"90\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"txtPass\",\r\n view: \"text\",\r\n label: \"Mật khẩu\",\r\n labelPosition: \"top\",\r\n required: true,\r\n type: \"password\",\r\n },\r\n {\r\n view: \"uploader\",\r\n id: \"upl1\",\r\n autosend: false,\r\n value: \"Chọn file\",\r\n link: \"mylist\",\r\n upload: app.config.host + \"/Token/UploadCertFile\",\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n autoheight: true,\r\n borderless: true,\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu file\",\r\n type: \"form\",\r\n click: function () {\r\n var formData = {\r\n pass: $$(\"txtPass\").getValue(),\r\n };\r\n\r\n $$(\"upl1\").define(\"formData\", formData);\r\n\r\n $$(\"upl1\").send(function (res) {\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã tải thành công\");\r\n\r\n var win = $$(\"upl1\").getTopParentView();\r\n win.close();\r\n\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n\r\n var comp = {\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Đăng ký File chứng thư số\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-sim\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm Sim PKI\",\r\n width: \"120\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formSimPKI\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"txtPhone\",\r\n view: \"text\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"txtPhone\",\r\n validate: function (value) {\r\n return /([0-9]{9,13})/.test(value);\r\n },\r\n invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var form = this.getParentView();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var formData = {\r\n phone: $$(\"txtPhone\").getValue(),\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveSimPKI\", formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modalSimPKI\");\r\n win.close();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modalSimPKI\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm số sim PKI\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"mdi mdi-certificate\",\r\n // css: \"webix_secondary\",\r\n // label: \"Thêm HSM NCCA\",\r\n // width: \"130\",\r\n // on: {\r\n // onClick: function () {\r\n // var form = {\r\n // id: \"formHSM\",\r\n // view: \"form\",\r\n // elements: [\r\n // {\r\n // id: \"token_serial\",\r\n // view: \"text\",\r\n // label: \"Mã UUID\",\r\n // labelPosition: \"top\",\r\n // required: true,\r\n // name: \"token_serial\",\r\n // css:\"mcls_uppercase\",\r\n // // validate: function (value) {\r\n // // return /([0-9]{9,13})/.test(value);\r\n // // },\r\n // // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n // },\r\n // {\r\n // id: \"pass\",\r\n // view: \"text\",\r\n // label: \"Pass code\",\r\n // labelPosition: \"top\",\r\n // required: true,\r\n // name: \"pass\",\r\n // css:\"mcls_uppercase\",\r\n // // validate: function (value) {\r\n // // return /([0-9]{9,13})/.test(value);\r\n // // },\r\n // // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n // },\r\n // {\r\n // view: \"button\",\r\n // label: \"Lưu\",\r\n // type: \"form\",\r\n // click: function () {\r\n // var form = this.getParentView();\r\n // if (form.validate() == false) {\r\n // return;\r\n // }\r\n // var formData = $$(\"formHSM\").getValues();\r\n // webix\r\n // .ajax()\r\n // .headers({ \"Content-type\": \"application/json\" })\r\n // .post(app.config.host + \"/Token/SaveHSM_NCCA\", formData, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // var table = $$(\"dmwindowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n // var win = $$(\"modelHSM\");\r\n // win.close();\r\n // } else {\r\n // webix.message(json.error, \"error\");\r\n // }\r\n // });\r\n // },\r\n // },\r\n // {\r\n // view: \"button\",\r\n // label: \"Hủy bỏ\",\r\n // type: \"danger\",\r\n // shortcut: \"esc\",\r\n // click: function () {\r\n // var win = this.getTopParentView();\r\n // win.close();\r\n // },\r\n // },\r\n // ],\r\n // };\r\n // var comp = {\r\n // id: \"modelHSM\",\r\n // view: \"window\",\r\n // position: \"center\",\r\n // modal: true,\r\n // head: \"Thêm HSM NCCA\",\r\n // body: form,\r\n // };\r\n\r\n // var win = this.$scope.ui(comp);\r\n // win.show();\r\n // },\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // },\r\n // },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-certificate\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm HSM Khác\",\r\n width: \"150\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formHSM\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"token_serial\",\r\n view: \"text\",\r\n label: \"Mã UUID\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"token_serial\",\r\n css:\"mcls_uppercase\",\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n id: \"pass\",\r\n view: \"text\",\r\n label: \"Pass code\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"pass\",\r\n css:\"mcls_uppercase\",\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n id: \"loai\",\r\n view: \"combo\",\r\n label: \"Loại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"loai\",\r\n css:\"mcls_uppercase\",\r\n options:[\"NCCA\", \"ICORP\"]\r\n // validate: function (value) {\r\n // return /([0-9]{9,13})/.test(value);\r\n // },\r\n // invalidMessage: \"Định dạng điện thoại không đúng, ví dụ: 0862262040\",\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var form = this.getParentView();\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var formData = $$(\"formHSM\").getValues();\r\n\r\n var url = \"\";\r\n\r\n switch(formData.loai) {\r\n case \"NCCA\":\r\n url = \"/Token/SaveHSM_NCCA\";\r\n break;\r\n case \"ICORP\":\r\n url = \"/Token/SaveHSM_ICORP\";\r\n break;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + url, formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modelHSM\");\r\n win.close();\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modelHSM\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm HSM Khác\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"mdi mdi-certificate\",\r\n css: \"webix_secondary\",\r\n label: \"Thêm Remote Signing\",\r\n width: \"150\",\r\n on: {\r\n onClick: function () {\r\n var form = {\r\n id: \"formCKSRS\",\r\n view: \"form\",\r\n elements: [\r\n {\r\n id: \"private_number\",\r\n view: \"text\",\r\n label: \"CCCD/CMND/Hộ chiếu/ Mã số thuế\",\r\n labelPosition: \"top\",\r\n required: true,\r\n name: \"private_number\",\r\n css:\"mcls_uppercase\",\r\n \r\n },\r\n {\r\n view: \"button\",\r\n label: \"Lưu\",\r\n type: \"form\",\r\n click: function () {\r\n var formData = {\r\n user_id: $$(\"private_number\").getValue(),\r\n };\r\n if($$(\"private_number\").getValue().trim() == \"\"){\r\n webix.message(\"Số CCCD/CMND/Hộ chiếu/Mã số thuế không được để trống\", \"error\");\r\n return;\r\n }\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveRSNacencom\", formData, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\") || (json.hasOwnProperty(\"error\") && Object.keys(json).length > 1)) { \r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n var win = $$(\"modelCKSRS\");\r\n win.close();\r\n debugger\r\n if((json.hasOwnProperty(\"error\") && Object.keys(json).length > 1))\r\n {\r\n var lstError= json.error.split(\";\");\r\n lstError.pop();\r\n for (var i = 0 ; i< lstError.length; i++) {\r\n webix.message(lstError[i]);\r\n }\r\n }\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Hủy bỏ\",\r\n type: \"danger\",\r\n shortcut: \"esc\",\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n ],\r\n };\r\n var comp = {\r\n id: \"modelCKSRS\",\r\n view: \"window\",\r\n position: \"center\",\r\n modal: true,\r\n head: \"Thêm CKS Remote Signing\",\r\n body: form,\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n //loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n //console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n { id: \"cer_serial\", header: _(\"SO_SERIAL\"), width: 250 },\r\n { id: \"subject_name\", header: _(\"SUBJECTNAME\"), width: 550 },\r\n { id: \"signer\", header: _(\"NGUOI_KY\"), width: 150 },\r\n { id: \"cert_type\", header: \"Loại\", width: 90 },\r\n /* {\r\n id: \"chon\",\r\n checkValue: \"true\",\r\n uncheckValue: \"false\",\r\n template: function (obj, common, value) {\r\n if (value)\r\n return \"
\";\r\n else\r\n return \"
\";\r\n },\r\n header: _(\"CHON\"),\r\n width: 100\r\n }, */\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_HET_HAN\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"issuer\", header: _(\"DONVI\"), width: 550 },\r\n {\r\n id: \"file_name\",\r\n header: \"Tên File\",\r\n width: 120,\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_license',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n \r\n var html = \"

Thông tin gói hóa đơn

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n url: app.config.host + \"/Invoice68/DashboardTiles_License\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline78_new',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n id: 'dashline78_new',\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n \r\n if (data.items == undefined) return \"\";\r\n \r\n var items = data.items;\r\n\r\n var html = \"

Hóa đơn 78

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles78New\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_bienlai',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n id: 'dashline_bienlai',\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n\r\n var html = \"

Biên lai

\";\r\n html += \"
\";\r\n \r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles_BienLai\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/dashline_chungtu',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n id: 'dashline_chungtu',\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return \"\";\r\n var items = data.items;\r\n\r\n var html = \"

Chứng từ

\";\r\n html += \"
\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n //url: app.config.host + \"/Invoice68/DashboardTiles_Chungtu\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/chart',[\"app\"], function (app) {\r\n\r\n return {\r\n $ui: {\r\n \"type\": \"clean\",\r\n \"cols\": [\r\n {\r\n rows: [\r\n {\r\n \"template\": \" Doanh thu ( triệu đồng )\",\r\n \"css\": \"sub_title\",\r\n \"height\": 30,\r\n borderless: true\r\n // \"paddingX\": 10,\r\n // \"paddingY\": 10,\r\n // \"margin-left\": 10\r\n },\r\n {\r\n view: \"chart\",\r\n type: \"line\",\r\n barWidth: 165,\r\n radius: 0,\r\n resize: true,\r\n gradient: \"falling\",\r\n // value: \"#hd01#\",a\r\n // label: \"#hd01#\",\r\n preset: \"column\",\r\n //border:false,\r\n borderless: true,\r\n xAxis: {\r\n title: \"Tháng\",\r\n lines: false,\r\n template: \" #thang#\"\r\n },\r\n yAxis: {\r\n // title: \"Years\",\r\n // lines: true,\r\n start: 0,\r\n step: 500,\r\n end: 5000,\r\n template: function (obj) {\r\n return (obj % 500 ? \"\" : obj)\r\n }\r\n },\r\n legend: {\r\n values: [{ text: \"01GTKT\", color: \"#4bbaa4\" }, { text: \"02GTTT\", color: \"#ee9e36\" }, { text: \"03XKNB\", color: \"#36abee\" }, { text: \"07KPTQ\", color: \"#ee3639\" }, { text: \"01BLP\", color: \"#914ad8\" }],\r\n valign: \"middle\",\r\n align: \"right\",\r\n width: 90,\r\n layout: \"y\",\r\n marker: {\r\n type: \"round\",\r\n // width:15,\r\n radius: 3\r\n }\r\n },\r\n eventRadius: 5,\r\n series: [\r\n {\r\n preset: \"column\",\r\n barWidth: 65,\r\n alpha: 1,\r\n value: \"#hd01#\",\r\n color: \"#4bbaa4\",\r\n item: {\r\n // radius: 3,\r\n // type: \"s\",\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#4bbaa4\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 01GTKT
Value: #hd01#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd02#\",\r\n color: \"#ee9e36\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ee9e36\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 02GTTT
Value: #hd02#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd03#\",\r\n color: \"#36abee\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#36abee\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 03XKNB
Value: #hd03#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#hd07#\",\r\n color: \"#ee3639\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#ee3639\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 07KPTQ
Value: #hd07#\"\r\n }\r\n },\r\n {\r\n alpha: 0.5,\r\n value: \"#bienlai#\",\r\n color: \"#914ad8\",\r\n item: {\r\n borderColor: \"#1777ef\",\r\n color: \"#ffffff\"\r\n },\r\n line: {\r\n color: \"#914ad8\",\r\n width: 2\r\n },\r\n tooltip: {\r\n template: \"Type: 01BLP
Value: #bienlai#\"\r\n }\r\n }\r\n ],\r\n url: app.config.host + \"/Invoice/bar_chart\"\r\n }\r\n // {\r\n // view: \"chart\",\r\n // type: \"bar\",\r\n // barWidth: 60,\r\n // // preset:\"column\",\r\n // radius: 2,\r\n // gradient: \"rising\",\r\n // xAxis: {\r\n // template: \"'#thang#\"\r\n // },\r\n // yAxis: {\r\n // start: 0,\r\n // step: 100,\r\n // end: 1000\r\n // },\r\n // legend: {\r\n // values: [{ text: \"01GTKT\", color: \"#58dccd\" }, { text: \"02GTTT\", color: \"#a7ee70\" }, { text: \"03XKNB\", color: \"#36abee\" }, { text: \"07KPTQ\", color: \"red\" }, { text: \"01BLP\", color: \"blue\" }],\r\n // valign: \"middle\",\r\n // align: \"right\",\r\n // width: 90,\r\n // layout: \"y\"\r\n // },\r\n // series: [\r\n // {\r\n // value: \"#hd01#\",\r\n // color: \"#58dccd\",\r\n // tooltip: {\r\n // template: \"#hd01#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd02#\",\r\n // color: \"#a7ee70\",\r\n // tooltip: {\r\n // template: \"#hd02#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd03#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#hd03#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#hd07#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#hd07#\"\r\n // }\r\n // },\r\n // {\r\n // value: \"#bienlai#\",\r\n // color: \"#36abee\",\r\n // tooltip: {\r\n // template: \"#bienlai#\"\r\n // }\r\n // }\r\n // ],\r\n // url: app.config.host + \"/Invoice/bar_chart\",\r\n // // data: multiple_dataset\r\n // },\r\n ]\r\n }\r\n // {\r\n // rows:\r\n // [\r\n // {\r\n // \"template\": \" Biểu đồ loại hóa đơn\",\r\n // \"css\": \"sub_title\",\r\n // \"height\": 30,\r\n // \"paddingX\": 0,\r\n // \"paddingY\": 10,\r\n // \"margin\": 0\r\n // },\r\n // {\r\n // view: \"chart\",\r\n // type: \"pie\",\r\n // value: \"#soluong#\",\r\n // color: \"#color#\",\r\n // //label: \"#loai#\",\r\n // borderless: true,\r\n // pieInnerText: \"#soluong#\",\r\n // shadow: 0,\r\n // //data: month_dataset,\r\n // url: app.config.host + \"/Invoice/bar_chart2\",\r\n // legend: {\r\n // // width: 75,\r\n // align: \"right\",\r\n // valign: \"middle\",\r\n // template: \"#loai#\"\r\n // }\r\n // }\r\n // ]\r\n\r\n // }\r\n\r\n ]\r\n }\r\n };\r\n\r\n});\ndefine('views/thongbaosso',[\"app\", \"locale\", \"views/forms/link_sso\"], function (app, _, linkSSO) {\r\n\tvar layout = {\r\n\t\tview: \"window\",\r\n\t\tmodal: true,\r\n\t\tid: \"notisso\",\r\n\t\tposition: \"center\",\r\n\t\thead: \"Thông báo\",\r\n\t\twidth: 800,\r\n\t\theight: 400,\r\n\t\tbody: {\r\n\t\t\tview: \"form\",\r\n\t\t\tid: \"notissobody\",\r\n\t\t\telements: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\trows: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\ttemplate: \"
\" +\r\n\t\t\t\t\t\t\t\t\"

Kính gửi Quý khách hàng

\" +\r\n\t\t\t\t\t\t\t\t\"
Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Sau khi hoàn thành liên kết, Quý khách có thể đăng nhập toàn bộ các hệ thống thuộc hệ sinh thái giải pháp của MobiFone bằng một tài khoản duy nhất.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Thời gian liên kết: Từ ngày 01/04/2024 đến 30/04/2024
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\",\r\n\t\t\t\t\t\t\tborderless: false,\r\n\t\t\t\t\t\t\theight: 200\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\ttemplate: \"
Liên kết ngay tại đây
\",\r\n\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\tvar win = this.$scope.ui(linkSSO.$ui);\r\n\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\theight: 50\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\t\t\ttemplate: \"Xem chi tiết hướng dẫn tại đây\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\t\t\tvalue: \"Đóng\",\r\n\t\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\tinitUI: function (json) {\r\n\t\t\treturn\r\n\t\t},\r\n\t};\r\n});\ndefine('views/forms/changeweakpass',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\", css: \"custom-window\",\r\n\t\t\thead: \"Thiết lập mật khẩu\",\r\n\t\t\tbody: {\r\n\t\t\t\tcss: \"custom-body\",\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"template\", template: \"Để tăng cường bảo mật cho hệ thống, quý khách vui lòng đặt mật khẩu mới.\", css: \"notify-text\"},\r\n\t\t\t\t\t{ view: \"template\", template: \"Chú ý: Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt.\", css: \"notify-text\"},\r\n\t\t\t\t\t{ view: \"text\", id:\"newpass\", name: \"newpass\", required: true, invalidMessage: \"Mật khẩu mới không được bỏ trống\", type: \"password\", label: \"Mật khẩu mới\", labelPosition: \"top\" , css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"newpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t// Password regex: at least 8 characters, including uppercase, lowercase, number, and special character\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// Show or hide the error message based on password validity\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view: \"text\", id:\"confirmpass\", name: \"confirmpass\", required: true, invalidMessage: \"Xác nhận mật khẩu không được bỏ trống\", type: \"password\", label: \"Xác nhận mật khẩu\", labelPosition: \"top\", css:\"custom-input\", icon: \"fa fa-eye\", \r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonItemClick: function (id, e) {\r\n\t\t\t\t\t\t\t\t// Kiểm tra xem người dùng có click vào biểu tượng không\r\n\t\t\t\t\t\t\t\tif (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n\t\t\t\t\t\t\t\t\tvar inputNode = $$(\"confirmpass\").getInputNode(); // Lấy node input\r\n\t\t\t\t\t\t\t\t\tvar inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t// Thay đổi loại input và biểu tượng tương ứng\r\n\t\t\t\t\t\t\t\t\tif (inputType === \"password\") {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"text\"; // Hiển thị mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinputNode.type = \"password\"; // Ẩn mật khẩu\r\n\t\t\t\t\t\t\t\t\t\twebix.html.removeCss(e.target, \"fa-eye-slash\");\r\n\t\t\t\t\t\t\t\t\t\twebix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tonBlur: function() {\r\n\t\t\t\t\t\t\t\tvar password = this.getValue();\r\n\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\t\t\t\t\t\t\t\tvar errorLabel = this.$view.querySelector(\".custom-error-label\");\r\n\t\t\t\t\t\t\t\tif (!errorLabel) {\r\n\t\t\t\t\t\t\t\t\terrorLabel = document.createElement(\"div\");\r\n\t\t\t\t\t\t\t\t\terrorLabel.className = \"custom-error-label\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.color = \"red\";\r\n\t\t\t\t\t\t\t\t\terrorLabel.style.marginTop = \"10px\";\r\n\t\t\t\t\t\t\t\t\tthis.$view.appendChild(errorLabel);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (passwordRegex.test(password)) {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"\"; // Clear error if valid\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\terrorLabel.innerText = \"Mật khẩu phải có ít nhất 8 ký tự, bao gồm chữ hoa, chữ thường, số và ký tự đặc biệt.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcss: \"custom-button\",\r\n\t\t\t\t\t\tmargin: 30,\r\n\t\t\t\t\t\tcols: [\t\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Lưu (F10)\", hotkey: \"F10\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tvar passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*\\W)[A-Za-z\\d\\W]{8,}$/;\r\n\r\n\t\t\t\t\t\t\t\t\tif (!passwordRegex.test(item.newpass) || !passwordRegex.test(item.confirmpass)) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu phải lớn hơn 8 ký tự, có chứa chữ hoa, chữ thường, số và ký tự đặc biệt!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.newpass != item.confirmpass) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mật khẩu mới không giống nhau\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/ChangeWeakPass\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Đổi mật khẩu thành công !\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar baseUrl = document.location.href;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (baseUrl.startsWith(\"file\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.storage.local.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tCookies.remove(\"appCookie\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dashboard',[\r\n //\"views/modules/dashline\",\r\n // \"views/modules/dashline78\",\r\n \"views/modules/dashline_license\",\r\n \"views/modules/dashline78_new\",\r\n \"views/modules/dashline_bienlai\",\r\n \"views/modules/dashline_chungtu\",\r\n // \"views/modules/data_invoice\",\r\n // \"views/menus/version\",\r\n \"views/modules/chart\",\r\n \"views/thongbaosso\",\r\n \"views/forms/changeweakpass\",\r\n \"app\",\r\n \"models/user\",\r\n], function (dashline_license, dashline78new, dashline_bienlai, dashline_chungtu, chart, thongbaosso,changeweakpass, app, user) {\r\n debugger;\r\n var cookie = user.getAppCookie();\r\n var noti = false;\r\n var notes = false;\r\n if (cookie.noti_sso ==\"1\") {\r\n noti = true;\r\n }\r\n if (cookie.notes_sso ==\"1\") {\r\n notes = true;\r\n }\r\n // if(cookie.is_weak_pass){\r\n // var win = webix.ui(changeweakpass.$ui);\r\n // win.show();\r\n // cookie.is_weak_pass = false;\r\n // Cookies.set(\"appCookie\", cookie);\r\n // }\r\n webix.$$(\"title\").parse({ title: \"Trang chủ\", details: \"Phân tích và thống kê\" });\r\n //var soluong = version.getWarning();\r\n var layout = {\r\n type: \"clean\",\r\n borderless: true,\r\n paddingX: 20,\r\n rows: [\r\n //dashline,\r\n { height: 15 },\r\n {\r\n view: \"template\",\r\n height: 40,\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n template:\r\n \"
\\n\",\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"clean\",\r\n hidden: !notes,\r\n rows: [\r\n {\r\n template: \"[THÔNG BÁO] Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone. Quý khách sẽ thực hiện liên kết tài khoản sử dụng với hệ thống Quản lý tài khoản tập trung SSO khi truy cập vào hệ thống từ ngày 22/04/2024\",\r\n height: 30,\r\n }\r\n ],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_license],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline78new],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_bienlai],\r\n },\r\n { height: 8 },\r\n {\r\n css: \"dash_invoice\",\r\n type: \"space\",\r\n rows: [dashline_chungtu],\r\n },\r\n // {\r\n // \tcols: [\r\n // \t\t{\r\n // \t\t\t// paddingX: 18,\r\n // \t\t\tcss: \"dash_invoice\",\r\n // \t\t\ttype: \"space\",\r\n // \t\t\trows: [chart]\r\n // \t\t},\r\n // \t\t{ width: 10 },\r\n // \t\t{\r\n // \t\t\t// paddingX: 30,\r\n // \t\t\tcss: \"dash_invoice\",\r\n // \t\t\ttype: \"space\",\r\n // \t\t\trows: []\r\n // \t\t}\r\n // \t]\r\n // }\r\n // chart,\r\n // {\r\n // \ttype: \"space\",\r\n // \trows: [\r\n // \t\t{\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\tinvoice,\r\n // \t\t\t\t//orders\r\n // \t\t\t]\r\n // \t\t},\r\n // \t\t/* {\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\tmessages,\r\n // \t\t\t\trevenue\r\n // \t\t\t]\r\n // \t\t},\r\n // \t\t{\r\n // \t\t\ttype: \"wide\",\r\n // \t\t\tcols: [\r\n // \t\t\t\ttasks,\r\n // \t\t\t\tmap\r\n // \t\t\t]\r\n // \t\t} */\r\n // \t]\r\n // }\r\n ],\r\n };\r\n\r\n var form_filter = {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n id: \"lkdlieu\",\r\n name: \"lkdlieu\",\r\n view: \"combo\",\r\n css: { \"border-radius\": \"20px\" },\r\n width: 100,\r\n height: 30,\r\n value: \"T\",\r\n options: [\r\n { id: \"T\", value: \"Tháng\" },\r\n { id: \"N\", value: \"Năm\" },\r\n ],\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv === \"T\") {\r\n $$(\"thoigian_thang\").show();\r\n $$(\"thoigian_thang\").setValue(new Date());\r\n $$(\"thoigian_nam\").hide();\r\n }\r\n else {\r\n $$(\"thoigian_thang\").hide();\r\n $$(\"thoigian_nam\").show();\r\n $$(\"thoigian_nam\").setValue(new Date());\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"datepicker\", css: { \"border-radius\": \"20px\" }, id: \"thoigian_thang\", format: \"%m-%Y\", width: 100, height: 30, type: \"month\", on: {\r\n onChange: function (newv, oldv) {\r\n var date = new Date(newv.getFullYear(), newv.getMonth(), 1);\r\n const lastday = new Date(new Date(newv.getFullYear(), newv.getMonth() + 1, 1) - 1);\r\n var format = webix.Date.dateToStr(\"%Y.%m.%d\");\r\n\r\n $$(\"thoigian_thang\").disable();\r\n $$(\"thoigian_nam\").disable();\r\n\r\n var loadUrl_HD = app.config.host + \"/Invoice68/DashboardTiles78New?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline78_new\").load(loadUrl_HD).then(function (data) {\r\n $$(\"thoigian_thang\").enable();\r\n $$(\"thoigian_nam\").enable();\r\n });;\r\n\r\n var loadUrl_BL = app.config.host + \"/Invoice68/DashboardTiles_BienLai?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_bienlai\").load(loadUrl_BL);\r\n\r\n var loadUrl_CT = app.config.host + \"/Invoice68/DashboardTiles_ChungTu?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_chungtu\").load(loadUrl_CT);\r\n },\r\n },\r\n },\r\n {\r\n view: \"datepicker\", id: \"thoigian_nam\", hidden: true, format: \"%Y\", width: 100, height: 30, type: \"year\", on: {\r\n onChange: function (newv, oldv) {\r\n var date = new Date(newv.getFullYear(), 0, 1);;\r\n const lastday = new Date(new Date(newv.getFullYear() + 1, 0, 1) - 1);\r\n var format = webix.Date.dateToStr(\"%Y.%m.%d\");\r\n\r\n $$(\"thoigian_thang\").disable();\r\n $$(\"thoigian_nam\").disable();\r\n\r\n var loadUrl_HD = app.config.host + \"/Invoice68/DashboardTiles78New?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline78_new\").load(loadUrl_HD).then(function (data) {\r\n $$(\"thoigian_thang\").enable();\r\n $$(\"thoigian_nam\").enable();\r\n });\r\n\r\n var loadUrl_BL = app.config.host + \"/Invoice68/DashboardTiles_BienLai?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_bienlai\").load(loadUrl_BL);\r\n\r\n var loadUrl_CT = app.config.host + \"/Invoice68/DashboardTiles_ChungTu?from=\" + format(date) + \"&to=\" + format(lastday);\r\n $$(\"dashline_chungtu\").load(loadUrl_CT);\r\n },\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var item = {\r\n command: \"NOTYFI_INV_TEMP\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n \r\n if(cookie.is_weak_pass){\r\n var win = webix.ui(changeweakpass.$ui);\r\n win.show();\r\n cookie.is_weak_pass = false;\r\n Cookies.set(\"appCookie\", cookie);\r\n } \r\n\r\n if (noti) {\r\n var winthongbaosso = $scope.ui(thongbaosso.$ui);\r\n winthongbaosso.show();\r\n }\r\n\r\n webix.ui({\r\n container: \"filter_dulieu\",\r\n view: \"layout\",\r\n rows: [\r\n form_filter\r\n ]\r\n });\r\n\r\n $$(\"thoigian_thang\").setValue(new Date());\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết hóa đơn :\";\r\n for (var i = 0; i < res.length; i++) {\r\n mess = mess + \"mẫu số: \" + res[i].template_code + \" ký hiệu: \" + res[i].invoice_series;\r\n // + res[i].quantity;\r\n }\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n var item1 = {\r\n command: \"NOTYFI_INV_TEMP_78\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item1, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết hóa đơn 78:
\";\r\n for (var i = 0; i < res.length; i++) {\r\n mess = mess + \" ký hiệu: \" + res[i].ky_hieu + \"
\";\r\n // + res[i].quantity;\r\n }\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n var item3 = {\r\n command: \"NOTYFI_LICENSE_EXPIRE\",\r\n parameter: {\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", item3, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.length > 0 && res != null) {\r\n var mess = \"Thông báo sắp hết license: Số lượng license còn lại là: \" + res[0].remaining;\r\n webix.message(mess, \"debug\", 5000);\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/getHansudungcert?username=\" + user.getCurrentUser(), function (text) {\r\n var res = JSON.parse(text);\r\n var checked = false;\r\n\r\n if (res.length > 0 && res != null) {\r\n var message = \"Thông báo sắp hết hạn CKS:
\";\r\n\r\n for (var i = 0; i < res.length; i++) {\r\n var datecert = new Date(res[i].end_date);\r\n var convertcert = datecert.getFullYear() + \"-\" + (datecert.getMonth() + 1) + \"-\" + datecert.getDate();\r\n var checkdatecert = new Date(convertcert);\r\n var datenow = new Date();\r\n var convernow = datenow.getFullYear() + \"-\" + (datenow.getMonth() + 1) + \"-\" + datenow.getDate();\r\n var checkdatenow = new Date(convernow);\r\n var ngayhethan = parseInt((checkdatecert.getTime() - checkdatenow.getTime()) / (24 * 3600 * 1000));\r\n\r\n if (ngayhethan < 31 && ngayhethan >= 0) {\r\n message += \"Serial: \" + res[i].cer_serial + \" sắp hết hạn
\";\r\n checked = true;\r\n }\r\n }\r\n if (checked) {\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/CheckHSDChungTu\", function (text) {\r\n var res = JSON.parse(text);\r\n var message;\r\n if (res.length > 0 && res.length != null) {\r\n var checkdate = new Date(res[0].lisence_to);\r\n var datenow = new Date();\r\n var convernow = datenow.getFullYear() + \"-\" + (datenow.getMonth() + 1) + \"-\" + datenow.getDate();\r\n var checkdatenow = new Date(convernow);\r\n var ngayhethan = parseInt((checkdate.getTime() - checkdatenow.getTime()) / (24 * 3600 * 1000));\r\n if (ngayhethan < 61 && ngayhethan > 0) {\r\n message = \"Thông báo sắp hết hạn sử dụng gói chứng từ TNCN:
\";\r\n webix.message(message, \"debug\", 5000);\r\n } else if (ngayhethan < 0) {\r\n message = \"Thông báo đã hết hạn sử dụng gói chứng từ TNCN\";\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n }\r\n });\r\n webix.ajax().get(app.config.host + \"/Invoice68/getPromotionNews\", function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.length > 0 && res != null) {\r\n for (var i = 0; i < res.length; i++) {\r\n var message = res[i].content;\r\n webix.message(message, \"success\", 10000);\r\n }\r\n }\r\n });\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/CheckGoiDemo\", function (text) {\r\n var res = JSON.parse(text);\r\n\r\n var now = new Date();\r\n var date = new Date('2024-02-16');\r\n\r\n if (res && now < date) {\r\n message = \"Gói cước của Quý khách sẽ hết hạn vào ngày 15/02/2024, vui lòng liên hệ AM hoặc tổng đài 093.611.0116 để được hỗ trợ.
\";\r\n webix.message(message, \"debug\", 5000);\r\n }\r\n\r\n });\r\n\r\n\r\n //console.log(soluong);\r\n // if (soluong.length > 0 && soluong != null) {\r\n // \tvar mess = \"Thông báo :\"\r\n // \tfor (var i = 0; i < soluong.length; i++) {\r\n // \t\tmess = mess + soluong[i].thongbao;\r\n // \t}\r\n // \twebix.message(mess, \"debug\", 5000);\r\n // }\r\n },\r\n };\r\n});\r\n\ndefine('views/DataStorage/DataHoaDon78',[\"app\"], function (app) {\r\n\r\n var data = {\r\n };\r\n \r\n return {\r\n SetData: function(key, value) {\r\n data[key] = value; \r\n },\r\n GetData: function(key) {\r\n return data[key];\r\n },\r\n ClearData: function(keys) {\r\n if(keys) {\r\n var listKey = keys.split(\";\");\r\n if(listKey && listKey.length > 0) {\r\n listKey.forEach(function(element) {\r\n data[element] = null;\r\n });\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\ndefine('views/forms/dmfield',[\"app\"], function (app) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmfield-win\",\r\n position: \"center\",\r\n head: \"Thông tin Field\",\r\n fullscreen: true,\r\n body: {\r\n view: \"scrollview\",\r\n scroll: \"native-y\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 150 },\r\n view: \"form\",\r\n id: \"dmfield-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n { view: \"text\", name: \"ord\", label: \"STT\", id: \"dmfield-id\" },\r\n { view: \"text\", name: \"column_name\", label: \"Column Name\", id: \"dmfield-name\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"row\", label: \"Row\", id: \"dmfield-row\" },\r\n { view: \"text\", name: \"col\", label: \"Col\", id: \"dmfield-col\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"width\", label: \"Width\", id: \"dmfield-width\" },\r\n { view: \"text\", name: \"height\", label: \"Height\", id: \"dmfield-height\" },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"column_width\", label: \"Column Width\", id: \"dmfield-columnwidth\" },\r\n { view: \"text\", name: \"column_alias\", label: \"Column alias\" },\r\n ],\r\n },\r\n { view: \"text\", name: \"default_value\", label: \"DEFAULT VALUE\" },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"column_type\",\r\n label: \"Column Type\",\r\n id: \"dmfield-columntype\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetTypeSQL\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetTypeSQL\"\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"type_editor\",\r\n label: \"TYPE EDITOR\",\r\n id: \"dmfield-typeeditor\",\r\n suggest: {\r\n body: {\r\n data: [\r\n \"text\",\r\n \"combo\",\r\n \"checkbox\",\r\n \"datepicker\",\r\n \"autonumeric\",\r\n \"treesuggest\",\r\n \"gridsuggest\",\r\n \"gridcombo\",\r\n \"textarea\",\r\n \"multiselect\",\r\n \"select\",\r\n \"ckeditor\",\r\n \"password\",\r\n \"search\",\r\n \"popup\",\r\n ],\r\n },\r\n },\r\n //options: [\"text\", \"combo\", \"checkbox\", \"datepicker\", \"autonumeric\", \"treesuggest\", \"gridsuggest\", \"gridcombo\", \"textarea\", \"multiselect\", \"ckeditor\", \"password\",\"search\"]\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"data_width\",\r\n label: \"Data Width\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"data_decimal\",\r\n label: \"Data decimal\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", name: \"label_width\", label: \"Label Width\", id: \"dmfield-labelwidth\" },\r\n { view: \"combo\", name: \"label_position\", options: [\"left\", \"top\", \"right\", \"bottom\"], label: \"Label Position\", id: \"dmfield-labelposition\" },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"ref_id\",\r\n label: \"REF ID\",\r\n id: \"dmfield-refid\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\"\r\n },\r\n { view: \"text\", name: \"list_column\", label: \"LIST COLUMN\" },\r\n { view: \"text\", name: \"display_field\", label: \"DISPLAY_FIELD\" },\r\n { view: \"text\", name: \"format\", label: \"FORMAT\" },\r\n { view: \"text\", name: \"field_expression\", label: \"FIELD_EXPRESSION\" },\r\n { view: \"text\", name: \"css\", label: \"Css\" },\r\n { view: \"text\", name: \"template\", label: \"Template\" },\r\n { view: \"text\", name: \"styleinput\", label: \"Style Input\" },\r\n {\r\n view: \"combo\",\r\n name: \"space\",\r\n options: [\r\n { id: \"BEFORE\", value: \"Trước\" },\r\n { id: \"AFTER\", value: \"Sau\" },\r\n ],\r\n label: \"SPACE\",\r\n },\r\n { view: \"text\", name: \"caption\", label: \"CAPTION\" },\r\n { view: \"text\", name: \"read_only\", label: \"READONLY\" },\r\n {\r\n view: \"combo\",\r\n name: \"type_filter\",\r\n options: [\"textFilter\", \"serverFilter\", \"numberFilter\", \"datepickerFilter\", \"serverDateRangeFilter\", \"serverSelectFilter\", \"serverMultiSelectFilter\"],\r\n label: \"Type Filter\",\r\n id: \"dmfield-typefilter\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"value_filter\",\r\n label: \"VALUE FILTER\",\r\n id: \"dmfield-value_filter\",\r\n suggest: {\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\",\r\n },\r\n },\r\n //options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00004\"\r\n },\r\n { view: \"combo\", name: \"valid_rule\", options: [\"isNotEmpty\", \"isEmail\", \"isSpecialCharacter\", \"isTaxCode\"], label: \"Valid Rule\", id: \"dmfield-validrule\" },\r\n { view: \"text\", name: \"total_column\", label: \"Total Column\", id: \"dmfield-totalcolumn\" },\r\n { view: \"textarea\", height: 160, name: \"value_change\", label: \"VALUE_CHANGE\" },\r\n { view: \"textarea\", height: 160, name: \"value_suggest\", label: \"VALUE_SUGGEST\" },\r\n {\r\n cols: [\r\n { view: \"checkbox\", name: \"hide_in_grid\", label: \"HIDE_IN_GRID\", checkValue: \"true\", uncheckValue: \"false\", id: \"dmfield-hiddeningrid\" },\r\n { view: \"checkbox\", name: \"hidden\", label: \"Hidden\", checkValue: \"true\", uncheckValue: \"false\", id: \"dmfield-hidden\" },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmfield-form\");\r\n var item = form.getValues();\r\n var branch_code = $$(\"branch_code_field\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n \r\n var url = \"/WbField/Update\";\r\n\r\n webix.ajax().post(app.config.host + url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n item.id = data.id;\r\n webix.$$(\"dmfield-win\").close();\r\n app.callEvent(\"dataChanged\", [editmode, item]);\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 140,\r\n click: function () {\r\n webix.$$(\"dmfield-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n };\r\n});\r\n\ndefine('views/dmfield',[\r\n\t\"app\",\r\n\t\"views/forms/dmfield\",\r\n\t\"locale\"\r\n], function (app, dmfieldform, _) {\r\n\t\r\n\r\n\t//var windowno = app.path[1].params[0];\r\n\twebix.$$(\"title\").parse({ title: \"Điều khiển > Danh mục field\", details: \"Danh mục field system\" });\r\n\tvar submenu = webix.ui({\r\n\t\tview: \"submenu\",\r\n\t\twidth: 300,\r\n\t\tpadding: 0,\r\n\t\tdata: [\r\n\t\t\t{ id: \"importcolumns\", icon: \"fas fa-angle-right\", value: \"Tải cột\" },\r\n\t\t\t{ id: \"createtable\", icon: \"fas fa-angle-right\", value: \"Tạo bảng dữ liệu\" },\r\n\t\t\t{ id: \"createproccrud\", icon: \"fas fa-angle-right\", value: \"Tạo thủ tục (Thêm - Sửa - Xóa)\" },\r\n\t\t\t{ id: \"processstt\", icon: \"fas fa-angle-right\", value: \"Đánh lại số thứ tự\" }\r\n\t\t],\r\n\t\ton: {\r\n\t\t\tonItemClick: function (id, e, node) {\r\n\t\t\t\tif (id == \"importcolumns\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/InsertFieldsByTabId\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t.post(url, { id: tabId }, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"createtable\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/AutoCreateTable\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t.headers({ 'Content-type': 'application/x-www-form-urlencoded' })\r\n\t\t\t\t\t\t.post(url, \"id=\" + tabId, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"createproccrud\") {\r\n\r\n\t\t\t\t\tvar url = app.config.host + \"/System/AutoCreateCmd\";\r\n\t\t\t\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\r\n\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t//.headers({'Content-type':'application/x-www-form-urlencoded'})\r\n\t\t\t\t\t\t.post(url, \"id=\" + tabId, function (text) {\r\n\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\tloadData();\r\n\t\t\t\t\t\t\t\twebix.message(\"Đã thực hiện xong\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (id == \"processstt\") {\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar numberRow = table.count();\r\n\r\n\t\t\t\t\tvar url = \"/WbField/Update\";\r\n\r\n\t\t\t\t\tfor (var i = 0; i < numberRow; i++) {\r\n\t\t\t\t\t\tvar id = table.getIdByIndex(i);\r\n\t\t\t\t\t\tvar item = table.getItem(id);\r\n\r\n\t\t\t\t\t\titem.stt = i + 1;\r\n\r\n\t\t\t\t\t\twebix.ajax().post(app.config.host + url, item, function (text) {\r\n\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\twebix.$$(\"dmfieldData\").updateItem(item.id, item);\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tvar controls = [\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Thêm (F4)\" + '',\r\n\t\t\tid: \"btnPlus\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-plus\",\r\n\t\t\t// label: \"Thêm (F4)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 90,\r\n\t\t\tshortcut: \"F4\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar win = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tif (webix.$$(\"txtTabId\").getValue() == \"\") {\r\n\t\t\t\t\t\twebix.message(\"Bạn chưa chọn Tab Id\")\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\twb_tab_id: $$(\"txtTabId\").getValue()\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(1);\r\n\t\t\t\t\twin.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Sửa (F3)\" + '',\r\n\t\t\tid: \"btnEdit\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-edit\",\r\n\t\t\t// label: \"Sửa (F3)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 60,\r\n\t\t\tshortcut: \"F3\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar detailForm = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(2);\r\n\t\t\t\t\tdetailForm.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Xóa (F8)\" + '',\r\n\t\t\tid: \"btnDelete\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-trash-o\",\r\n\t\t\t// label: \"Xóa (F8)\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 80,\r\n\t\t\tshortcut: \"F8\",\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\t\t\t\t\tvar branch_code = $$(\"branch_code_field\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twebix.confirm({\r\n\t\t\t\t\t\ttext: \"Bạn có muốn xóa \" + item.column_name, ok: \"Có\", cancel: \"Không\",\r\n\t\t\t\t\t\tcallback: function (res) {\r\n\t\t\t\t\t\t\tif (res) {\r\n\t\t\t\t\t\t\t\twebix.ajax().post(app.config.host + \"/WbField/Delete\", item, function (text, xml, xhr) {\r\n\t\t\t\t\t\t\t\t\tif (text.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(text.error);\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\ttable.remove(item.id);\r\n\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 100,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Sao chép\" + '',\r\n\t\t\tid: \"btnCopy\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-files-o\",\r\n\t\t\t// label: \"Sao chép\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 85,\r\n\t\t\ton: {\r\n\t\t\t\tonClick: function () {\r\n\t\t\t\t\tvar detailForm = this.$scope.ui(dmfieldform.$ui);\r\n\t\t\t\t\tvar form = webix.$$(\"dmfield-form\");\r\n\r\n\t\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\t\tvar item = table.getSelectedItem();\r\n\r\n\t\t\t\t\tif (item == null) {\r\n\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn mục field\" });\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.id = null;\r\n\t\t\t\t\tform.setValues(item);\r\n\r\n\t\t\t\t\tdmfieldform.setEditMode(1);\r\n\t\t\t\t\tdetailForm.show();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tclick: function () {\r\n\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tview: \"button\", type: \"htmlbutton\", width: 110,\r\n\t\t\tlabel: ' ' +\r\n\t\t\t'' + \"Chức năng\" + '',\r\n\t\t\tid: \"btnChucNang\",\r\n\t\t\t// view: \"button\",\r\n\t\t\t// type: \"icon\",\r\n\t\t\t// icon: \"fas fa-angle-down\",\r\n\t\t\t// label: \"Chức năng\",\r\n\t\t\t// css: \"webix_secondary\",\r\n\t\t\t// width: 100,\r\n\t\t\tclick: function () {\r\n\t\t\t\tsubmenu.show(webix.$$(\"btnChucNang\").$view);\r\n\t\t\t}\r\n\t\t},\r\n\t\t{},\r\n\t\t{\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_field\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: _(\"Đơn vị\"),\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_field\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n\t\t\t\t\t\t\t\t\tvar tab = webix.$$(\"txtTabId\").getPopup().getList();\r\n\t\t\t\t\t\t\t\t\tif(tab) {\r\n\t\t\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbTab/All?branch_code=\" + first);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\tvar tabCombo = webix.$$(\"txtTabId\");\r\n\t\t\t\t\t\t\tvar tab = tabCombo.getPopup().getList();\r\n\t\t\t\t\t\t\tif(tab && newv != null && newv != '') {\r\n\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\ttabCombo.setValue(null);\r\n\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbTab/All?branch_code=\" + newv, function() {\r\n var table = webix.$$(\"dmfieldData\");\r\n table.clearAll();\r\n });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t},\r\n\t\t{},\r\n\t\t{\r\n\t\t\tview: \"combo\",\r\n\t\t\twidth: 400,\r\n\t\t\tlabel: \"Tab ID\",\r\n\t\t\tid: \"txtTabId\",\r\n\t\t\toptions: {\r\n\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\tid: \"grid_tab\",\r\n\t\t\t\ttemplate: \"#name#\",\r\n\t\t\t\twidth: 550,\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tscroll: true,\r\n\t\t\t\t\tautoheight: false,\r\n\t\t\t\t\tcolumns: [\r\n\t\t\t\t\t\t{ id: \"code\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n\t\t\t\t\t\t{ id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 }\r\n\t\t\t\t\t],\r\n\t\t\t\t\t// url: app.config.host + \"/WbTab/All\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\ton: {\r\n\t\t\t\tonChange: function () {\r\n\t\t\t\t\tloadData();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t];\r\n\r\n\tvar grid = {\r\n\t\trows: [\r\n\t\t\t{\r\n\t\t\t\tid: \"dmfieldData\",\r\n\t\t\t\tview: \"datatable\",\r\n\t\t\t\tselect: true,\r\n\t\t\t\tresizeColumn: true,\r\n\t\t\t\tdatafetch: 2,\r\n\t\t\t\tloadahead: 15,\r\n\t\t\t\tdrag: true,\r\n\t\t\t\ton: {\r\n\t\t\t\t\tonItemDblClick: function (id, e, node) {\r\n\t\t\t\t\t\tvar btnEdit = $$(\"btnEdit\");\r\n\t\t\t\t\t\tbtnEdit.callEvent(\"onClick\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcolumns: [\r\n\t\t\t\t\t{ id: \"wb_tab_id\", header: \"Tab Id\", width: 100, hidden: true },\r\n\t\t\t\t\t{ id: \"ord\", header: \"STT\", width: 75 },\r\n\t\t\t\t\t{ id: \"column_name\", header: \"Column Name\", width: 150 },\r\n\t\t\t\t\t{ id: \"row\", header: \"Row\", width: 60 },\r\n\t\t\t\t\t{ id: \"col\", header: \"Col\", width: 60 },\r\n\t\t\t\t\t{ id: \"width\", header: \"Width\", width: 80 },\r\n\t\t\t\t\t{ id: \"column_width\", header: \"Column Width\", width: 150 },\r\n\t\t\t\t\t{ id: \"column_type\", header: \"Column Type\", width: 150 },\r\n\t\t\t\t\t{ id: \"label_width\", header: \"Label Width\", width: 150 },\r\n\t\t\t\t\t{ id: \"label_position\", header: \"Label Position\", width: 150 },\r\n\t\t\t\t\t{ id: \"space\", header: \"SPACE\", width: 150 },\r\n\t\t\t\t\t{ id: \"type_editor\", header: \"TYPE EDITOR\", width: 150 },\r\n\t\t\t\t\t{ id: \"ref_id\", header: \"REF ID\", hidden: true, width: 150 },\r\n\t\t\t\t\t{ id: \"default_value\", header: \"Default Value\", width: 250 },\r\n\t\t\t\t\t{ id: \"hide_in_grid\", header: \"HIDE_IN_GRID\", width: 120, checkValue: true, uncheckValue: false, template: \"{common.rcheckbox()}\" },\r\n\t\t\t\t\t{ id: \"hidden\", header: \"Hidden\", width: 80, checkValue: true, uncheckValue: false, template: \"{common.rcheckbox()}\" }\r\n\t\t\t\t],\r\n\t\t\t\t//columns: columns\r\n\t\t\t\tpager: \"pagerA\",\r\n\t\t\t\ttype: {\r\n\t\t\t\t\trcheckbox: function (obj, common, value, config) {\r\n\t\t\t\t\t\tvar checked = (value == config.checkValue) ? 'checked=\"true\"' : '';\r\n\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tid: \"pagerA\",\r\n\t\t\t\tview: \"pager\",\r\n\t\t\t\tsize: 50,\r\n\t\t\t\tgroup: 5,\r\n\t\t\t\t// animate: { direction:\"top\" },\r\n\t\t\t\ttemplate: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n\r\n\tvar layout = {\r\n\t\tcss: \"frmView\",\r\n\t\trows: [\r\n\t\t\t{\r\n\t\t\t\theight: 39,\r\n\t\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\t\ttype: \"toolbar\",\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tborderless: true,\r\n\t\t\t\tcols: controls\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trows: [\r\n\t\t\t\t\tgrid\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\r\n\r\n\t\t]\r\n\r\n\t};\r\n\r\n\tfunction loadData() {\r\n\t\tvar tabId = webix.$$(\"txtTabId\").getValue();\r\n\t\tif(tabId != null && tabId != \"\") {\r\n\t\t\tvar branch_code = $$(\"branch_code_field\").getValue(); \r\n\t\t\tvar url = app.config.host + \"/WbField/GetFieldsByTabId?id=\" + tabId + \"&branch_code=\" + branch_code;\r\n\t\r\n\t\t\twebix.ajax().get(url, function (text) {\r\n\t\t\t\tvar json = JSON.parse(text);\r\n\t\r\n\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\t\t\t\ttable.clearAll();\r\n\t\r\n\t\t\t\tfor (var i = 0; i < json.length; i++) {\r\n\t\t\t\t\tvar item = json[i];\r\n\t\r\n\t\t\t\t\t/* if (item.hidden!=null){\r\n\t\t\t\t\t\titem.hidden = item.toString();\r\n\t\t\t\t\t} */\r\n\t\t\t\t}\r\n\t\r\n\t\t\t\ttable.parse(json);\r\n\t\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\t$oninit: function (view, $scope) {\r\n\t\t\t$scope.on(app, \"dataChanged\", function (mode, item) {\r\n\r\n\t\t\t\tvar table = webix.$$(\"dmfieldData\");\r\n\r\n\t\t\t\tif (mode == 1) {\r\n\t\t\t\t\ttable.add(item);\r\n\t\t\t\t\t//table.select(item.iddmfield,false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (mode == 2) {\r\n\t\t\t\t\tvar selectedItem = table.getSelectedItem();\r\n\t\t\t\t\ttable.updateItem(selectedItem.id, item);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n});\ndefine('views/dmhv',[\"app\", \"views/forms/window\"], function (app, dmhvform) {\r\n \r\n\r\n //var hvno = app.path[1].params[0];\r\n var col = [];\r\n var url = app.config.host + \"/api/System/GetAllByWindowId?id=09a8b24b-52b5-46a6-931d-d6f005da0dd7\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n //console.log(Object.keys(rp).length);\r\n\r\n for (var j = 0; j < Object.keys(rp[\"data\"][0][\"Tabs\"][0][\"Fields\"]).length; j++) {\r\n col.push({ header: \"\" + String(rp[\"data\"][0][\"Tabs\"][0][\"Fields\"][j][\"COLUMN_NAME\"]) + \"\", fillspace: true });\r\n }\r\n $$(\"windowData\").define(\"columns\", col);\r\n $$(\"windowData\").refresh();\r\n\r\n // console.log(col);\r\n // console.log(Object.keys(rp.data).length);\r\n });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"plus\",\r\n label: \"Thêm\",\r\n width: 110,\r\n css: \"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmhvform.$ui);\r\n dmhvform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"edit\",\r\n label: \"Sửa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmhvform.$ui);\r\n var form = webix.$$(\"window-form\");\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmhvform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"trash-o\",\r\n label: \"Xóa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.ten_hv,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/api/Dmhv/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n margin: 10,\r\n rows: [\r\n {\r\n id: \"dmhvData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n // url: {\r\n // $proxy:true,\r\n // load:function(view, callback, params){\r\n // var url = app.config.host+ \"/api/dmhv/All\";\r\n\r\n // webix.ajax(url, callback, view);\r\n // }\r\n // },\r\n columns: col,\r\n // {id: \"ma_hv\", header: \"Mã hàng\" , width: 100 },\r\n // {id: \"ten_hv\", header: \"Tên hàng\" , fillspace: true },\r\n // {id: \"dvt\", header: \"Đơn vị tính\" , fillspace: true }\r\n // {id: \"quai\", header: \"Quai\", width:80},\r\n // {id: \"mau\", header: \"Màu sắc\", width:80},\r\n // {id: \"doday\", header: \"Độ dày\", width:80},\r\n // {\r\n // id: \"gia_ban\", header: \"Giá bán\", width:80 ,\r\n // format:webix.Number.numToStr({\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // decimalDelimiter:\".\",\r\n // decimalSize:0\r\n // }),\r\n // css:{'text-align':'right'}\r\n // }\r\n // ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n type: \"space\",\r\n rows: [\r\n {\r\n height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmhvData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmhv,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmlanguage',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin ngôn ngữ\",\r\n\t\t\twidth: 400,\r\n\t\t\theight: 250,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 20,\r\n\t\t\t\tpaddingX: 30,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", name: \"wb_lang_id\", label: \"wb_lang_id\", id: \"wb_lang_id\", hidden: true },\r\n\t\t\t\t\t{ view: \"text\", name: \"key_lang\", label: \"Key\", id: \"dmtab-name\" },\r\n\t\t\t\t\t{ view: \"textarea\", name: \"value_lang\", label: \"Value\", id: \"dmtab-table\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t//console.log(item);\r\n\t\t\t\t\t\t\t\t\t\tvar url = editmode == 1 ? app.config.host + \"/System/InsertLanguages\" : app.config.host + \"/System/UpdateLanguages\"\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmlanguage',[\"app\", \"views/forms/dmlanguage\", \"locale\"], function (app, dmtabform, _) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var table = webix.$$(\"dmtabData\");\r\n // table.clearAll();\r\n\r\n // table.load(loadData());\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 90,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n if (webix.$$(\"txtWindowId\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn loại ngôn ngữ !\", \"error\");\r\n return;\r\n }\r\n\r\n var item = {\r\n language_code: $$(\"txtWindowId\").getValue(),\r\n };\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa ! \", \"error\");\r\n return;\r\n }\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n width: 80,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.key_lang,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/System/DeleteLanguages\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n view: \"combo\",\r\n width: 300,\r\n label: \"Ngôn ngữ\",\r\n id: \"txtWindowId\",\r\n // options: [\"en\", \"vi\"],\r\n suggest: {\r\n // body: {\r\n // url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00012\"\r\n // }\r\n data: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" },\r\n ],\r\n },\r\n on: {\r\n onChange: function () {\r\n loadData();\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmtabData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"wb_lang_id\", header: \"wb_lang_id\", hidden: true },\r\n { id: \"language_code\", header: \"LANGUAGES\", hidden: true },\r\n { id: \"key_lang\", header: [\"Key\", { content: \"textFilter\" }], width: 200 },\r\n { id: \"value_lang\", header: [\"Value\", { content: \"textFilter\" }], fillspace: true },\r\n ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var windowId = webix.$$(\"txtWindowId\").getValue();\r\n var url = app.config.host + \"/System/GetLanguagesByMa?lang=\" + windowId;\r\n\r\n webix.ajax().get(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n table.parse(json);\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmtabData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmtab,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmreferences',[\"app\"],function(app){\r\n\tvar editmode = 0;\t\r\n\r\n\treturn {\t\t\r\n\t\t$ui:{ \r\n\t\t\tview:\"window\", modal:true, id:\"dmwindow-win\", position:\"center\",\r\n\t\t\thead:\"Thông tin Window\",\r\n\t\t\tfullscreen:true,\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 100}, \r\n view:\"form\", \r\n\t\t\t\tid:\"dmwindow-form\", \r\n\t\t\t\tcomplexData:true,\r\n\t\t\t\tmargin:0,\r\n elements:[\r\n\t\t\t\t\t{ view:\"text\", name:\"REFERENCES_ID\", label:\"RF ID\", id:\"dmwindow-rfid\"},\r\n { view:\"text\", name:\"NAME\", label:\"Name\", id:\"dmwindow-name\"},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t{ view:\"text\", name:\"VALUE_FIELD\", label:\"Value Field\", id:\"dmwindow-valuefield\"},\r\n\t\t\t\t\t\t\t{ view:\"text\", name:\"DISPLAY_FIELD\", label:\"Display Field\", id:\"dmwindow-displayfield\"},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{ view:\"combo\", name:\"TYPE\", label:\"TYPE\", options:[ \"List\", \"SQL\" ], id:\"dmwindow-type\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"SQL\", label:\"SQL\", id:\"dmwindow-sql\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"LIST_VALUE\", label:\"LIST VALUE\", id:\"dmwindow-listvalue\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"LIST_COLUMN\", label:\"LIST COLUMN\", id:\"dmwindow-listcolumn\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"FILTER_VALUE\", label:\"FILTER VALUE\", id:\"dmwindow-filtervalue\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"ORDER_BY\", label:\"ORDER BY\", id:\"dmwindow-orderby\"},\r\n\t\t\t\t\t{ view:\"text\", name:\"GHICHU\", label:\"Ghi chú\", id:\"dmwindow-ghichu\"},\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tview:\"combo\", \r\n\t\t\t\t\t\tname:\"WINDOW_ID\", \r\n\t\t\t\t\t\tlabel:\"WINDOW ID\", \r\n\t\t\t\t\t\tid:\"dmwindow-windowid\",\r\n\t\t\t\t\t\toptions: app.config.host + \"/api/System/GetDataByReferencesId?id=76DCF72E-7631-458A-986F-5B6D9BE9B203\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin:10,\r\n\t\t\t\t\t\tcols:[\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{ \r\n\t\t\t\t\t\t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", width:120, \r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function() {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmwindow-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\tconsole.log(item);\r\n\t\t\t\t\t\t\t\t\t\tif(editmode==1){\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/InsertReferences\", item, function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif(editmode==2){\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/UpdateReferences\", item, function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", width:120, \r\n\t\t\t\t\t\t\t\tclick:function(){\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\t\r\n\t\tsetEditMode: function(mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmreferences',[\"app\", \"views/forms/dmreferences\"], function (app, dmwindowform) {\r\n \r\n\r\n var op = [];\r\n var url = app.config.host + \"/api/System/getAllWindows\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n //console.log(Object.keys(rp).length);\r\n\r\n for (var i = 0; i < Object.keys(rp[\"data\"]).length; i++) {\r\n op.push({ ID: String(rp[\"data\"][i][\"ID\"]), WINDOW_NAME: String(rp[\"data\"][i][\"WINDOW_NAME\"]) });\r\n }\r\n console.log(op[0][\"WINDOW_NAME\"]);\r\n });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"plus\",\r\n label: \"Thêm\",\r\n width: 110,\r\n css: \"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"edit\",\r\n label: \"Sửa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmwindow-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n console.log(item);\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"iconButton\",\r\n icon: \"trash-o\",\r\n label: \"Xóa\",\r\n width: 100,\r\n css: \"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.WINDOW_NAME,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/api/System/DeleteReferences?id=\" + item.id, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n resizeColumn: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/api/System/GetAllReferences\";\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n columns: [\r\n { id: \"REFERENCES_ID\", header: \"RF ID\", width: 100 },\r\n { id: \"NAME\", header: \"Title\", width: 250 },\r\n { id: \"VALUE_FIELD\", header: \"Value Field\", width: 150 },\r\n { id: \"DISPLAY_FIELD\", header: \"Display Field\", width: 150 },\r\n { id: \"TYPE\", header: \"Type\", width: 100 },\r\n { id: \"SQL\", header: \"SQL\", width: 250 },\r\n { id: \"ORDER_BY\", header: \"ORDER BY\", width: 150 },\r\n { id: \"LIST_VALUE\", header: \"LIST VALUE\", width: 250 },\r\n { id: \"GHICHU\", header: \"GHI CHU\", width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 45,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmtab',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\tview: \"scrollview\",\r\n\t\t\t\tscroll: \"native-y\",\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\t\tview: \"form\",\r\n\t\t\t\t\tid: \"dmtab-form\",\r\n\t\t\t\t\tcomplexData: true,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\telements: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"code\", label: \"TAB ID\", id: \"dmtab-id\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"ord\", label: \"STT\", id: \"dmtab-stt\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"name\", label: \"Tab Name\", id: \"dmtab-name\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"table_name\", label: \"Tab Table\", id: \"dmtab-table\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\t\tname: \"tab_type\",\r\n\t\t\t\t\t\t\t\t\tlabel: \"TAB TYPE\",\r\n\t\t\t\t\t\t\t\t\toptions: [\"Normal\", \"Detail\", \"Master\"],\r\n\t\t\t\t\t\t\t\t\tid: \"dmtab-type\"\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\t\tname: \"tab_view\",\r\n\t\t\t\t\t\t\t\t\tlabel: \"TAB VIEW\",\r\n\t\t\t\t\t\t\t\t\toptions: [\"Grid\", \"Tree\"],\r\n\t\t\t\t\t\t\t\t\tid: \"dmtab-view\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"foreign_key\", label: \"FOREIGN KEY\", id: \"dmtab-FOREIGN-KEY\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"insert_cmd\", label: \"INSERT CMD\", id: \"dmtab-insert-cmd\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"update_cmd\", label: \"UPDATE CMD\", id: \"dmtab-update-cmd\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"delete_cmd\", label: \"DELETE CMD\", id: \"dmtab-delete-cmd\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"select_cmd\", label: \"SELECT CMD\", height: 60, id: \"dmtab-select-cmd\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"select_change\", label: \"SELECT CHANGE\", height: 150, id: \"dmtab-select-change\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"cell_editstop\", label: \"CELL EDITSTOP\", height: 150, id: \"dmtab-cell-editstop\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"after_addrow\", label: \"AFTER ADDROW\", height: 150, id: \"dmtab-afteraddrow\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"after_delrow\", label: \"AFTER DELROW\", height: 150, id: \"dmtab-afterdelrow\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", name: \"oncheck\", label: \"ON CHECK\", height: 150, id: \"dmtab-oncheck\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"prefix\", label: \"PREFIX\", id: \"dmtab-prefix\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"order_by\", label: \"ORDER BY\", id: \"dmtab-orderby\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmtab-form\");\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\tvar branch_code = $$(\"branch_code_tab\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/WbTab/Update\";\r\n\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmtab',[\"app\", \"views/forms/dmtab\"], function (app, dmtabform) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n // webix.$$(\"title\").parse({ title: \"Danh mục Tab\", details: \"Danh mục Tab system\" });\r\n webix.$$(\"title\").parse({ title: \"Điều khiển > Danh mục Tab\", details: \"Danh mục Tab system\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm (F4)\",\r\n css: \"webix_secondary\",\r\n width: 95,\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n if (webix.$$(\"txtWindowId\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn Window Id\");\r\n return;\r\n }\r\n\r\n var item = {\r\n wb_window_id: $$(\"txtWindowId\").getValue(),\r\n };\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n var branch_code = $$(\"branch_code_tab\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.tab_name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax().post(app.config.host + \"/WbTab/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n label: \"Sao chép\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmtabform.$ui);\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n var table = webix.$$(\"dmtabData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn mục tab\" });\r\n return;\r\n }\r\n\r\n item.id = null;\r\n form.setValues(item);\r\n\r\n dmtabform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_tab\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: \"Đơn vị\",\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_tab\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n\t\t\t\t\t\t\t\t\tvar tab = webix.$$(\"txtWindowId\").getPopup().getList();\r\n\t\t\t\t\t\t\t\t\tif(tab) {\r\n\t\t\t\t\t\t\t\t\t\ttab.clearAll(); \r\n\t\t\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbWindow/All?branch_code=\" + first);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n var tabCombo = webix.$$(\"txtWindowId\");\r\n\t\t\t\t\t\t\tvar tab = tabCombo.getPopup().getList();\r\n\t\t\t\t\t\t\tif(tab && newv != null && newv != '') {\r\n\t\t\t\t\t\t\t\ttab.clearAll(); \r\n tabCombo.setValue(null);\r\n\t\t\t\t\t\t\t\ttab.load(app.config.host + \"/WbWindow/All?branch_code=\" + newv, function() {\r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t},\r\n {},\r\n {\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Window ID\",\r\n id: \"txtWindowId\",\r\n options: {\r\n view: \"gridsuggest\",\r\n id: \"grid_window\",\r\n // filter: function (obj, value) {\r\n // var string = \"\";\r\n // if (obj) {\r\n // string += obj.id + \" \";\r\n // string += obj.window_name + \" \";\r\n\r\n // }\r\n // return string.toLowerCase().indexOf(value.toLowerCase()) >= 0;\r\n // },\r\n // template: function (item) {\r\n // return item.name + \" \";\r\n //},\r\n template: \"#name#\",\r\n width: 550,\r\n body: {\r\n scroll: true,\r\n autoheight: false,\r\n columns: [\r\n { id: \"code\", header: \"Window Id\", editor: \"text\", width: 100 },\r\n { id: \"name\", header: \"Window Name\", editor: \"text\", width: 400 },\r\n ],\r\n // url: app.config.host + \"/WbWindow/All\",\r\n },\r\n },\r\n // suggest: {\r\n // \turl: app.config.host + \"/WbWindow/All\",\r\n // \ttemplate: \"#window_name#\",\r\n // \tbody: {\r\n // \t\ttemplate: \"#window_name#\"\r\n // \t}\r\n // },\r\n on: {\r\n onChange: function () {\r\n loadData();\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmtabData\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n datafetch: 2,\r\n loadahead: 15,\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"ord\", header: \"STT\", width: 80 },\r\n { id: \"code\", header: \"Tab Id\", width: 80 },\r\n { id: \"wb_window_id\", header: \"Window Id\", hidden: true },\r\n { id: \"name\", header: \"Tab Name\", width: 250 },\r\n { id: \"table_name\", header: \"Tab Table\", width: 150 },\r\n { id: \"tab_type\", header: \"Tab Type\", width: 100 },\r\n { id: \"tab_view\", header: \"Tab View\", width: 100 },\r\n { id: \"foreign_key\", header: \"FOREIGN KEY\", width: 150 },\r\n { id: \"insert_cmd\", header: \"INSERT CMD\", width: 150 },\r\n { id: \"update_cmd\", header: \"UPDATE CMD\", width: 150 },\r\n { id: \"delete_cmd\", header: \"DELETE CMD\", width: 150 },\r\n { id: \"select_cmd\", header: \"SELECT CMD\", width: 150 },\r\n ],\r\n //columns: columns\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n height: 39,\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n type: \"toolbar\",\r\n margin: 0,\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadData() {\r\n var windowId = webix.$$(\"txtWindowId\").getValue();\r\n if(windowId != null && windowId != \"\") {\r\n var branch_code = $$(\"branch_code_tab\").getValue(); \r\n var url = app.config.host + \"/WbTab/GetTabsByWindowId?id=\" + windowId + \"&branch_code=\" + branch_code;\r\n \r\n webix.ajax().get(url, function (text) {\r\n var json = JSON.parse(text);\r\n \r\n var table = webix.$$(\"dmtabData\");\r\n table.clearAll();\r\n table.parse(json);\r\n });\r\n }\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmtabData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmtab,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/dmwindow',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmwindow-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Window\",\r\n\t\t\tfullscreen: true,\r\n\t\t\tbody: {\r\n\t\t\t\tview: \"scrollview\",\r\n\t\t\t\tscroll: \"native-y\",\r\n\t\t\t\tbody: {\r\n\t\t\t\t\tpaddingY: 10,\r\n\t\t\t\t\tpaddingX: 10,\r\n\t\t\t\t\telementsConfig: { labelWidth: 120 },\r\n\t\t\t\t\tview: \"form\",\r\n\t\t\t\t\tid: \"dmwindow-form\",\r\n\t\t\t\t\tcomplexData: true,\r\n\t\t\t\t\tmargin: 0,\r\n\t\t\t\t\telements: [\r\n\t\t\t\t\t\t{ view: \"text\", name: \"code\", label: \"WINDOW ID\", id: \"dmwindow-id\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"name\", label: \"Tittle\", id: \"dmwindow-name\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\tname: \"window_type\",\r\n\t\t\t\t\t\t\tlabel: 'Window Type',\r\n\t\t\t\t\t\t\tvalue: \"Grid\",\r\n\t\t\t\t\t\t\toptions: [\"Grid\", \"Detail\", \"MasterDetail\", \"Report\"],\r\n\t\t\t\t\t\t\tid: \"dmwindow-type\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"width\", label: \"Width\", id: \"dmwindow-width\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"height\", label: \"Height\", id: \"dmwindow-height\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"fix_left\", label: \"fix_left\", id: \"dmwindow-fix_left\", tooltip: \"Số dòng cố định bên trái\" },\r\n\t\t\t\t\t\t\t\t{ view: \"text\", name: \"fix_right\", label: \"fix_right\", id: \"dmwindow-fix_right\", tooltip: \"Số dòng cố định bên phải\" },\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"text\", name: \"max_row\", label: \"Rows max\", id: \"dmwindow-rowsmax\", tooltip: \"Số dòng lớn nhất của form\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"tab_row\", label: \"Row tab\", id: \"dmwindow-rowtab\", tooltip: \"Dòng bắt đầu của form chi tiết nếu có\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"voucher_code\", label: \"MA_CT\", id: \"dmwindow-mact\" },\r\n\t\t\t\t\t\t{ view: \"text\", name: \"sql_code\", label: \"SQL_CODE\", id: \"dmwindow-sqlcode\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\tname: \"wb_infowindow_id\",\r\n\t\t\t\t\t\t\tlabel: \"INFO WINDOW\",\r\n\t\t\t\t\t\t\tid: \"dmwindow-vcinfowindowid\",\r\n\t\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00028\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_new\", label: \"AFTER_NEW\", tooltip: \"Trước khi UI forms được tạo\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"before_save\", label: \"BEFORE_SAVE\", tooltip: \"Trước khi lưu dữ kiệu TO DO CODE\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_save\", label: \"AFTER_SAVE\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"detail_layout\", label: \"Layout Detail\", tooltip: \"Nếu triển khai UI ở đây thì không Auto UI\" },\r\n\t\t\t\t\t\t{ view: \"textarea\", height: 160, name: \"after_edit\", label: \"AFTER_EDIT\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"dmwindow-form\");\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\tvar branch_code = $$(\"branch_code_window\").getValue();\r\n if(item != null) {\r\n item[\"branch_code\"] = branch_code;\r\n }\r\n\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/WbWindow/Update\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t//console.log(data);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, item]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 140,\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\twebix.$$(\"dmwindow-win\").close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/dmwindow',[\"app\", \"views/forms/dmwindow\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n //webix.$$(\"title\").parse({ title: \"Danh mục window\", details: \"Danh mục window system\" });\r\n var controls = [\r\n {\r\n height: 38,\r\n id: \"title\",\r\n css: \"title\",\r\n width: 150,\r\n borderless: true,\r\n //css: { \"box-shadow\": \"0 -2px #3498db inset !important\" , \"background\":\"#ffffff !important\"},\r\n template: \"
#title#
\",\r\n data: { text: \"\", title: \"Danh mục window\", details: \"Danh mục window\" },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 95,\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"dmwindow-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n //console.log(item);\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n var branch_code = $$(\"branch_code_window\").getValue();\r\n\t\t\t\t\tif(item != null) {\r\n\t\t\t\t\t\titem[\"branch_code\"] = branch_code;\r\n\t\t\t\t\t}\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/WbWindow/Delete\", item, function (text, xml, xhr) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n label: _(\"COPY\"),\r\n width: 85,\r\n css: \"webix_secondary\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn sao chép \" + item.WINDOW_NAME,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var query = \"EXECUTE sproc_copy_vcwindow'\" + item.id + \"',null\";\r\n\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n webix.message(json[0][\"ERROR\"]);\r\n } else {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n\t\t\tid: \"paramDonvi\",\r\n\t\t\tview: \"toolbar\",\r\n\t\t\tcss: { \"background-color\": \"#f5f5f5 !important\" },\r\n\t\t\tborderless: true,\r\n\t\t\theight: 35,\r\n\t\t\tcols: [\r\n\t\t\t\t{\r\n\t\t\t\t\tid: \"branch_code_window\",\r\n\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\twidth: 600,\r\n\t\t\t\t\tlabel: _(\"Đơn vị\"),\r\n\t\t\t\t\toptions: {\r\n\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00195A\",\r\n\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\tvar count = this.count();\r\n\r\n\t\t\t\t\t\t\t\tif (count > 0) {\r\n\t\t\t\t\t\t\t\t\tvar combo = webix.$$(\"branch_code_window\");\r\n\t\t\t\t\t\t\t\t\tvar first = this.getFirstId();\r\n\t\t\t\t\t\t\t\t\tcombo.setValue(first);\r\n loadDmWindowData(first);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n loadDmWindowData(newv)\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t} \r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n // url: {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // debugger;\r\n // var url = app.config.host + \"/WbWindow/GetWindows\";\r\n\r\n // if (params == null) {\r\n // url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // } else {\r\n // url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n // var column = view.getColumnConfig(property);\r\n\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property],\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // }\r\n\r\n // webix.ajax(url, callback, view);\r\n // },\r\n // },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"code\", header: [\"No\", { content: \"textFilter\" }], width: 100 },\r\n { id: \"name\", header: [\"Title\", { content: \"textFilter\" }], width: 400 },\r\n { id: \"window_type\", header: \"Window Type\", fillspace: true },\r\n { id: \"width\", header: \"Width\", fillspace: true },\r\n { id: \"height\", header: \"Height\", fillspace: true },\r\n { id: \"max_row\", columnType: \"VC_TIEN\", header: [\"Rows max\", { content: \"textFilter\" }], fillspace: true },\r\n { id: \"tab_row\", header: \"Row tab\", fillspace: true },\r\n { id: \"voucher_code\", header: \"MA_CT\", fillspace: true },\r\n { id: \"sql_code\", header: \"SQL_CODE\", fillspace: true },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function loadDmWindowData(branch_code) {\r\n var dataTable = $$(\"dmwindowData\");\r\n \r\n // Chỉ gán URL khi cần tải\r\n dataTable.clearAll(); // Xóa dữ liệu cũ nếu cần\r\n dataTable.define(\"url\", {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/WbWindow/GetWindows\";\r\n \r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n \r\n if (params.filter != null) {\r\n var array = [];\r\n \r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n \r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n \r\n array.push(item);\r\n }\r\n \r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n url = url + \"&branch_code=\" + branch_code;\r\n webix.ajax(url, callback, view);\r\n }\r\n });\r\n }\r\n\r\n function loadData() {\r\n var schoolyearcode = webix.$$(\"dmwindow\").getValue();\r\n\r\n var url = app.config.host + \"/api/System/GetWindowById?ID=\" + schoolyearcode;\r\n\r\n webix.ajax().get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.parse(data);\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/duyethoadon',[\"app\"], function (app) {\r\n \r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"duyethoadon-win\", position: \"center\",\r\n head: \"Chi tiết hóa đơn\",\r\n height: 800,\r\n width: 5000,\r\n autoheight: false,\r\n body: {\r\n paddingY: 20,\r\n paddingX: 20,\r\n //elementsConfig:{labelWidth: 120}, \r\n view: \"form\",\r\n id: \"duyethoadon-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin hóa đơn\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n label: \"Ngày hóa đơn\",\r\n name: \"invoice_issued_date\",\r\n // name: \"date\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: webix.Date.dateToStr(\"%d/%m/%Y\")\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã mẫu hóa đơn\",\r\n name: \"template_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"invoice_series\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Số hóa đơn\",\r\n name: \"invoice_number\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n \r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Trạng thái\",\r\n name: \"status\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Hình thức thanh toán\",\r\n name: \"payment_method_name\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã tiền tệ\",\r\n name: \"currency_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tỷ giá\",\r\n name: \"exchange_rate\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"NH bên mua\",\r\n name: \"buyer_bank_account\",\r\n readonly: true,\r\n width: 600,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"TK bên mua\",\r\n name: \"buyer_bank_account\",\r\n readonly: true,\r\n width: 600,\r\n labelWidth: 150,\r\n },\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin khách hàng\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mã khách hàng\",\r\n name: \"customer_code\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n name: \"buyer_taxcode\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Email\",\r\n name: \"buyer_email\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Điện thoại\",\r\n name: \"buyer_tel\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n },\r\n \r\n ]\r\n },\r\n {\r\n cols: [{\r\n view: \"text\",\r\n label: \"Tên người mua\",\r\n name: \"buyer_display_name\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n }]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ\",\r\n name: \"buyer_address_line\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n },\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tên đơn vị\",\r\n name: \"buyer_legal_name\",\r\n readonly: true,\r\n width: 1200,\r\n labelWidth: 150,\r\n },\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n\r\n // {\r\n // view: \"fieldset\",\r\n // label: \"Chi tiết hóa đơn\",\r\n \r\n // },\r\n\r\n { \r\n borderless:true,\r\n scrollX:true,\r\n tabbar:{ \r\n \"width\":200\r\n },\r\n view:\"datatable\",\r\n id:\"detail\",\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n }\r\n },\r\n columns:[\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n width: 40,\r\n },\r\n {\r\n id: \"item_code\",\r\n name: \"item_code\",\r\n header: \"Mã hàng\",\r\n width: 150,\r\n editor: \"combo\",\r\n },\r\n {\r\n id: \"item_name\",\r\n name: \"item_name\",\r\n header: \"Tên hàng hóa\",\r\n width: 250,\r\n editor: \"text\"\r\n },\r\n {\r\n id: \"unit_code\",\r\n name: \"unit_code\",\r\n header: \"ĐVT\",\r\n width: 150,\r\n editor: \"combo\",\r\n },\r\n {\r\n id: \"quantity\",\r\n name: \"quantity\",\r\n header: \"Số lượng\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n {\r\n id: \"unit_price\",\r\n name: \"unit_price\",\r\n header: \"Đơn giá\",\r\n width: 120,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"total_amount_without_vat\",\r\n name: \"total_amount_without_vat\",\r\n header: \"Tiền trước thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"discount_percentage\",\r\n name: \"discount_percentage\",\r\n header: \"% CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"discount_amount\",\r\n name: \"discount_amount\",\r\n header: \"Tiền CK\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"tax_type\",\r\n name: \"tax_type\",\r\n header: \"% Thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"combo\",\r\n options: null\r\n },\r\n\r\n {\r\n id: \"vat_amount\",\r\n name: \"vat_amount\",\r\n header: \"Tiền thuế\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n\r\n {\r\n id: \"total_amount\",\r\n name: \"total_amount\",\r\n header: \"Tổng tiền\",\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: {\r\n \"text-align\": \"right\",\r\n },\r\n editor: \"autonumeric\",\r\n },\r\n ],\r\n data: [\r\n \r\n ],\r\n\r\n // load:function(view, params){\r\n // var data = webix.ajax().get(app.config.host + \"System/GetInvoiceDetail?id=\" + \"inv_invoiceauth_id\");\r\n // }\r\n },\r\n\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Tổng tiền trước thuế\",\r\n name: \"total_amount_without_vat\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tổng tiền CK\",\r\n name: \"discount_percentage\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tiền thuế\",\r\n name: \"vat_amount\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thành tiền\",\r\n name: \"total_amount\",\r\n readonly: true,\r\n width: 300,\r\n labelWidth: 150,\r\n format: \"1.111\",\r\n },\r\n ]\r\n },\r\n\r\n {},\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Đóng (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n click: function () {\r\n webix.$$(\"duyethoadon-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n\r\n };\r\n\r\n});\ndefine('views/duyethoadon',[\"app\", \"views/forms/duyethoadon\", \"locale\", \"views/modules/minvoiceplugin\", \"models/user\"], function (app, dmwindowform, _, plugin, user) {\r\n \r\n var windowno = app.path[1].params[0];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n $$(\"head-title\").show();\r\n }\r\n }\r\n });\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"], \"error\");\r\n } else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id,\r\n };\r\n //console.log(parameters);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS\r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].gia_tri == \"C\") {\r\n // var data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n }\r\n );\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function signOnServer(data, cert, server_cert) {\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"]);\r\n } else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id,\r\n };\r\n //console.log(parameters);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {},\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS\r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if(json[0].gia_tri == \"C\")\r\n // {\r\n // \tvar data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // \twebix.ajax()\r\n // \t\t.headers({ 'Content-type': 'application/json' })\r\n // \t\t.post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // \t\t\tvar data = JSON.parse(text);\r\n\r\n // \t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\r\n // \t\t\t}\r\n // \t\t\telse {\r\n // \t\t\t\twebix.message(data.error, \"error\");\r\n // \t\t\t}\r\n // \t\t});\r\n // }\r\n }\r\n );\r\n\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n var op = [];\r\n\r\n // webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n var controls = [\r\n {\r\n id: \"showPop\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fa fa-eye\",\r\n css: \"webix_secondary\",\r\n label: \"Chi tiết\",\r\n width: 100,\r\n\r\n //QuyenNH\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"duyethoadon-form\");\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n dmwindowform.setEditMode(2);\r\n\r\n item.invoice_issued_date = new Date(item.invoice_issued_date);\r\n\r\n // item.total_amount_without_vat = item.total_amount_without_vat ? item.total_amount_without_vat : 0;\r\n // item.total_amount_without_vat = webix.Number.format(item.total_amount_without_vat,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.discount_percentage = item.discount_percentage ? item.discount_percentage : 0;\r\n // item.discount_percentage = webix.Number.format(item.discount_percentage,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.vat_amount = item.vat_amount ? item.vat_amount : 0;\r\n // item.vat_amount = webix.Number.format(item.vat_amount,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n // item.total_amount = item.total_amount ? item.total_amount : 0;\r\n // item.total_amount = webix.Number.format(item.total_amount,{\r\n // groupDelimiter:\",\",\r\n // groupSize:3,\r\n // });\r\n\r\n form.setValues(item);\r\n detailForm.show();\r\n\r\n // QuyenNH: đẩy dữ liệu lên modal detail\r\n var tableDetail = $$(\"detail\");\r\n tableDetail.clearAll();\r\n tableDetail.load(app.config.host + \"/System/GetInvoiceDetail?id=\" + item.inv_invoiceauth_id);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: _(\"DUYET\") + \" (F10)\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var type = \"01\";\r\n\r\n if (app.path.length > 0) {\r\n if (typeof app.path[1].params[0] == \"undefined\") {\r\n type = \"01\";\r\n } else {\r\n type = app.path[1].params[0];\r\n }\r\n }\r\n if (type == \"01\") {\r\n webix.confirm({\r\n text: \"Bạn có muốn duyệt hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n DuyetHoaDon();\r\n }\r\n },\r\n });\r\n } else if (type == \"02\") {\r\n webix.confirm({\r\n text: \"Bạn có muốn sinh số hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n laySoHoaDon();\r\n }\r\n },\r\n });\r\n } else if (type == \"03\") {\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n if (data.length > 0) {\r\n webix.confirm({\r\n text: \"Bạn có muốn ký hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CheckInvoiceCancel\", JSON.stringify(data), function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n KyHoaDon();\r\n }\r\n });\r\n }\r\n },\r\n });\r\n } else webix.message(\"Bạn chưa chọn hóa đơn để ký !\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnReject\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-ban\",\r\n css: \"webix_secondary\",\r\n label: _(\"TUCHOI\") + \" (F11)\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F11\",\r\n on: {\r\n onClick: function () {\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn từ chối hóa đơn không?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n TuChoiHoaDon();\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n label: _(\"PRINT\") + \" (F7)\",\r\n width: 80,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/Preview?id=\" + item.inv_invoiceauth_id;\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExportExcel\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-file-excel-o\",\r\n css: \"webix_secondary\",\r\n label: \"Kết xuất Excel\",\r\n width: 100,\r\n on: {\r\n onClick: function () {\r\n exportExcel();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n datafetch: 100,\r\n url: app.config.host + \"/Invoice/GetHoaDonChoDuyet\",\r\n scheme: {\r\n $init: function (obj) {\r\n //creating fake dates for the sample\r\n obj.date = new Date(obj.ngay_hd);\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"date\",\r\n header: [_(\"NGAY_HDON\"), { content: \"dateRangeFilter\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"template_code\", header: [_(\"MAU_HD\"), { content: \"textFilter\" }], width: 150 },\r\n { id: \"invoice_series\", header: [_(\"KY_HIEU\"), { content: \"textFilter\" }], width: 120 },\r\n { id: \"invoice_number\", header: [_(\"SO_HDON\"), { content: \"textFilter\" }], width: 120 },\r\n { id: \"ten_dt\", header: [_(\"TEN_DON_VI\"), { content: \"textFilter\" }], width: 350 },\r\n {\r\n id: \"total_amount_without_vat\",\r\n header: [_(\"TIEN_TRUOC_THUE\"), { content: \"numberFilter\" }],\r\n width: 170,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"discount_percentage\",\r\n header: [_(\"TIEN_CK\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"vat_amount\",\r\n header: [_(\"TIEN_THUE\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n {\r\n id: \"total_amount\",\r\n header: [_(\"THANH_TIEN\"), { content: \"numberFilter\" }],\r\n width: 150,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n css: { \"text-align\": \"right\" },\r\n },\r\n ],\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var showPopup = $$(\"showPop\");\r\n showPopup.callEvent(\"onClick\");\r\n\r\n // var table = webix.$$(\"dmwindowData\");\r\n // var item = table.getSelectedItem();\r\n // var template_code = item.template_code;\r\n },\r\n onItemClick: function (id, e, node) {\r\n var table1 = webix.$$(\"dmwindowData\");\r\n var record = table1.getItem(id.row);\r\n record[\"chon\"] = !record[\"chon\"];\r\n table1.refresh(id.row);\r\n },\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function exportExcel() {\r\n webix.toExcel($$(\"dmwindowData\"), {\r\n rawValues: true,\r\n columns: [\r\n {\r\n id: \"date\",\r\n exportType: \"date\",\r\n header: _(\"NGAY_HDON\"),\r\n width: 120,\r\n exportFormat: \"dd/MM/yyyy\",\r\n },\r\n { id: \"template_code\", header: _(\"MAU_HD\"), width: 150 },\r\n { id: \"invoice_series\", header: _(\"KY_HIEU\"), width: 120 },\r\n {\r\n id: \"invoice_number\",\r\n header: _(\"SO_HDON\"),\r\n width: 120,\r\n },\r\n { id: \"ten_dt\", header: _(\"TEN_DON_VI\"), width: 350 },\r\n {\r\n id: \"total_amount_without_vat\",\r\n header: _(\"TIEN_TRUOC_THUE\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n {\r\n id: \"vat_amount\",\r\n header: _(\"TIEN_THUE\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n {\r\n id: \"total_amount\",\r\n header: _(\"THANH_TIEN\"),\r\n width: 120,\r\n exportType: \"number\",\r\n exportFormat: \"#,##0\",\r\n },\r\n ],\r\n });\r\n }\r\n\r\n function KyHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var kytaptrung = table.config.kytaptrung;\r\n var server_cert = table.config.server_cert;\r\n\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n // var form = webix.$$(\"dmwindowData\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n\r\n var wintable = webix.$$(\"dmwindowData\");\r\n var data = wintable.serialize();\r\n\r\n webix.extend(wintable, webix.ProgressBar);\r\n wintable.disable();\r\n wintable.showProgress();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise\r\n .all([a])\r\n .then(function (results) {\r\n var a_result = results[0].json();\r\n signOnServerFile(a_result, cert, server_cert);\r\n })\r\n .fail(function (err) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n // xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificatesFile\",\r\n });\r\n } else {\r\n if (kytaptrung == \"C\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n // var form = webix.$$(\"dmwindowData\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n\r\n var wintable = webix.$$(\"dmwindowData\");\r\n var data = wintable.serialize();\r\n\r\n webix.extend(wintable, webix.ProgressBar);\r\n wintable.disable();\r\n wintable.showProgress();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise\r\n .all([a])\r\n .then(function (results) {\r\n var a_result = results[0].json();\r\n signOnServer(a_result, cert, server_cert);\r\n })\r\n .fail(function (err) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n // xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n });\r\n } else {\r\n webix.ajax().get(app.config.host + \"/Invoice/GetListCertificates\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chữ ký số\" });\r\n return;\r\n }\r\n\r\n // Ký bằng Chữ ký số mềm\r\n if (listcerts.length == 1) {\r\n var certs = listcerts[0];\r\n\r\n if (certs.cert_type == \"FILE\") {\r\n console.log(\"Token File !\");\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n\r\n var postData = {\r\n username: user.getCurrentUser(),\r\n invs: data,\r\n so_serial: certs.so_serial,\r\n };\r\n\r\n var url = app.config.host + \"/Invoice/SignListInvoiceCertFile\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n webix.message(\"Đã thực hiện xong\");\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n return;\r\n }\r\n }\r\n\r\n // ký bằng USB TOKEN\r\n console.log(\"USB Token !\");\r\n var form = webix.$$(\"dmwindowData\");\r\n var datafrm = form.serialize();\r\n\r\n var data = [];\r\n for (var i = 0; i < datafrm.length; i++) {\r\n if (datafrm[i][\"chon\"] != null && datafrm[i][\"chon\"] == true) {\r\n data.push(datafrm[i].inv_invoiceauth_id);\r\n }\r\n }\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n \r\n //lấy time server\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n } else {\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n } else {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n // webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n\r\n // hub.off('resNotice');\r\n // hub.on('resNotice', function (result) {\r\n // webix.message(result, \"debug\");\r\n // });\r\n\r\n var token = user.getAccessToken();\r\n var dvcs = user.getDvcsID();\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n\r\n var url;\r\n if (window.location.protocol == \"file:\") {\r\n url = \"http://localhost:18374\";\r\n } else {\r\n url = window.location.origin;\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: data,\r\n // mst: \"0100686209\",\r\n mst: \"minvoice\", // đang fix cứng.sau này có thể fix\r\n username: user.getCurrentUser(),\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n listcerts: form.config.lstCert,\r\n token: bear,\r\n dateKy: resultTime.dateKy,\r\n url: url,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignListInvoiceV2\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success SignListInvoiceV2!\");\r\n })\r\n .fail(function (error) {\r\n var form = webix.$$(\"dmwindowData\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n function DuyetHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n webix\r\n .ajax()\r\n .bind(item)\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/DuyetHoaDon\", { inv_InvoiceAuth_id: item.inv_invoiceauth_id }, function (text) {\r\n var res = JSON.parse(text);\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n return;\r\n }\r\n\r\n $$(\"dmwindowData\").remove(this.id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n function laySoHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n var lstTemp = [];\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n var temp = {\r\n inv_invoiceauth_id: item.inv_invoiceauth_id,\r\n };\r\n lstTemp.push(temp);\r\n }\r\n }\r\n }\r\n\r\n if (lstTemp.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hóa đơn\" });\r\n return;\r\n }\r\n\r\n var postData = {\r\n data: lstTemp,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/LaySoHoaDon\", postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n } else {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n }\r\n\r\n function TuChoiHoaDon() {\r\n var table = webix.$$(\"dmwindowData\");\r\n var data = table.serialize();\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n var item = data[i];\r\n\r\n if (item.chon != undefined) {\r\n if (item.chon == true) {\r\n webix\r\n .ajax()\r\n .bind(item)\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/TuChoiHoaDon\", { inv_InvoiceAuth_id: item.inv_invoiceauth_id }, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n $$(\"dmwindowData\").remove(this.id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var params = app.path[1].params;\r\n var table = webix.$$(\"dmwindowData\");\r\n // Lấy thông tin ký tập trung -----------------------------------------\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n table.config.kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n table.config.server_cert = item.gia_tri;\r\n }\r\n }\r\n },\r\n }\r\n );\r\n\r\n // lấy danh sách chữ ký số\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/GetListCertificates\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\",\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n table.config.lstCert = result;\r\n },\r\n });\r\n\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ duyệt\");\r\n\r\n /*webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n var btnEdit = webix.$$(\"btnEdit\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n if (params[0] != undefined) {\r\n var type = params[0];\r\n\r\n if (type == \"02\") {\r\n webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ ký\");\r\n btnEdit.define(\"label\", _(\"SIGN\"));\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n btnEdit.refresh();*/\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n var params = app.path[1].params;\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n var btnEdit = webix.$$(\"btnEdit\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n var btnReject = webix.$$(\"btnReject\");\r\n btnReject.show();\r\n //btnEdit.define(\"label\", _(\"DUYET\"));\r\n\r\n //webix.$$(\"title\").parse({ title: \"Duyệt hóa đơn\", details: \"Danh sách hóa đơn chờ duyệt\" });\r\n\r\n if (params[0] != undefined) {\r\n var type = params[0];\r\n\r\n if (type == \"01\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ duyệt\");\r\n btnEdit.define(\"label\", _(\"DUYET\"));\r\n btnReject.hide();\r\n }\r\n if (type == \"02\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ sinh số\");\r\n btnEdit.define(\"label\", _(\"Sinh số\"));\r\n btnReject.hide();\r\n }\r\n if (type == \"03\") {\r\n //webix.$$(\"title\").parse({ title: \"Ký hóa đơn\", details: \"Danh sách hóa đơn chờ ký\" });\r\n table.define(\"url\", app.config.host + \"/Invoice/GetHoaDonChoDuyet?trangthai=Chờ ký\");\r\n btnEdit.define(\"label\", _(\"SIGN\"));\r\n btnReject.hide();\r\n }\r\n }\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n btnEdit.refresh();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/file',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n // {\r\n // \"paddingY\":3, \"paddingX\":3, \"view\":\"form\", \"id\":\"window-form\", \"complexData\":true, \"margin\":0, \"borderless\":true, \"elements\":\r\n // [{\r\n // \"cols\": [\r\n // {\r\n // \"view\": \"fieldset\", \"label\": \"Thông tin chung\", \"body\": {\r\n // \"rows\": [{\r\n // \"cols\":\r\n // [{ \"id\": \"MA_DT0_DPKT\", \"view\": \"text\", \"label\": \"Mã đối tượng\", \"labelWidth\": 100, \"width\": 200, \"name\": \"MA_DT0\" }, { \"id\": \"TEN_DT0_DPKT\", \"view\": \"text\", \"label\": \"Tên đối tượng\", \"labelWidth\": 110, \"name\": \"TEN_DT0\" }]\r\n // }, { \"id\": \"ONG_BA_DPKT\", \"view\": \"text\", \"label\": \"Ông bà\", \"labelWidth\": 100, \"name\": \"ONG_BA\" }, { \"id\": \"CT_GOC_DPKT\", \"view\": \"text\", \"label\": \"Chứng từ gốc\", \"labelWidth\": 100, \"name\": \"CT_GOC\" }, { \"id\": \"DIA_CHI_DPKT\", \"view\": \"text\", \"label\": \"Địa chỉ\", \"labelWidth\": 100, \"name\": \"DIA_CHI\" }, { \"id\": \"DIEN_GIAI_DPKT\", \"view\": \"text\", \"label\": \"Diễn giải\", \"labelWidth\": 100, \"name\": \"DIEN_GIAI\" }]\r\n // }\r\n // }, \r\n // { \"width\": 10 },\r\n // {\r\n // \"view\": \"fieldset\", \"label\": \"Chứng từ\", \"body\": {\r\n // \"rows\":\r\n // [\r\n // { \"id\": \"NGAY_CT_DPKT\", \"view\": \"datepicker\", \"label\": \"Ngày chứng từ\", \"labelWidth\": 110, \"width\": 300, \"name\": \"NGAY_CT\" }, { \"id\": \"SO_CT_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Số chứng từ\", \"name\": \"SO_CT\" }, \r\n // { \"cols\": [{ \"id\": \"MA_NT_DPKT\", \"view\": \"text\", \"name\": \"MA_NT\", \"label\": \"Mã ngoại tệ\", \"labelWidth\": 110, \"width\": 170 }, { \"id\": \"TY_GIA_DPKT\", \"view\": \"text\", \"name\": \"TY_GIA\", \"label\": \"Tỷ giá\", \"labelWidth\": 50 }] }, { \"id\": \"MA_HT_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Mã hạch toán\", \"name\": \"MA_HT\" }, { \"id\": \"MA_BP_DPKT\", \"view\": \"text\", \"labelWidth\": 110, \"label\": \"Mã bộ phận\", \"name\": \"MA_BP\" }]\r\n // }\r\n // }]\r\n // },\r\n // {\r\n // \"view\": \"tabview\", \"id\": \"tab_replace\", \"cells\": [{ \"header\": \"Chi tiết thu\" },\r\n // { \"header\": \"Chi tiết thuế\" }]\r\n // }, {\r\n // \"cols\": [{ \"id\": \"T_TIEN_TT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền trước thuế\", \"labelWidth\": 170, \"name\": \"T_TIEN_TT\" },\r\n // { \"id\": \"T_THUE_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền thuế\", \"labelWidth\": 130, \"name\": \"T_THUE\" }, { \"id\": \"T_TIEN_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền\", \"labelWidth\": 100, \"name\": \"T_TIEN\" }]\r\n // },\r\n // {\r\n // \"cols\": [{ \"id\": \"T_TIEN_TT_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền trước thuế NT\", \"labelWidth\": 170, \"name\": \"T_TIEN_TT_NT\" },\r\n // { \"id\": \"T_THUE_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền thuế NT\", \"labelWidth\": 130, \"name\": \"T_THUE_NT\" },\r\n // { \"id\": \"T_TIEN_NT_DPKT\", \"view\": \"text\", \"label\": \"Tổng tiền NT\", \"labelWidth\": 100, \"name\": \"T_TIEN_NT\" }]\r\n // }]\r\n // }\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"window-win\", position: \"center\",\r\n //width:800,\r\n head: \"Nam đại ka\",\r\n fullscreen: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"window-form\",\r\n complexData: true,\r\n keepViews: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"fieldset\",\r\n id: \"2\",\r\n label: \"Field Set 1\",\r\n body: {\r\n rows: [\r\n {\r\n column_type: \"datetime\",\r\n css: null,\r\n data_width: null,\r\n fieldExpression: null,\r\n format: \"%d/%m/%Y\",\r\n id: \"inv_invoiceIssuedDate_inv_InvoiceAuth\",\r\n keepViews: true,\r\n label: \"Ngày hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceIssuedDate\",\r\n on: {},\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"datepicker\",\r\n width: null\r\n },\r\n {\r\n column_type: \"nvarchar\",\r\n css: \"mcls_readonly_text\",\r\n data_width: null,\r\n fieldExpression: null,\r\n format: null,\r\n id: \"inv_invoiceNumber_inv_InvoiceAuth\",\r\n keepViews: true,\r\n label: \"Số hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceNumber\",\r\n on: {},\r\n readonly: true,\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"text\",\r\n width: null\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n view: \"fieldset\",\r\n id: \"22\",\r\n label: \"Thông tin 2\",\r\n body: {\r\n rows: [\r\n {\r\n column_type: \"datetime\",\r\n css: null,\r\n data_width: null,\r\n fieldExpression: null,\r\n format: \"%d/%m/%Y\",\r\n id: \"inv_invoiceIssuedDate_inv_InvoiceAuth1\",\r\n keepViews: true,\r\n label: \"Ngày hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceIssuedDate4\",\r\n on: {},\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"datepicker\",\r\n width: null\r\n },\r\n {\r\n column_type: \"nvarchar\",\r\n css: \"mcls_readonly_text\",\r\n data_width: null,\r\n fieldExpression: null,\r\n format: null,\r\n id: \"inv_invoiceNumber_inv_InvoiceAuth1\",\r\n keepViews: true,\r\n label: \"Số hóa đơn\",\r\n labelPosition: \"left\",\r\n labelWidth: 100,\r\n name: \"inv_invoiceNumber5\",\r\n on: {},\r\n readonly: true,\r\n resizeColumn: true,\r\n value_change: null,\r\n view: \"text\",\r\n width: null\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: \"Email1\" },\r\n { view: \"text\", label: \"ahihi\", id: \"lala\" }\r\n ]\r\n\r\n }\r\n\r\n ]\r\n }\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/file',[\"app\", \"locale\", \"views/forms/file\"], function (app, _, fileform) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Danh sách file báo cáo\", details: \"Danh sách file báo cáo\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n width: 95,\r\n // shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDowload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: _(\"Tải File\"),\r\n width: 90,\r\n // shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn file cần báo cáo !\", \"error\");\r\n return;\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang tải xuống\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n //.headers({ 'Content-type': 'application/json' })\r\n .get(app.config.host + \"/Invoice/Floder?filename=\" + item.fName, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"text/csv\" });\r\n webix.html.download(file, item.fName + \".repx\");\r\n\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // id: \"btnTest\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"TEst\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var detailForm = this.$scope.ui(fileform.$ui);\r\n // detailForm.show();\r\n\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/Invoice/FloderInfo\";\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnDowload\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"fName\", header: _(\"Tên file\"), width: 300 },\r\n //{ id: \"fExtension\", header: \"Loại\", width: 100 },\r\n {\r\n id: \"fTime\",\r\n header: _(\"Ngày\"),\r\n width: 100,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_bangdanhsachhanghoagiamtru',[\"app\", \"models/user\"], function (app, user) {\r\n\r\n var button = [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"hanghoa-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n width:1000,\r\n height:800,\r\n resize: true,\r\n id: \"hanghoa-win\",\r\n position: \"center\",\r\n head: \"Danh sách hàng hóa, dịch vụ không giảm trừ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"hanghoa-form\",\r\n complexData: true,\r\n margin: 0,\r\n width:0,\r\n height:0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonFrm\",\r\n name: \"danhsach_hoadonFrm\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n width:1000,\r\n height:700,\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice68/GetDSHHGiamTru\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n\r\n if (item.value != null && item.value != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n id: \"code\",\r\n name: \"code\",\r\n header: [\r\n \"Mã\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 120,\r\n },\r\n {\r\n id: \"name\",\r\n name: \"name\",\r\n header: [\"Tên\", { content: \"serverFilter\" }],\r\n width: 500,\r\n },\r\n {\r\n id: \"vat_type\",\r\n name: \"vat_type\",\r\n header: [\" thuế\", { content: \"serverFilter\" }],\r\n width: 100,\r\n },\r\n {\r\n id: \"unit_code\",\r\n name: \"unit_code\",\r\n header: [\r\n \"Đơn vị tính\",\r\n {\r\n content: \"serverFilter\",\r\n },\r\n ],\r\n width: 100,\r\n },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n };\r\n});\r\n\ndefine('views/forms/68_chondai',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n \r\n if ($$(\"kyhieuhoadon_78_id\").getValue() == null || $$(\"kyhieuhoadon_78_id\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn ký hiệu\", \"error\");\r\n return;\r\n }\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n };\r\n commonHD.ExcuteChonInvoice(kyHieuHoaDon,2);\r\n\r\n $$(\"chuyendai-win\").close();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chọn ký hiệu hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Kí hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Kí hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=201a2758-6e97-4296-9beb-b627ff73e1a4\");\r\n var khieu = param[\"data\"][0].WinParams.find(function(item) {\r\n return item.value_field == \"kyhieu_id\";\r\n });\r\n\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + khieu.wb_references_id);\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if(item) {\r\n $$(\"kyhieuhoadon_78_id\").setValue(item.cctbao_id);\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n }\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_chuyenDaiHoaDon',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n khieu: $$(\"kyhieuhoadon_78_id\").data.text,\r\n };\r\n\r\n switch (item.loaichuyendai_id) {\r\n case \"1\":\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n break;\r\n case \"2\":\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n break;\r\n case \"3\":\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n break;\r\n case \"4\":\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n break;\r\n default:\r\n break;\r\n }\r\n $$(\"chuyendai-win\").close();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chuyển dải hoá đơn hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Ký hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaichuyendai_id\",\r\n label: \"Loại chuyển dải\",\r\n id: \"loaichuyendai_id\",\r\n labelWidth: 120,\r\n value: \"1\",\r\n options: [\r\n { id: 1, value: \"Thay thế\" },\r\n { id: 2, value: \"Điều chỉnh tăng\" },\r\n { id: 3, value: \"Điều chỉnh giảm\" },\r\n { id: 4, value: \"Điều chỉnh thông tin\" },\r\n ],\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + param[\"data\"][0].WinParams[0].wb_references_id);\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=8d0468ef-349f-41ce-8d63-499af9073e4a\");\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n $$(\"kyhieuhoadon_78_id\").setValue(item.cctbao_id);\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('callApis/hoadon68',[\"app\"], function (app) {\r\n \r\n var hoadonSaveChangePath = app.config.host + \"/Invoice68/hoadonSaveChange\";\r\n return {\r\n $oninit: function (app, newconfig) {\r\n },\r\n $onurl: function (url) {\r\n },\r\n /**\r\n * Save data invoice\r\n */\r\n hoadonSaveChange: function (obj) {\r\n return webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(hoadonSaveChangePath, obj);\r\n }\r\n };\r\n});\r\n\ndefine('callApis/customer',[\"app\"], function (app) {\r\n \r\n var saveCustomerPath = app.config.host + \"/Customer/SaveCustomer\";\r\n return {\r\n $oninit: function (app, newconfig) {\r\n },\r\n $onurl: function (url) {\r\n },\r\n /**\r\n * Save data customer\r\n */\r\n saveCustomer: function (obj) {\r\n return webix.ajax().post(saveCustomerPath,obj);\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/formhoadon78',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\", \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n var tongtienHDonBke = 0;\r\n var tongtienthueHDonBke = 0;\r\n var mau04 = {};\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var tongtienthueBangKeCT = webix.$$(\"tgtthue\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n //var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n //if (!bool) {\r\n // webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n // return;\r\n //}\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (tongtienthueHDonBke != tongtienthueBangKeCT) {\r\n webix.message(\"Tổng tiền thuế chi tiết bảng kê khác tổng tiền thuế của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function hoadonSaveChange() {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n if (isSaveCustomerInfo)\r\n if (!json.hasOwnProperty(\"message_warning\")) {\r\n webix.message(\"Lưu thông tin khách hàng thành công!\", \"success\");\r\n }\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n if ($$('is_save_customer_info') != null && $$('is_save_customer_info').getValue() == 1) {\r\n var mnmuaValue = $$('mnmua').getValue();\r\n var tenValue = $$('ten').getValue();\r\n var mstValue = $$('mst').getValue();\r\n var dchiValue = $$('dchi').getValue();\r\n\r\n var checkMessage = [];\r\n\r\n if (mnmuaValue == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (tenValue == \"\") checkMessage.push('\"Tên\" khách hảng là trường bắt buộc nhập\"');\r\n if (dchiValue == \"\") checkMessage.push('\"Địa chỉ\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
 Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadonSaveChange();\r\n }\r\n },\r\n {\r\n view: \"button\", value: \"Hủy\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (mnmuaValue == \"\" && mstValue == \"\") {\r\n showConfirmUI();\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Customer/CheckExistedCustomerCodeOrTaxCode?code=\" + mnmuaValue + \"&taxcode=\" + mstValue, null, function (res) {\r\n\r\n res = JSON.parse(res);\r\n if (res.length > 0) {\r\n for (var i = 0; i < res.length; i++) {\r\n if (res[i].code == mnmuaValue) {\r\n checkMessage.push('\"Mã\" khách hàng đã tồn tại');\r\n }\r\n if (res[i].tax_code == mstValue) {\r\n checkMessage.push('\"Mã\" số thuế của khách hàng đã tồn tại');\r\n }\r\n }\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n hoadonSaveChange();\r\n }\r\n });\r\n }\r\n } else\r\n hoadonSaveChange();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n $$(\"btnHoadonSave\").enable();\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n tongtienthueHDonBke = item.tgtthue;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n console.log(\"Mode change: \" + modeChangeView);\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n \r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n debugger;\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n if(vc_window.code ===\"WIN00782\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else if(vc_window.code ===\"WIN00785\" || vc_window.code ===\"WIN00786\"\r\n || vc_window.code ===\"WIN00783\"|| vc_window.code ===\"WIN00784\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00024\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n var windowno = vc_window.code;\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\") {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n var result = webix.ajax().sync().get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/lichsuemail',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 700,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số hóa đơn\", width: 100, editor: \"text\" },\r\n { id: \"template_code\", name: \"template_code\", header: \"Mẫu hóa đơn\", width: 120, editor: \"text\" },\r\n { id: \"invoice_series\", name: \"invoice_series\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"send_date\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/Util',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n return {\r\n $ui: {\r\n },\r\n StringToFunc:function (s){\r\n var funcReg = /^(function)([ ]*)(\\()(\\w*)(\\))([ ]*)(\\{)([^]*)(})$/gm;\r\n var match = funcReg.exec(s);\r\n\r\n if(match) {\r\n return new Function(match[4].split(','), match[8]);\r\n }\r\n else return null;\r\n },\r\n StringToFunc2:function (s){\r\n return new Function(\"return \" + \"s\")()\r\n }\r\n };\r\n});\r\n\ndefine('views/forms/bienbanForm',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\"], function (app, _, user, findJson, commonHD) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Lập biên bản Hủy/Điều chỉnh/Thay thế của hóa đơn\",\r\n width: 600,\r\n height: 350,\r\n id: \"bienBan\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 60 },\r\n id: \"bienBanForm\",\r\n view: \"form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n id: \"svban\",\r\n view: \"text\",\r\n name: \"svban\",\r\n label: \"Số văn bản\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Số văn bản không được bỏ trống\"\r\n },\r\n {\r\n id: \"nvban\",\r\n view: \"datepicker\",\r\n name: \"nvban\",\r\n label: \"Ngày văn bản\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Ngày văn bản không được bỏ trống\"\r\n },\r\n {\r\n id: \"lydo\",\r\n view: \"text\",\r\n name: \"lydo\",\r\n label: \"Lý do\",\r\n labelWidth: 100\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n click: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n var values = $$(\"bienBanForm\").getValues();\r\n\r\n if ($$(\"bienBanForm\").validate() == false) {\r\n return;\r\n }\r\n\r\n var data_post = {\r\n editmode: editmode,\r\n data: {\r\n hdon_id: item.hdon_id,\r\n cctbao_id: item.cctbao_id,\r\n svban: values.svban,\r\n nvban: values.nvban,\r\n lydo: values.lydo\r\n }\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBienBan\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.message(editmode == 2 ? \"Sửa biên bản thành công !\" : \"Tạo biên bản thành công !\", \"success\");\r\n var win = $$(\"bienBanForm\").getTopParentView();\r\n win.close();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", id: \"btnBienBanDelete\", hotkey: \"delete\", label: \"Xóa (Delete)\", align: \"center\", type: \"danger\", width: 100,\r\n click: function () {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa bản ghi\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (result) {\r\n if (result) {\r\n var values = $$(\"bienBanForm\").getValues();\r\n editmode = 3;\r\n\r\n var data_post = {\r\n editmode: editmode,\r\n data: {\r\n hdon_id: values.hdon_id,\r\n cctbao_id: values.cctbao_id\r\n }\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveBienBan\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.message(\"Xóa biên bản thành công !\", \"success\");\r\n var win = $$(\"bienBanForm\").getTopParentView();\r\n win.close();\r\n }\r\n },\r\n });\r\n }\r\n }\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\", width: 120,\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ],\r\n rules: {\r\n \"svban\": webix.rules.isNotEmpty,\r\n \"nvban\": webix.rules.isNotEmpty\r\n }\r\n }\r\n },\r\n setValuesBienBan: function (data, winconfig) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n form.setValues(data);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setHideBtnDelete: function () {\r\n $$('btnBienBanDelete').hide();\r\n }\r\n\r\n };\r\n});\ndefine('views/forms/68_hoadon_history_lienquan',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\", \"views/forms/68_bangmotaloiCQT\"], function (app, _, user, invoiceForms, bangmotaloiCQT) {\r\n \r\n\r\n var editmode = 0;\r\n var hdon_id = \"\";\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Hóa đơn điều chỉnh, thay thế
\";\r\n },\r\n },\r\n ],\r\n },\r\n id: \"responseMessageForms\",\r\n resize: true,\r\n width: 1000,\r\n height: 500,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"message\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
Hóa đơn điều chỉnh, thay thế
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_history\",\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n onClick: {\r\n btnPrint: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + record.hdon_id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n dowloadXml: function (event, cell, target) {\r\n var win = webix.$$(\"danhsach_history\");\r\n var record = win.getItem(cell.row);\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n if (record.tthai == \"Chờ sinh số\"|| record.tthai == \"Chờ duyệt\"|| record.tthai == \"Chờ ký\" || record.tthai == \"Chờ gửi\") {\r\n webix.message(\"Hóa đơn đang ở trạng thái chờ ký/chờ gửi không thể tải XML !\", \"error\");\r\n return;\r\n }\r\n var table = webix.$$(\"responseMessageForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var url = app.config.host + \"/Invoice68/ExportXMLHoadon?id=\" + record.hdon_id;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n table.enable();\r\n table.hideProgress();\r\n\r\n var file = new Blob([data], {\r\n type: \"application/xml\"\r\n });\r\n webix.html.download(file, \"XmlInvoice.xml\");\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n }, \r\n },\r\n url:{\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n // var hdon_id = \"87de11a4-0b4e-42d4-a86c-45ba10b80337\";\r\n if(hdon_id != \"\"){\r\n var url = app.config.host + \"/Invoice68/GetInviceLQ?id=\" + hdon_id;\r\n webix.ajax(url, callback, view);\r\n }\r\n }\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n\r\n {\r\n id: \"stt\",\r\n header: [\"
STT
\"],\r\n sort: \"int\",\r\n width: 40,\r\n columnType: \"nvarchar\",\r\n },\r\n {\r\n id: \"hdon_id\",\r\n header: [\"
Mã hóa đơn
\", { content: \"textFilter\" }],\r\n width: 100,\r\n columnType: \"nvarchar\",\r\n hidden: true,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: [\"
Ký hiệu
\", { content: \"textFilter\" }],\r\n width: 100,\r\n css: { \"text-align\": \"center\" },\r\n columnType: \"nvarchar\",\r\n },\r\n { id: \"shdon\", header: [\"
Số hóa đơn
\", { content: \"textFilter\" }], width: 100, columnType: \"numeric\", css: { \"text-align\": \"center\" } },\r\n { id: \"tthai\", header: [\"
Trạng thái gửi
\", { content: \"textFilter\" }], width: 120, columnType: \"nvarchar\" },\r\n { id: \"ttthdon\", header: [\"
Trạng thái
\", { content: \"textFilter\" }], width: 200, columnType: \"nvarchar\" },\r\n {\r\n id: \"nlap\",\r\n header: [\r\n \"Ngày lập\"\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"nky\",\r\n header: [\r\n \"Ngày giờ ký\"\r\n ],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n columnType: \"datetime\",\r\n },\r\n {\r\n id: \"tgtttbso_last\",\r\n header: [\"
Thành tiền sau thuế
\", { content: \"textFilter\" }],\r\n width: 150,\r\n css: { \"text-align\": \"right\" },\r\n columnType: \"numeric\",\r\n },\r\n {\r\n id: \"btnPrint\",\r\n header: [\"\", \"Xem/In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"dowloadXml\",\r\n header: [\"\", \"Tải XML\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n return \" \";\r\n\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n id: \"btnHuyHDDT\",\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n hdon_id = \"\";\r\n webix.$$(\"responseMessageForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (id) {\r\n hdon_id = id;\r\n var table = $$(\"danhsach_history\");\r\n table.load(table.config.url);\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n {\r\n id: \"ImportBangKeHoaDon\",\r\n value: \"Nhận Excel chi tiết\",\r\n }\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"ImportBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var windowno = app.path[1].params[0];\r\n var excel_id_param = \"\";\r\n\r\n if (windowno != undefined && windowno == \"WIN00781\") {\r\n excel_id_param = \"EX00018\";\r\n }\r\n else if (windowno != undefined && windowno == \"WIN00782\") {\r\n excel_id_param = \"EX00019\";\r\n }\r\n else {\r\n webix.message(\"Chức năng nhận Excel chi tiết chưa có mẫu excel phù hợp!\", \"error\");\r\n return;\r\n }\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: excel_id_param, filename: \"MobiFone Invoice_nhan chi tiet mot bang ke.xlsx\", hdon_id: item.hdon_id });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var subBienBan = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"AddBienBan\",\r\n value: \"Thêm biên bản\",\r\n },\r\n {\r\n id: \"EditBienBan\",\r\n value: \"Sửa biên bản\",\r\n },\r\n {\r\n id: \"InBienBan\",\r\n value: \"In biên bản\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"AddBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // } \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (hasBienBan) {\r\n webix.message(\"Hoá đơn đã có biên bản không thể thêm mới!\", \"error\");\r\n return;\r\n }\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setEditMode(1);\r\n bienbanForm.setHideBtnDelete();\r\n component.show();\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"EditBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice_BienBan?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = (JSON.parse(text))[0];\r\n\r\n if (!data) {\r\n webix.message(\"Hoá đơn không có biên bản không thể sửa!\", \"error\");\r\n return;\r\n }\r\n\r\n data.nvban = removeTimeZoneT(data.nvban);\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setValuesBienBan(data, null);\r\n bienbanForm.setEditMode(2);\r\n\r\n component.show();\r\n\r\n });\r\n }\r\n\r\n if (record.id == \"InBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (!hasBienBan) {\r\n webix.message(\"Hoá đơn chưa có biên bản không thể in!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên bản ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBienBan?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBienBan=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n \"Hủy\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", vc_window.after_edit);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n var donvitien = view[\"dvtte\"];\r\n var urldecimal = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + donvitien;\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .sync()\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({\r\n title: vc_window[\"name\"],\r\n details: \"Lập hóa đơn ->\" + vc_window[\"name\"],\r\n width: 1000,\r\n });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n // Xử lý xét giá trị ở đây\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n \r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n \r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n }\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_chuyenDaiHoaDon32',[\"app\", \"locale\", \"models/user\", \"views/commonHD\", \"views/windowhoadon78\"], function (app, _, user, commonHD, windowhoadon78) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n setTimeout(function () {\r\n if ($$(\"chuyendai-form\").validate()) {\r\n var item = $$(\"chuyendai-form\").getValues();\r\n\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieuhoadon_78_id\").getValue(),\r\n khieu: $$(\"kyhieuhoadon_78_id\").data.text,\r\n lhdclquan: $$(\"lhdclquan\").getValue(),\r\n khmshdclquan: $$(\"khmshdclquan\").getValue(),\r\n khhdclquan: $$(\"khhdclquan\").getValue(),\r\n shdclquan: $$(\"shdclquan\").getValue(),\r\n nlhdclquan: $$(\"nlhdclquan\").getValue(),\r\n case: $$(\"loaichuyendai_id\").getValue(),\r\n dvtte: \"VND\",\r\n tgia: \"1\",\r\n htttoan: \"Tiền mặt/Chuyển khoản\",\r\n };\r\n if (kyHieuHoaDon.case == 1) {\r\n kyHieuHoaDon.tthdon = 2;\r\n kyHieuHoaDon.tthdon = 2;\r\n } else if (kyHieuHoaDon.case == 2) {\r\n kyHieuHoaDon.tthdon = 19;\r\n kyHieuHoaDon.tthdon = 19;\r\n } else if (kyHieuHoaDon.case == 3) {\r\n kyHieuHoaDon.tthdon = 21;\r\n kyHieuHoaDon.tthdon = 21;\r\n kyHieuHoaDon.note = \"reduce_change_invoice\";\r\n } else if (kyHieuHoaDon.case == 4) {\r\n kyHieuHoaDon.tthdon = 23;\r\n kyHieuHoaDon.tthdon = 23;\r\n }\r\n switch (item.loaichuyendai_id) {\r\n case \"1\":\r\n commonHD.ExcuteReplaceInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"2\":\r\n commonHD.ExcuteIncreaseChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"3\":\r\n commonHD.ExcuteReduceChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n case \"4\":\r\n commonHD.ExcuteInfoChangeInvoice_32(kyHieuHoaDon);\r\n break;\r\n default:\r\n break;\r\n }\r\n $$(\"chuyendai-win\").close();\r\n }\r\n }, 100);\r\n },\r\n },\r\n\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n var table = $$(\"invoiceViews\").getParentView();\r\n console.log(table);\r\n webix.$$(\"chuyendai-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"chuyendai-win\",\r\n position: \"center\",\r\n head: \"Chuyển dải hoá đơn hóa đơn\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 600,\r\n id: \"chuyendai-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"kyhieuhoadon_78_id\",\r\n label: \"Ký hiệu hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"kyhieuhoadon_78_id\",\r\n required: true,\r\n labelWidth: 200,\r\n invalidMessage: \"Ký hiệu hóa đơn không được bỏ trống\",\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaichuyendai_id\",\r\n label: \"Loại chuyển dải\",\r\n id: \"loaichuyendai_id\",\r\n required: true,\r\n labelWidth: 200,\r\n value: \"1\",\r\n options: [\r\n { id: 1, value: \"Thay thế\" },\r\n { id: 2, value: \"Điều chỉnh tăng\" },\r\n { id: 3, value: \"Điều chỉnh giảm\" },\r\n { id: 4, value: \"Điều chỉnh thông tin\" },\r\n ],\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"loaihdlq\",\r\n label: \"Loại HĐLQ\",\r\n id: \"lhdclquan\",\r\n labelWidth: 200,\r\n value: \"3\",\r\n options: [\r\n { id: 1, value: \"Hóa đơn điện tử theo Nghị định 123/2020/NĐ-CP\" },\r\n { id: 2, value: \"Hóa đơn điện tử có mã xác thực của cơ quan thuế theo Quyết định số 1209/QĐ-BTC\" },\r\n { id: 3, value: \"Các loại hóa đơn theo Nghị định số 51/2010/NĐ-CP và Nghị định số 04/2014/NĐ-CP\" },\r\n { id: 4, value: \"Hóa đơn đặt in theo Nghị định 123/2020/NĐ-CP\" },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khmshdclquan\",\r\n label: \"Ký hiệu mẫu số HĐLQ\",\r\n labelWidth: 200,\r\n id: \"khmshdclquan\",\r\n validate: webix.rules.isn,\r\n invalidMessage: \"Ký hiệu mẫu số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 11 },\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"khhdclquan\",\r\n label: \"Ký hiệu HĐLQ\",\r\n labelWidth: 200,\r\n id: \"khhdclquan\",\r\n invalidMessage: \"Ký hiệu mẫu số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 8 },\r\n required: true,\r\n },\r\n {\r\n view: \"text\",\r\n name: \"shdclquan\",\r\n label: \"Số hóa đơn LQ\",\r\n labelWidth: 200,\r\n id: \"shdclquan\",\r\n invalidMessage: \"Số hóa đơn liên quan không được bỏ trống\",\r\n attributes: { maxlength: 8 },\r\n required: true,\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"nlhdclquan\",\r\n label: \"Ngày lập hóa đơn liên quan\",\r\n labelWidth: 200,\r\n id: \"nlhdclquan\",\r\n invalidMessage: \"Ngày lập hóa đơn không được bỏ trống\",\r\n required: true,\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n // $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=201a2758-6e97-4296-9beb-b627ff73e1a4\");\r\n var khieu = param[\"data\"][0].WinParams.find(function(item) {\r\n return item.value_field == \"kyhieu_id\";\r\n });\r\n\r\n $$(\"kyhieuhoadon_78_id\").define(\"options\", app.config.host + \"/System/GetDataByReferencesId?id=\" + khieu.wb_references_id);\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n $$(\"kyhieuhoadon_78_id\").setValue($$(\"kyhieu_id\").getValue());\r\n $$(\"kyhieuhoadon_78_id\").refresh();\r\n },\r\n setValues: function (item) {\r\n $$(\"chuyendai-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_hangloat',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var hdonids=[];\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n if(!$$(\"email-form\").validate()) return;\r\n \r\n var self = this;\r\n setTimeout(function () {\r\n\r\n var table = $$(\"invoiceViews\")\r\n var item = $$(\"email-form\").getValues();\r\n\r\n var data = {\r\n nguoinhan:item.nguoinhan,\r\n data:hdonids\r\n };\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendMails\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"email-win\").close();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.message(\"Gửi email thành công\", \"success\");\r\n } else {\r\n $$(\"email-win\").close();\r\n webix.message(json.error, \"error\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Gửi nhiều email\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n rules:{\r\n \"nguoinhan\":webix.rules.isEmail,\r\n },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"text\",\r\n label:\"Người nhận\",\r\n name: \"nguoinhan\",\r\n labelWidth: 100,\r\n required: true,\r\n invalidMessage: \"Email người nhận bị bỏ trống hoặc không đúng định dạng\",\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_hdonids) {\r\n hdonids = _hdonids;\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_send_history_result',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var countObj={};\r\n var button = [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"OK (ESC)\",\r\n type: \"success\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"result-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"result-win\",\r\n position: \"center\",\r\n head: \"Kết quả gửi lại mail theo lịch sử\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"result-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n \r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"countAll\",\r\n css:{\"color\": \"blue\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"countSuccess\",\r\n css:{\"color\": \"green\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 200, \r\n align:\"left\",\r\n id: \"countFailure\",\r\n css:{\"color\": \"red\", \"font-weight\": \"bold\"}\r\n },\r\n {\r\n view:\"label\", \r\n inputWidth: 100, \r\n align:\"left\",\r\n id: \"error\",\r\n css:{\"color\": \"red\", \"font-weight\": \"bold\"}\r\n },\r\n \r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_countObj) {\r\n countObj = _countObj;\r\n \r\n $$(\"countAll\").setValue(\"TỔNG SỐ: \" + countObj.countAll + \" ĐÃ CÓ LỊCH SỬ GỬI MAIL\");\r\n $$(\"countSuccess\").setValue(\"THÀNH CÔNG: \" + countObj.countSuccess );\r\n \r\n if(countObj.hasOwnProperty(\"error\"))\r\n {\r\n $$(\"countFailure\").setValue(\"THẤT BẠI: \" + countObj.countFailure);\r\n $$(\"error\").setValue(\"SỐ HÓA ĐƠN: \" + countObj.error);\r\n }\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_email_send_history',[\"app\", \"locale\", \"models/user\", \"views/commonHD\"], function (app, _, user, commonHD) {\r\n var editmode = 0;\r\n var hdonids=[];\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n //if(!$$(\"email-form\").validate()) return;\r\n \r\n //var self = this;\r\n setTimeout(function () {\r\n\r\n var table = $$(\"invoiceViews\")\r\n //var item = $$(\"email-form\").getValues();\r\n\r\n var data = {\r\n //nguoinhan:item.nguoinhan,\r\n data:hdonids\r\n };\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SendMailHistory\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n $$(\"email-win\").close();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var tableHdon = webix.$$(\"invoiceViews\");\r\n require([\"app\", \"views/forms/68_email_send_history_result\"], function (app, winForm) {\r\n var win = tableHdon.$scope.ui(winForm.$ui);\r\n winForm.setValues(json);\r\n win.show();\r\n });\r\n \r\n },\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Gửi email theo lịch sử đã gửi\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n // rules:{\r\n // \"nguoinhan\":webix.rules.isEmail,\r\n // },\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label:\"Người nhận\",\r\n // name: \"nguoinhan\",\r\n // labelWidth: 100,\r\n // required: true,\r\n // invalidMessage: \"Email người nhận bị bỏ trống hoặc không đúng định dạng\",\r\n // },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (_hdonids) {\r\n hdonids = _hdonids;\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_kyhieu_donvi_bienlai',[\"app\", \"locale\", \"models/user\"], function (app, _, user) {\r\n var editmode = 0;\r\n var param;\r\n var branh_code;\r\n\r\n var button = [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Nhận (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"kyhieu-form\").getValues();\r\n var table = $$(\"kyhieu-form\");\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/kihieudonvi68\", item, {\r\n error: function (text, data, XmlHttpRequest) {\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n var table = $$(\"kyhieu-form\");\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"kyhieu-win\").close();\r\n var table = $$(\"kyhieu_hoadon\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"kyhieu-win\").close();\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var ui = {\r\n view: \"window\",\r\n modal: true,\r\n move: true,\r\n id: \"kyhieu-win\",\r\n position: \"center\",\r\n head: \"Đăng ký ký hiệu\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n width: 500,\r\n id: \"kyhieu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n // {\r\n // view: \"text\",\r\n // label: \"Tên mẫu\",\r\n // name: \"ten_mau\",\r\n // required: true,\r\n // invalidMessage: \"Tên mẫu không được bỏ trống\",\r\n // labelWidth: 120\r\n // },\r\n {\r\n view: \"combo\",\r\n name: \"phanhoadon_78_id\",\r\n label: \"Ký hiệu\",\r\n //labelPosition: \"top\",\r\n id: \"phanhoadon_78_id\",\r\n required: true,\r\n labelWidth: 120,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02004\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n var test = newv;\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: button,\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: ui,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n initUI: function (item) {\r\n param = item;\r\n },\r\n setValues: function (item) {\r\n $$(\"kyhieu-form\").setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/68_phathanh_bienlai',[\"app\", \"locale\", \"models/user\", \"views/forms/68_invoiceForms\"], function (app, _, user, invoiceForms) {\r\n \r\n\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-icondksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formdksd\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
THÔNG BÁO PHÁT HÀNH BIÊN LAI
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_dksdForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"huyhoadonForms\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {},\r\n },\r\n body: {\r\n view: \"form\",\r\n id: \"huyhoadon\",\r\n // width: 1500,\r\n position: \"center\",\r\n // autowidth:true,\r\n paddingY: 10,\r\n paddingX: 15,\r\n complexData: true,\r\n scroll: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n // id: \"header\",\r\n template: \"
THÔNG BÁO PHÁT HÀNH BIÊN LAI
\",\r\n borderless: true,\r\n height: 40,\r\n },\r\n {\r\n paddingX: 30,\r\n rows: [\r\n {\r\n cols: [\r\n {},\r\n {\r\n label: \"Tên CQT tiếp nhận: \",\r\n id: \"tcqt\",\r\n name: \"tcqt\",\r\n view: \"combo\",\r\n labelWidth: 180,\r\n width: 400,\r\n options: {\r\n view: \"gridsuggest\",\r\n columnName: \"name\",\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00251\";\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n columns: [{ id: \"name\", width: 500, header: \"name\" }],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n $$(\"mcqt\").setValue(obj[\"code\"]);\r\n $$(\"mcqt\").refresh();\r\n },\r\n },\r\n },\r\n required: true,\r\n invalidMessage: \"Kính gửi không được để trống !\",\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Tên đơn vị phát hành biên lai\",\r\n labelWidth: 200,\r\n required: true,\r\n invalidMessage: \"Tên đơn vị phát hành biên lai không được để trống !\",\r\n id: \"tnnt\",\r\n name: \"tnnt\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế (nếu có):\",\r\n id: \"mst\",\r\n name: \"mst\",\r\n labelWidth: 200,\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Địa chỉ\",\r\n id: \"ddanh\",\r\n name: \"ddanh\",\r\n required: true,\r\n invalidMessage: \"Địa labchỉ không được để trống !\",\r\n labelWidth: 200,\r\n attributes:{ \r\n maxlength:400 \r\n }\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Thành phố/Tỉnh\",\r\n id: \"ddtbao\",\r\n name: \"ddtbao\",\r\n labelWidth: 100,\r\n width: 300,\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Số điện thoại\",\r\n id: \"sdthoai\",\r\n name: \"sdthoai\",\r\n required: true,\r\n invalidMessage: \"Số điện thoại không được để trống !\",\r\n labelWidth: 200,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Các loại biên lai đã phát hành\",\r\n id: \"bldaphathanh\",\r\n name: \"bldaphathanh\",\r\n labelWidth: 200,\r\n },\r\n /*{\r\n view: \"datepicker\",\r\n label: \"Ngày thông báo\",\r\n id: \"ntbao\",\r\n name: \"ntbao\",\r\n labelWidth: 200,\r\n },*/\r\n ],\r\n },\r\n { height: 3 },\r\n { height: 3 },\r\n {\r\n rows: [\r\n {\r\n id: \"btnHuyhoadon\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n label: \" (F9)\",\r\n // width: 60,\r\n autowidth: true,\r\n icon: \"fas fa-plus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n var item = { id: webix.uid() };\r\n table.add(item);\r\n table.select(item.id, \"khieu\", false);\r\n table.edit({ row: item.id, column: \"khieu\" });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n //view: \"icon\",\r\n autowidth: true, label: \" (F8)\",\r\n // width: 60,\r\n icon: \"fas fa-minus\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"danhsach_hoadonhuy\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n var editor = table.getEditState();\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n id: \"danhsach_hoadonhuy\",\r\n // height: 250,\r\n name: \"danhsach_hoadonhuy\",\r\n // select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n tooltip: true,\r\n editable: true,\r\n select: \"cell\",\r\n scheme: {\r\n $init: function (obj) {},\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onBeforeEditStart: function (id) {\r\n if (id.column == \"stt\") {\r\n return false;\r\n }\r\n if (id.column == \"tenlbl\") {\r\n return false;\r\n }\r\n if (id.column == \"khms\") {\r\n return false;\r\n }\r\n if (id.column == \"tuso\") {\r\n return false;\r\n }\r\n if (id.column == \"denso\") {\r\n return false;\r\n }\r\n return true;\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n var columnId = editor.config.id;\r\n if(columnId == \"soluong\") {\r\n var table = $$(this.config.id);\r\n var selectedItem = table.getSelectedItem();\r\n var maxsoluong = Number(selectedItem[\"tongso\"]) - Number(selectedItem[\"tuso\"]) + 1;\r\n if (Number(selectedItem[\"soluong\"]) > maxsoluong) {\r\n webix.message(\"Vượt quá số lượng cho phép là: \" + maxsoluong);\r\n selectedItem[\"soluong\"] = null;\r\n selectedItem[\"denso\"] = null;\r\n return;\r\n }\r\n selectedItem[\"denso\"] = Number(selectedItem[\"tuso\"]) + Number(selectedItem[\"soluong\"]) - 1;\r\n table.updateItem(selectedItem.id, selectedItem);\r\n }\r\n },\r\n },\r\n columns: [\r\n { editor: \"text\", id: \"hdon_id\", name: \"hdon_id\", hidden: true },\r\n {\r\n id: \"stt\",\r\n name: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"khieu\",\r\n header: _(\"Ký hiệu\"),\r\n editor: \"text\",\r\n width: 250,\r\n editable: true,\r\n suggest: {\r\n view: \"gridsuggest\",\r\n // value_suggest: field.value_suggest,\r\n // fieldExpression: field.field_expression,\r\n // displayField: field.display_field,\r\n // tableId: \"edit_inv_InvoiceDetail\",\r\n columnName: \"ky_hieu\",\r\n body: {\r\n columns: [\r\n { id: \"qlkhsdung_id\", hidden: true, header: \"id\" },\r\n { id: \"khhdon\", header: \"ký hiệu\" },\r\n { id: \"tenlbl\", header: \"Tên loại\" },\r\n { id: \"khms\", header: \"Ký hiệu MS\" },\r\n { id: \"tongso\", header: \"Tổng số\" },\r\n { id: \"tuso\", header: \"Từ số\" },\r\n //{ id: \"denso\", header: \"Đến số\" },\r\n ],\r\n scroll: true,\r\n autoheight: false,\r\n datatype: \"json\",\r\n dataFeed: function (filtervalue, filter) {\r\n if (filtervalue.length < 1) return;\r\n\r\n var refid = this.config.refid;\r\n var pathUrl = app.config.host + \"/System/GetDataReferencesByRefId?refId=RF02011\";\r\n var urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n this.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n },\r\n },\r\n on: {\r\n onValueSuggest: function (obj) {\r\n var table = $$(\"danhsach_hoadonhuy\");\r\n var items = table.serialize();\r\n var selectedItem = table.getSelectedItem();\r\n var newselectedItem = {};\r\n newselectedItem.id = selectedItem.id\r\n for(var i =0; i 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n };\r\n data_post.sign = postData;\r\n data_post.signMode = 1;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"huyhoadon\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n check_HSM: \"1\",\r\n };\r\n data_post.sign = postData;\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi thành công đến CQT !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/Savephathanhbl\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error, \"error\");\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlPhatHanhBL?id=\" + json.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, json]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hoặc Plugin ký chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: item.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlPhatHanhBienLai\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n webix.message(\"Thành công !\", \"success\");\r\n if ($$(\"mau04_68\")) {\r\n var table = $$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n }\r\n },\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 120,\r\n type: \"danger\",\r\n align: \"center\",\r\n click: function () {\r\n app.callEvent(\"dataChangedInvoie68\", [1, null]);\r\n webix.$$(\"huyhoadonForms\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1) {\r\n icon = \"\";\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDmDvcsByUser\");\r\n var json = JSON.parse(result.response);\r\n\r\n $$(\"tnnt\").setValue(json[0].name);\r\n $$(\"mst\").setValue(json[0].tax_code);\r\n $$(\"tcqt\").setValue(json[0].cqt);\r\n $$(\"ddanh\").setValue(json[0].address);\r\n $$(\"sdthoai\").setValue(json[0].tel);\r\n } else {\r\n if (editmode == 2) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-icondksd\").setHTML(icon);\r\n webix.$$(\"head-icondksd\").refresh();\r\n },\r\n setValues: function (item, winconfig, params) {\r\n $$(\"danhsach_hoadonhuy\").parse(item);\r\n },\r\n setValuesTongQuat: function (item, winconfig, params) {\r\n var data = $$(\"huyhoadon\").getValues();\r\n data.so = item.so;\r\n data.ntbccqt = item.ntbccqt;\r\n data.loai = item.loai;\r\n $$(\"huyhoadon\").parse(data);\r\n },\r\n setValuesEdit: function (item, winconfig, params) {\r\n $$(\"huyhoadon\").parse(item);\r\n var tableDetail = webix.$$(\"danhsach_hoadonhuy\");\r\n var url = app.config.host + \"/Invoice68/GetDataTBPHDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/createinvoicebangke',[\"app\", \"locale\"], function (app, _) {\r\n\r\n function initUI(item) {\r\n $$('sobangke').setValue(item.list_number);\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n id: \"crinvoice\",\r\n head: \"Tạo hóa đơn từ bảng kê\",\r\n modal: true,\r\n width: 400,\r\n position: \"center\",\r\n // css: { \"font-weight\": \"bold\", \"text-transform\": \"uppercase\" },\r\n body: {\r\n view: \"form\", id: \"crinvoiceform\", elements: [\r\n\r\n { view: \"text\", label: _(\"SO_BANG_KE\"), id: \"sobangke\", name: \"list_number\", readonly: true, labelWidth: 90 },\r\n {\r\n view: \"richselect\",\r\n id: \"inv_InvoiceCode_id\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: _(\"MAU_SO\"),\r\n labelWidth: 90,\r\n //options: app.config.host +\"/System/GetAllDmDvcs\",\r\n options: {\r\n view: \"gridsuggest\",\r\n textValue: \"ky_hieu\",\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00027\",\r\n textValue: \"ky_hieu\",\r\n columns: [\r\n {\r\n id: \"mau_so\",\r\n width: 100,\r\n header: _(\"MAU_SO\")\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n width: 100,\r\n header: _(\"KY_HIEU\")\r\n },\r\n {\r\n id: \"ma_loai\",\r\n width: 100,\r\n header: _(\"MA_LOAI\")\r\n },\r\n {\r\n id: \"ngay_bd_sd\",\r\n width: 150,\r\n header: _(\"NGAY_BD_SD\"),\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"tu_so\",\r\n width: 100,\r\n header: _(\"TU_SO\")\r\n },\r\n {\r\n id: \"den_so\",\r\n width: 100,\r\n header: _(\"DEN_SO\")\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n { view: \"datepicker\", label: _(\"NGAY_HDON\"), id: \"ngayhd\", name: \"ngay_hd\", value: new Date(), labelWidth: 90 },\r\n {\r\n cols: [\r\n\r\n {\r\n view: \"button\", value: \"Đồng ý\", type: \"form\", click: function () {\r\n\r\n var item = $$(\"crinvoiceform\").getValues();\r\n console.log(item);\r\n\r\n var url = app.config.host + \"/Invoice/CreateInvoiceFromList\";\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Tạo hóa đơn thành công !\");\r\n $$(\"crinvoice\").close();\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", value: \"Hủy bỏ\", click: function () {\r\n this.getTopParentView().hide();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/forms/dmhv',[\"app\"],function(app){\r\n\tvar editmode = 0;\r\n\tvar col=[];\r\n\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n var url = app.config.host + \"/api/System/GetAllByWindowId?id=09a8b24b-52b5-46a6-931d-d6f005da0dd7\";\r\n webix.ajax(url, function (text, xml, xhr) {\r\n\r\n var rp = JSON.parse(text);\r\n head_name.push(String(rp['data'][0]['Tabs'][0]['TAB_NAME']));\r\n for (var i = 0; i < (rp['data'][0]['ROWS_MAX']); i++) {\r\n\t\t\tvar col1=[];\r\n\t\t\t\r\n\t\t\tfor (var j = 0; j < (Object.keys(rp['data'][0]['Tabs'][0]['Fields']).length); j++) {\r\n\t\t\t\t\r\n\t\t\t\tif(i==(Number(rp['data'][0]['Tabs'][0]['Fields'][j]['ROW'])-1)){\r\n\t\t\t\t\tvar el1=[];\r\n\t\t\t\t\tcol1.push({ view:\"text\", name: '' + String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '',label: '' + String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '' , \r\n\t\t\t \t\t\tid: 'dmhv-'+ String(rp['data'][0]['Tabs'][0]['Fields'][j]['COLUMN_NAME']) + '',width:Number(rp['data'][0]['Tabs'][0]['Fields'][j]['WIDTH'])});\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(col1.length>0){\r\n\t\t\t\tel.push({\r\n\t\t\t\tcols:col1\r\n\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n }\r\n\t\tcol.push({});\r\n\t\tcol.push({ \r\n\t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", \r\n\t\t\ton: {\r\n\t\t\t\tonClick: function() {\r\n\t\t\t\t\tvar form = webix.$$(\"dmhv-form\");\r\n\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\tvar hvData={};\r\n\t\t\t\t\t\thvData.windowno=String(rp['data'][0]['ID']);\r\n\t\t\t\t\t\thvData.editmode=editmode;\r\n\t\t\t\t\t\thvData.data=[];\r\n\t\t\t\t\t\thvData.data.push(item);\r\n\t\t\t\t\t\tconsole.log(item);\r\n\t\t\t\t\t\tconsole.log(hvData);\r\n\t\t\t\t\t\twebix.ajax().post( app.config.host + \"/api/System/Save\", hvData, function(text){\r\n\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t});\t\r\n\t\tcol.push({ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", \r\n\t\t\tclick:function(){\r\n\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t}\r\n\t\t});\t\r\n\t\tcol.push({});\t\r\n\t\tel.push({\r\n\t\t\tmargin:10,\r\n\t\t\tcols:col\r\n\t\t});\r\n $$(\"dmhvData\").define(\"elements\",el );;\r\n $$(\"dmhvData\").refresh();\r\n\t\t//console.log(head_name[0]);\r\n });\r\n\t \r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"dmhv-win\", position:\"center\",\r\n\t\t\thead:'' + head + '',\r\n\t\t\t//fullscreen:true,\r\n\t\t\t//width: 350,\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 80}, \r\n view:\"form\", \r\n\t\t\t\tid:\"dmhv-form\", \r\n\t\t\t\tcomplexData:true,\r\n elements:\r\n el\r\n\t\t\t\t\t// {\r\n\t\t\t\t\t// \tmargin:10,\r\n\t\t\t\t\t// \tcols:[\r\n\t\t\t\t\t// \t\t{},\r\n\t\t\t\t\t// \t\t{ \r\n\t\t\t\t\t// \t\t\tshortcut:\"F10\", view:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", width:120, \r\n\t\t\t\t\t// \t\t\ton: {\r\n\t\t\t\t\t// \t\t\t\tonClick: function() {\r\n\t\t\t\t\t// \t\t\t\t\tvar form = webix.$$(\"dmhv-form\");\r\n\t\t\t\t\t// \t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t// \t\t\t\t\twebix.ajax().post( app.config.host + \"/api/Dmhv/Update\", item, function(text){\r\n\t\t\t\t\t// \t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t// \t\t\t\t\t\t\titem.id = data.id;\r\n\t\t\t\t\t// \t\t\t\t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t// \t\t\t\t\t\t\tapp.callEvent(\"dataChanged\",[editmode,item]);\r\n\t\t\t\t\t// \t\t\t\t\t\t}\r\n\t\t\t\t\t// \t\t\t\t\t\telse {\r\n\t\t\t\t\t// \t\t\t\t\t\t\twebix.message(data.error);\r\n\t\t\t\t\t// \t\t\t\t\t\t}\r\n\t\t\t\t\t// \t\t\t\t\t});\r\n\t\t\t\t\t// \t\t\t\t}\r\n\t\t\t\t\t// \t\t\t},\r\n\t\t\t\t\t// \t\t\tclick:function(){\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t\tthis.callEvent(\"onClick\");\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t},\r\n\t\t\t\t\t// \t\t{ view:\"button\", hotkey:\"esc\", label:\"Hủy bỏ\",align:\"center\", width:120, \r\n\t\t\t\t\t// \t\t\tclick:function(){\r\n\t\t\t\t\t// \t\t\t\twebix.$$(\"dmhv-win\").close();\r\n\t\t\t\t\t// \t\t\t}\r\n\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t// \t]\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\t\r\n\t\tsetEditMode: function(mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/formhoadon78bienlai',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnBangKeSave\").disable();\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0 && item.tlkthu == undefined) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết khoản thu\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n\r\n $$(\"btnBangKeSave\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0 && item.tlkthu == undefined) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết khoản thu\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n //$$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n //$$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setcompany: function (item) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n $$(\"ten_tc\").setValue(data.name);\r\n $$(\"mst_tc\").setValue(data.tax_code);\r\n $$(\"dchi_tc\").setValue(data.address);\r\n //$$(\"tel_tc\").setValue(data.tel);\r\n if ($$(\"tinh_tc\") != undefined) $$(\"tinh_tc\").setValue(data.city);\r\n });\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n this.setcompany();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n renderFormat(val);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n var windowno = vc_window.code;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field, windowno);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết các khoản thu\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\" || windowno == \"WIN00793\") {\r\n //$$(\"btnHoadonCQT\").hide();\r\n }\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadon78tncn',[\"app\", \"locale\", \"models/user\", \"models/findjson\", \"views/commonHD\", \"callApis/hoadon68\", \"callApis/customer\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n };\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (val === undefined) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n //var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n //if (!bool) {\r\n // webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n // return;\r\n //}\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function hoadonSaveChange() {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n if (isSaveCustomerInfo)\r\n if (!json.hasOwnProperty(\"message_warning\")) {\r\n webix.message(\"Lưu thông tin khách hàng thành công!\", \"success\");\r\n }\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n\r\n if ($$('is_save_customer_info') != null && $$('is_save_customer_info').getValue() == 1) {\r\n var mnmuaValue = $$('mnmua').getValue();\r\n var tenValue = $$('ten').getValue();\r\n var mstValue = $$('mst').getValue();\r\n var dchiValue = $$('dchi').getValue();\r\n\r\n var checkMessage = [];\r\n\r\n if (mnmuaValue == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (tenValue == \"\") checkMessage.push('\"Tên\" khách hảng là trường bắt buộc nhập\"');\r\n if (dchiValue == \"\") checkMessage.push('\"Địa chỉ\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
 Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadonSaveChange();\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Hủy\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (mnmuaValue == \"\" && mstValue == \"\") {\r\n showConfirmUI();\r\n } else {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Customer/CheckExistedCustomerCodeOrTaxCode?code=\" + mnmuaValue + \"&taxcode=\" + mstValue, null, function (res) {\r\n\r\n res = JSON.parse(res);\r\n if (res.length > 0) {\r\n for (var i = 0; i < res.length; i++) {\r\n if (res[i].code == mnmuaValue) {\r\n checkMessage.push('\"Mã\" khách hàng đã tồn tại');\r\n }\r\n if (res[i].tax_code == mstValue) {\r\n checkMessage.push('\"Mã\" số thuế của khách hàng đã tồn tại');\r\n }\r\n }\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n hoadonSaveChange();\r\n }\r\n });\r\n }\r\n } else\r\n hoadonSaveChange();\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonSave\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n\r\n $$(\"btnHoadonCQT\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 0;\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, false);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n\r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\n var name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonCQT\").enable();\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"ngccmnd\"] !== undefined) item[\"ngccmnd\"] = removeTimeZoneT(item[\"ngccmnd\"]);\r\n },\r\n setcompany: function (item) {\r\n var url = app.config.host + \"/invoice68/GetInfoCompany\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n $$(\"ten_tc\").setValue(data.name);\r\n $$(\"mst_tc\").setValue(data.tax_code);\r\n $$(\"dchi_tc\").setValue(data.address);\r\n $$(\"tel_tc\").setValue(data.tel);\r\n $$(\"tinh_tc\").setValue(data.city);\r\n });\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n this.setcompany();\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n\r\n this.getFormat();\r\n },\r\n getFormat: function (val) {\r\n //commonHD.renderFormat(val);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"msbl_tncn\"] = data[0][\"khmbl\"];\r\n\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n var windowno = vc_window.code;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field, windowno);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n },\r\n onAfterDelete: function (id) {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n if (windowno == \"WIN00791\" || windowno == \"WIN00792\") {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadoncode78_mtt',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"models/findjson\", \r\n \"views/commonHD\", \r\n \"callApis/hoadon68\", \r\n \"callApis/customer\",\r\n \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n\r\n var el = [];\r\n function renderFormat(val) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n \r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n /*if($$(\"tnmua\").getValue() !=\"\" && $$(\"ten\").getValue() !=\"\"){\r\n item[\"TTKhac_tendonvi\"] = $$(\"tnmua\").getValue();\r\n }\r\n else{\r\n delete item[\"TTKhac_tendonvi\"];\r\n }\r\n \r\n if($$(\"dchi\").getValue() !=\"\"){\r\n item[\"TTKhac_dchi\"] = $$(\"dchi\").getValue();\r\n }else{\r\n delete item[\"TTKhac_dchi\"];\r\n }*/\r\n delete item[\"TTKhac_tendonvi\"];\r\n delete item[\"TTKhac_dchi\"];\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n\r\n var data_post = { editmode: editmode, data: item1 };\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var checkmtt = $$(\"khieu\").getValue().substring(4, 5);\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /*if($$(\"tnmua\").getValue() !=\"\" && $$(\"ten\").getValue() !=\"\"){\r\n item[\"TTKhac_tendonvi\"] = $$(\"tnmua\").getValue();\r\n }\r\n else{\r\n delete item[\"TTKhac_tendonvi\"];\r\n }\r\n \r\n if($$(\"dchi\").getValue() !=\"\"){\r\n item[\"TTKhac_dchi\"] = $$(\"dchi\").getValue();\r\n }else{\r\n delete item[\"TTKhac_dchi\"];\r\n }*/\r\n delete item[\"TTKhac_tendonvi\"];\r\n delete item[\"TTKhac_dchi\"];\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n \r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n if(checkmtt === \"M\") {\r\n commonHD.ExcuteHoaDonMTT(lsthdon_id);\r\n }\r\n else{\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n }\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \"+message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n \r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n \r\n webix.message(\"Lưu thông tin khách hàng thành công\",\"success\") ; hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n \r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n if(vc_window.code ===\"WIN00782CM\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n if (entry[\"loaive\"] == \"Vé trẻ em\") {\r\n entry[\"loaive\"] = \"1\";\r\n } else {\r\n entry[\"loaive\"] = \"2\";\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/formhoadoncode78',[\r\n \"app\", \r\n \"locale\", \r\n \"models/user\", \r\n \"models/findjson\", \r\n \"views/commonHD\", \r\n \"callApis/hoadon68\", \r\n \"callApis/customer\",\r\n \"views/DataStorage/DataHoaDon78\"], function (app, _, user, findJson, commonHD, hoadon68CallApis, customerCallApis, dataFormHd78) {\r\n var editmode = 0;\r\n var tongtienHDonBke = 0;\r\n var mau04 = {};\r\n var modeChangeView = 1; // 1 - Vào form theo dạng thường; 2 - vào form từ chức năng \"Sao chép chọn dải\"\r\n var el = [];\r\n\r\n function renderFormat(val) {\r\n if (typeof val == \"undefined\" || val == null || val == \"\" || val == 0) val = \"VND\";\r\n var url = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + val;\r\n var table_chitiet = webix.$$(\"hoadon68_chitiet\");\r\n var table_phi = webix.$$(\"hoadon68_phi\");\r\n var table = $$(\"invoiceForms\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var arr = JSON.parse(text);\r\n\r\n webix.storage.local.put(\"dsFieldFormat\", arr[0]);\r\n\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\", \"tlckhau\"];\r\n\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n case \"tlckhau\":\r\n field_name = \"tlckhau\";\r\n break;\r\n }\r\n\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n if (field_name == \"fee_price\") {\r\n var format_config = table_phi.getColumnConfig(\"tienphi\");\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n } else {\r\n var format_config = table_chitiet.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n }\r\n\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n\r\n table_chitiet.refreshColumns();\r\n table_phi.refreshColumns();\r\n\r\n for (var i = 0; i < arrayString.length; i++) {\r\n $$(arrayString[i]).refresh();\r\n }\r\n });\r\n }\r\n\r\n //FormButton\r\n var cols = [\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnBangKeSave\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var tongtienBangKeCT = webix.$$(\"tgtttbso\").getValue();\r\n var item = $$(\"invoiceForms\").getValues();\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (tongtienHDonBke != tongtienBangKeCT) {\r\n webix.message(\"Tổng tiền chi tiết bảng kê khác tổng tiền của hoá đơn!\", \"error\");\r\n return false;\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/hoadonSaveChange\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n commonHD.showWarningMessage(json);\r\n webix.message(\"Thêm bảng kê thành công !\", \"success\");\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n }\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnBangKeDelete\",\r\n label: \"Xoá\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 80,\r\n hidden: true,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n var url = app.config.host + \"/Invoice68/DeleteBangKeHoaDon?id=\" + item.id;\r\n var table = $$(\"invoiceForms\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, function (result) {\r\n if (result == \"true\") {\r\n webix.message(\"Đã xoá bảng kê !\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.$$(\"invoice68\").close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n } else {\r\n webix.message(\"Xoá không thành công !\", \"error\");\r\n }\r\n });\r\n }, 100);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n id: \"btnHoadonSave\",\r\n label: \"Lưu tạm (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonSave\").disable();\r\n setTimeout(function () {\r\n\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n $$(\"btnHoadonSave\").enable();\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n return;\r\n }\r\n if (it.kmai != null && it.kmai.toString() === \"1\") { // Kiểm tra it.kmai != null\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n var record_phi = $$(\"hoadon68_phi\").serialize();\r\n for (var i = 0; i < record_phi.length; i++) {\r\n var it = record_phi[i];\r\n\r\n if (it[\"tnphi\"] == null || it[\"tnphi\"] == \"\") {\r\n webix.message(\"Chưa nhập tên phí/lệ phí\");\r\n return;\r\n }\r\n }\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: record });\r\n\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: record_phi,\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n }, 100);\r\n $$(\"btnHoadonSave\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F11\",\r\n view: \"button\",\r\n id: \"btnHoadonCQT\",\r\n label: \"Ký và gửi CQT (F11)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n var self = this;\r\n $$(\"btnHoadonCQT\").disable();\r\n setTimeout(function () {\r\n var item = $$(\"invoiceForms\").getValues();\r\n if (item.nlap_temp != null) {\r\n var nlap_temp = new Date(item.nlap_temp);\r\n if ($$(\"nlap\").getValue() < nlap_temp) {\r\n webix.message(\"Ngày hoá đơn thay thế hoặc điều chỉnh không được nhỏ hơn hoá đơn gốc!\", \"error\");\r\n return;\r\n }\r\n }\r\n var table = $$(\"invoiceForms\");\r\n var record = $$(\"hoadon68_chitiet\").serialize();\r\n if (record.length == 0) {\r\n webix.message(\"Bạn chưa bổ sung chi tiết hàng hóa\");\r\n return;\r\n }\r\n var mauso = $$(\"khieu\").getValue().toString()[0];\r\n var tudongtinhtien = item.tudongtinhtien;\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n var windowno;\r\n if (app_cache[windowno] != null) {\r\n windowno = app_cache[\"data\"][0].code;\r\n }\r\n\r\n for (var i = 0; i < record.length; i++) {\r\n var it = record[i];\r\n var isHasDiscount = it[\"tiletienthuegtgtgiam\"] != null && it[\"tiletienthuegtgtgiam\"] != \"\" && it[\"tiletienthuegtgtgiam\"] != 0 && it[\"tiletienthuegtgtgiam\"] != '0';\r\n if (tudongtinhtien == \"0\") {\r\n if (mauso === \"2\" && !isHasDiscount) {\r\n record[i].thtien = record[i].tgtien;\r\n }\r\n }\r\n var it = record[i];\r\n if (windowno == \"WIN00788C\") {\r\n it.phanloaihd = 1;\r\n }\r\n if (it[\"ten\"] == null || it[\"ten\"] == \"\") {\r\n webix.message(\"Bạn chưa nhập tên hàng\");\r\n $$(\"btnHoadonCQT\").enable();\r\n return;\r\n }\r\n if (it.kmai.toString() === \"1\") {\r\n /*var bool = Number(it.tgtien) == Number(it.thtien) + Number(it.tthue);\r\n if (!bool) {\r\n webix.message(\"Tiền trước thuế + Tiền thuế != tiền sau thuế\");\r\n return;\r\n }*/\r\n if ((it[\"tsuat\"] == null || it[\"tsuat\"] == \"\") && (mauso === \"1\" || mauso === \"5\")) {\r\n webix.message(\"Bạn chưa nhập thuế suất hàng hóa \" + it[\"ten\"]);\r\n return;\r\n }\r\n }\r\n }\r\n /*if($$(\"lblCanhbao\").type==1){\r\n webix.message( $$(\"lblCanhbao\").getValue()+\". Không thể lưu!\", \"error\");\r\n return;\r\n }*/\r\n\r\n if (table.validate()) {\r\n var TTKhac = [];\r\n Object.keys(item).forEach(function (key) {\r\n if (key.includes(\"TTKhac_\")) {\r\n var test = $$(key);\r\n if (test.config.editor === \"nummeric\" || test.config.editor === \"autonumeric\") {\r\n TTKhac.push({\r\n ttruong: key.replace(\"TTKhac_\", \"\"),\r\n kdlieu: \"decimal\",\r\n dlieu: item[key],\r\n });\r\n }\r\n else if (test.config.view === \"text\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"string\", dlieu: item[key] });\r\n else if (test.config.view === \"datepicker\") TTKhac.push({ ttruong: key.replace(\"TTKhac_\", \"\"), kdlieu: \"dateTime\", dlieu: item[key] });\r\n }\r\n });\r\n var TTKhacItem = [];\r\n TTKhacItem.push({\r\n data: TTKhac,\r\n });\r\n item[\"hoadon68_khac\"] = TTKhacItem;\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n var details = [];\r\n details.push({ data: $$(\"hoadon68_chitiet\").serialize() });\r\n item[\"details\"] = details;\r\n var phi = [];\r\n phi.push({\r\n data: $$(\"hoadon68_phi\").serialize(),\r\n });\r\n item[\"hoadon68_phi\"] = phi;\r\n // hóa đơn không mã\r\n item.is_hdcma = 1;\r\n if (tudongtinhtien == \"0\") {\r\n if (item.tgtttbso === undefined || item.tgtttbso === \"\" || item.tgtttbso === null) {\r\n item.tgtttbso = item.tgtttbso_last;\r\n }\r\n }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n var isSaveCustomerInfo = $$('is_save_customer_info') != null && $$('is_save_customer_info').getValue();\r\n\r\n function afterSaveInvoiceSuccess(text) {\r\n var json = text.json();\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Lưu thông tin hóa đơn thành công!\", \"success\");\r\n \r\n var item = $$(\"invoiceForms\").getValues();\r\n if(item && modeChangeView == 2) {\r\n dataFormHd78.SetData(\"KHID\", item.cctbao_id);\r\n }\r\n webix.$$(\"invoice68\").close();\r\n\r\n if (item.hdon_id_old !== null && item.hdon_id === \"\" && item.tthai_old != \"Đã ký\") {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n } else {\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, json.data]);\r\n }\r\n\r\n var lsthdon_id = [];\r\n lsthdon_id.push(json.data.hdon_id);\r\n commonHD.ExcuteHoaDon(lsthdon_id, true, true);\r\n\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n\r\n function afterSaveInvoiceError(text) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(text.json() + XmlHttpRequest, \"error\");\r\n }\r\n\r\n if (isSaveCustomerInfo) {\r\n\r\n \r\n var code = $$('mnmua') != null ? $$('mnmua').getValue() : null;\r\n var buyer_name = $$('tnmua') != null ? $$('tnmua').getValue() : null;\r\n var name = $$('ten') != null ? $$('ten').getValue() : null;\r\n var tax_code = $$('mst') != null ? $$('mst').getValue() : null;\r\n var email = $$('email') != null ? $$('email').getValue() : null;\r\n var address = $$('dchi') != null ? $$('dchi').getValue() : null;\r\n var tel = $$('sdtnmua') != null ? $$('sdtnmua').getValue() : null;\r\n var bank_account = $$('stknmua') != null ? $$('stknmua').getValue() : null;\r\n var bank_name = $$('tnhmua') != null ? $$('tnhmua').getValue() : null;\r\nvar name_label = $$('ten') != null ? $$('ten').config.label : \"Tên\";\r\n var address_label = $$('dchi') != null ? $$('dchi').config.label : \"Địa chỉ\";\r\n\r\n var obj = {\r\n code: code,\r\n buyer_name: buyer_name,\r\n name: name,\r\n tax_code: tax_code,\r\n email: email,\r\n address: address,\r\n tel: tel,\r\n bank_account: bank_account,\r\n bank_name: bank_name,\r\n };\r\n\r\n var checkMessage = [];\r\n\r\n if (obj.code == \"\") checkMessage.push('\"Mã\" khách hảng là trường bắt buộc nhập\"');\r\n if (obj.name == \"\") checkMessage.push('\"' + name_label + '\" là trường bắt buộc nhập\"');\r\n if (obj.address == \"\") checkMessage.push('\"' + address_label + '\" khách hảng là trường bắt buộc nhập\"');\r\n\r\n var showConfirmUI = function () {\r\n webix.ui({\r\n view: \"window\",\r\n id: \"check-customer-modal\",\r\n type: \"modal\",\r\n modal: true,\r\n position: \"center\",\r\n head: {\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-form-check-customer\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Tạo mới khách hàng thất bại
\";\r\n },\r\n }\r\n ],\r\n },\r\n body: {\r\n padding: 10,\r\n rows: [\r\n {\r\n rows: checkMessage.map(function (message) {\r\n return {\r\n view: \"template\",\r\n template: \"▶ \" + message,\r\n autoheight: true, width: 350\r\n }\r\n }),\r\n },\r\n {\r\n view: \"template\", autoheight: true, template: \"
Chọn \\\"Tạo hóa đơn\\\" để tạo hóa đơn và không tạo mới khách hàng
\"\r\n },\r\n {\r\n cols: [\r\n {},\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Tạo hóa đơn\", type: \"form\", click: function () {\r\n $$('check-customer-modal').hide();\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n },\r\n {\r\n width: 100,\r\n view: \"button\", value: \"Nhập lại\", type: \"danger\", click: function () {\r\n $$('check-customer-modal').hide();\r\n table.enable();\r\n table.hideProgress();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n }).show()\r\n }\r\n\r\n if (checkMessage.length > 0) {\r\n showConfirmUI();\r\n } else {\r\n customerCallApis.saveCustomer(obj).then(function (res) {\r\n res = res.json();\r\n\r\n if (!res.status) {\r\n checkMessage.push(res.message.replace(\"P0001: \", \"\"));\r\n showConfirmUI();\r\n } else {\r\n\r\n webix.message(\"Lưu thông tin khách hàng thành công\", \"success\"); hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);\r\n }\r\n });\r\n }\r\n } else\r\n hoadon68CallApis.hoadonSaveChange(data_post)\r\n .then(afterSaveInvoiceSuccess)\r\n .catch(afterSaveInvoiceError);;\r\n\r\n }\r\n $$(\"btnHoadonCQT\").enable();\r\n }, 100);\r\n $$(\"btnHoadonCQT\").enable();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n this.getTopParentView().close();\r\n app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ];\r\n //FormDetail Tạo item trên trang from từ tab và data\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n css: \"headformchil\",\r\n head: {\r\n //view: \"toolbar\",\r\n // css: { \"box-shadow\": \"0 -2px #3498db inset !important\", \"background\": \"#ffffff !important\" },\r\n //css: { \"background\": \"#e6f2ff !important\" },\r\n height: 35,\r\n cols: [\r\n {\r\n id: \"head-iconInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n width: 35,\r\n template: \"\",\r\n },\r\n {\r\n id: \"head-formInvoice\",\r\n view: \"template\",\r\n css: \"headform\",\r\n template: function (obj) {\r\n return \"
Test Form
\";\r\n },\r\n },\r\n {\r\n view: \"icon\",\r\n icon: \"fas fa-question-circle\",\r\n id: \"help_InvoiceForms\",\r\n tooltip: _(\"HELPER\"),\r\n click: function () {\r\n // var form = webix.$$(\"window-form\");\r\n // hint_form(form.config.hint);\r\n },\r\n },\r\n ],\r\n },\r\n id: \"invoice68\",\r\n resize: true,\r\n fullscreen: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () { },\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"invoiceForms\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n // }\r\n },\r\n elements: el,\r\n },\r\n },\r\n setValues: function (item, winconfig, params) {\r\n\r\n var win = $$(this.$ui.id);\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n if (item.docngoaitetv) {\r\n item.docngoaitetv = 1;\r\n } else {\r\n item.docngoaitetv = 0;\r\n }\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n tablePhi.clearAll();\r\n tablePhi.load(urlPhi);\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n }\r\n\r\n if (editmode == 2) {\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"], item);\r\n },\r\n setValuesBangKe: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n tongtienHDonBke = item.tgtttbso;\r\n var form = win.getChildViews()[1];\r\n if (item != null) {\r\n this.editgiatri(item);\r\n\r\n form.setValues(item);\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = \"\";\r\n if (editmode == 4) {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n } else {\r\n url = app.config.host + \"/Invoice68/GetDataInvoiceDetail_BangKe?id=\" + item.id;\r\n }\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n // nếu có mẫu 04 (hóa đơn hủy)\r\n if (winconfig != null) {\r\n mau04 = winconfig;\r\n $$(\"btnHoadonSaveMau04\").show();\r\n $$(\"btnHoadonCQT\").destructor();\r\n $$(\"btnHoadonSave\").destructor();\r\n }\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n editgiatri: function (item) {\r\n if (item[\"tdlap\"] !== undefined) item[\"tdlap\"] = removeTimeZoneT(item[\"tdlap\"]);\r\n if (item[\"cqqdbants\"] !== undefined) item[\"cqqdbants\"] = removeTimeZoneT(item[\"cqqdbants\"]);\r\n if (item[\"tgvchdtu\"] !== undefined) item[\"tgvchdtu\"] = removeTimeZoneT(item[\"tgvchdtu\"]);\r\n if (item[\"tgvchdden\"] !== undefined) item[\"tgvchdden\"] = removeTimeZoneT(item[\"tgvchdden\"]);\r\n if (item[\"nqdbants\"] !== undefined) item[\"nqdbants\"] = removeTimeZoneT(item[\"nqdbants\"]);\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n if (item[\"hdktngay\"] !== undefined) item[\"hdktngay\"] = removeTimeZoneT(item[\"hdktngay\"]);\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n if (item[\"nbke\"] !== undefined) item[\"nbke\"] = removeTimeZoneT(item[\"nbke\"]);\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n //var form = webix.$$(\"invoiceForms\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n var icon = \"\";\r\n if (editmode == 1 || editmode == 4) {\r\n icon = \"\";\r\n } else {\r\n if (editmode == 2 || editmode == 5) icon = \"\";\r\n else icon = \"\";\r\n }\r\n\r\n webix.$$(\"head-iconInvoice\").setHTML(icon);\r\n webix.$$(\"head-iconInvoice\").refresh();\r\n },\r\n setModeChangeView: function (mode) {\r\n if(mode) {\r\n modeChangeView = mode;\r\n }\r\n },\r\n setNewInvoice: function () {\r\n var form = webix.$$(\"invoiceForms\");\r\n form.config.newInvoice = true;\r\n },\r\n copyValues: function (item) {\r\n var form = webix.$$(\"invoiceForms\");\r\n\r\n var tableDetail = webix.$$(\"hoadon68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"cthdon_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tableDetail.clearAll();\r\n tableDetail.parse(data);\r\n });\r\n var tablePhi = webix.$$(\"hoadon68_phi\");\r\n var urlPhi = app.config.host + \"/Invoice68/GetDataInvoicePhi?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlPhi, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n data[i][\"phi_id\"] = null;\r\n data[i][\"hdon_id\"] = null;\r\n }\r\n\r\n tablePhi.clearAll();\r\n tablePhi.parse(data);\r\n });\r\n var urlKhac = app.config.host + \"/Invoice68/GetDataInvoiceKhac?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlKhac, function (text) {\r\n var data = JSON.parse(text);\r\n for (var i = 0; i < data.length; i++) {\r\n try {\r\n if ($$(\"TTKhac_\" + data[i].ttruong) !== undefined && $$(\"TTKhac_\" + data[i].ttruong) !== null) $$(\"TTKhac_\" + data[i].ttruong).setValue(data[i][\"dlieu\"]);\r\n } catch (e) { }\r\n }\r\n });\r\n // tableDetail.clearAll();\r\n // tableDetail.load(url);\r\n item[\"tthdon\"] = 0;\r\n item[\"tthdon_original\"] = 0;\r\n item[\"tthdon_old\"] = 0;\r\n item[\"hdon_id\"] = null;\r\n item[\"hdon68_id_lk\"] = null;\r\n item[\"nky\"] = null;\r\n item[\"id\"] = webix.uid();\r\n item[\"giamthuebanhang20\"] = item[\"giamthuebanhang20\"] == true ? 1 : 0;\r\n item[\"hddckptquan\"] = item[\"hddckptquan\"] == true ? 1 : 0;\r\n item[\"nbke\"] = null;\r\n this.editgiatri(item);\r\n form.setValues(item);\r\n this.getFormat(item[\"dvtte\"]);\r\n },\r\n getFormat: function (val, data) {\r\n commonHD.renderFormat(val, false, data);\r\n },\r\n initUINew: function (cctbao_id) {\r\n $$(\"cctbao_id\").setValue(cctbao_id);\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/getKyhieu?cctbao_id=\" + cctbao_id, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (data.length > 0) {\r\n var form = $$(\"invoiceForms\");\r\n var values = form.getValues();\r\n values[\"khieu\"] = data[0][\"khhdon\"];\r\n values[\"mcqtcap\"] = data[0][\"mccqthue\"];\r\n values[\"tudongtinhtien\"] = 1;\r\n form.setValues(values);\r\n }\r\n });\r\n this.getFormat();\r\n },\r\n initUI: function (windowconfig) {\r\n var rp = windowconfig;\r\n var vc_window = rp[\"data\"][0];\r\n var tabs = vc_window.Tabs;\r\n $$(\"head-formInvoice\").define(\"template\", \"
\" + vc_window.name + \"
\");\r\n el = [];\r\n var col = [];\r\n var m = 0;\r\n\r\n if (vc_window.detail_layout != null && vc_window.detail_layout != \"\") {\r\n var layoutdetail = JSON.parse(vc_window.detail_layout);\r\n\r\n var layout_element = JSON.stringify(layoutdetail.elements);\r\n var json_layout = JSON.parse(layout_element);\r\n //console.log(json_layout);\r\n for (var i = 0; i < json_layout.length; i++) {\r\n el.push(json_layout[i]);\r\n }\r\n\r\n var jsonElement = findJson.getObjects(JSON.parse(JSON.stringify(el)), \"id\", \"\");\r\n\r\n for (var i = 0; i < jsonElement.length; i++) {\r\n //var item = jsonElement[i];\r\n //var item = jsonElement[i];\r\n var fields = rp[\"data\"][0][\"Tabs\"][0][\"Fields\"];\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (jsonElement[i].name == field.column_name) {\r\n item = commonHD.CreatItemMaterFromData(field);\r\n jsonElement[i] = item;\r\n\r\n findJson.findAndReplace(el, jsonElement[i].name, item);\r\n }\r\n }\r\n }\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n subCols.push(commonHD.CreatItemFromData(field, tab));\r\n }\r\n\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"detail_tab\") {\r\n var item = {\r\n id: \"detail_tab\",\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n table.add(item);\r\n table.select(item.id, \"ma\", false);\r\n table.edit({\r\n row: item.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.cthdon_id = null;\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"ma\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"ma\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \" Nhận excel chi tiết\" + \"\",\r\n view: \"button\",\r\n id: \"importRowDetail\",\r\n css: \"btnForm\",\r\n hidden: vc_window.code === \"WIN00788C\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = $$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n // if(item == null || item == \"\")\r\n // {\r\n // webix.message(\"Bạn chưa chọn hóa đơn cần nhận chi tiết !\", \"error\");\r\n // return;\r\n // }\r\n \r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Hóa đơn phải có trạng thái chờ ký, bạn mới có thể nhập excel chi tiết!\", \"error\");\r\n // return;\r\n // }\r\n \r\n require([\"views/forms/uploadexcelform\"], function(uploadForm){\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n debugger\r\n if(vc_window.code ===\"WIN00782C\"){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00017\", filename:\"Mẫu import chi tiết HD bán hàng.xlsx\"});\r\n }else if(vc_window.code ===\"WIN00785C\" || vc_window.code ===\"WIN00786C\"\r\n || vc_window.code ===\"WIN00783C\"|| vc_window.code ===\"WIN00784C\"\r\n ){\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00024\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n }\r\n else{\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id : \"EX00011\", filename:\"Nhan chi tiet mot HD68.xlsx\"});\r\n\r\n }\r\n webix.$$(\"uploader\").hide();\r\n });\r\n\r\n // var table = webix.$$(\"hoadon68_chitiet\");\r\n\r\n // table.editStop();\r\n\r\n // var item = table.getSelectedItem();\r\n // if (item == null || item == undefined) {\r\n // webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var copy = webix.copy(item);\r\n // copy.cthdon_id = null;\r\n // copy.id = webix.uid();\r\n\r\n // table.add(copy);\r\n // table.unselect(item.id);\r\n // table.select(copy.id, \"ma\", false);\r\n // table.edit({\r\n // row: copy.id,\r\n // column: \"ma\",\r\n // });\r\n },\r\n },\r\n }\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_chitiet\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onAfterLoad: function () {\r\n var table = this;\r\n var data = table.serialize();\r\n data.forEach(function (entry) {\r\n if (entry[\"stckhau\"] != undefined || entry[\"tlckhau\"] != undefined) {\r\n if (entry[\"stckhau\"] != 0 || entry[\"tlckhau\"] != 0) {\r\n var ck = $$(\"check_chietkhau\");\r\n\r\n if (ck != undefined) {\r\n ck.setValue(1);\r\n return false;\r\n }\r\n }\r\n }\r\n });\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onCheck: function (row, column, state) {\r\n var table = this;\r\n if (column == \"khuyen_mai\") {\r\n if (state == true) {\r\n }\r\n }\r\n },\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n var selectedItem = $$(\"hoadon68_chitiet\").getItem(editor.row);\r\n if (!selectedItem.kmai) selectedItem.kmai = \"1\";\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, tab.foreign_key, item);\r\n m++;\r\n //cells.push(item);\r\n }\r\n if (tab.tab_type == \"Detail\" && tab.foreign_key === \"phi_tab\") {\r\n var item = {\r\n id: \"phi_tab\",\r\n header: \"Tiền phí/lệ phí\",\r\n select: \"cell\",\r\n hidden: tab.hidden,\r\n body: {\r\n rows: [\r\n {\r\n view: \"toolbar\",\r\n height: 40,\r\n cols: [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F9)\" + \"\",\r\n id: \"addrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n var item = {\r\n id: webix.uid(),\r\n tienphi: 0,\r\n };\r\n table.add(item);\r\n table.select(item.id);\r\n table.edit({\r\n row: item.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F8)\" + \"\",\r\n id: \"removerow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n table.editStop();\r\n var item = table.getSelectedItem();\r\n if (!webix.isUndefined(item)) {\r\n table.remove(item.id);\r\n table.clearSelection();\r\n return;\r\n }\r\n\r\n var editor = table.getEditState();\r\n\r\n if (!webix.isUndefined(editor)) {\r\n table.remove(editor.row);\r\n table.clearSelection();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 65,\r\n label: ' ' + '' + \" (F7)\" + \"\",\r\n view: \"button\",\r\n id: \"copyrow2\",\r\n css: \"btnForm\",\r\n on: {\r\n onItemClick: function (id, e) {\r\n var table = webix.$$(\"hoadon68_phi\");\r\n\r\n table.editStop();\r\n\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần copy !\", \"error\");\r\n return;\r\n }\r\n var copy = webix.copy(item);\r\n copy.id = webix.uid();\r\n\r\n table.add(copy);\r\n table.unselect(item.id);\r\n table.select(copy.id, \"tnphi\", false);\r\n table.edit({\r\n row: copy.id,\r\n column: \"tnphi\",\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n id: \"hoadon68_phi\",\r\n editable: true,\r\n select: \"cell\",\r\n drag: true,\r\n scroll: true,\r\n columns: subCols,\r\n select_change: tab.select_change,\r\n cell_editstop: tab.cell_editstop,\r\n after_addrow: tab.after_addrow,\r\n after_delrow: tab.after_delrow,\r\n oncheck: tab.oncheck,\r\n on: {\r\n onAfterAdd: function (id, index) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_addrow != null) {\r\n var fn = Function(\"id\", \"index\", \"tableId\", this.config.after_addrow);\r\n fn(id, index, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterDelete: function (id) {\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.after_delrow != null) {\r\n var fn = Function(\"id\", \"tableId\", this.config.after_delrow);\r\n fn(id, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n onAfterEditStop: function (state, editor, ignore) {\r\n if (state.value === state.old) return;\r\n var item_inf = webix.$$(\"invoiceForms\").getValues();\r\n var tudongtinhtien = item_inf[\"tudongtinhtien\"];\r\n if (tudongtinhtien == undefined || tudongtinhtien == \"1\") {\r\n if (this.config.cell_editstop != null) {\r\n var fn = Function(\"state\", \"editor\", \"ignore\", \"tableId\", this.config.cell_editstop);\r\n fn(state, editor, ignore, this.config.id);\r\n }\r\n }\r\n commonHD.CanhBaoTinhTien();\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n };\r\n\r\n findJson.findAndReplace(el, \"phi_tab\", item);\r\n m++;\r\n }\r\n }\r\n }\r\n\r\n el.push({\r\n // paddingY:10,\r\n margin: 10,\r\n cols: cols,\r\n });\r\n webix.ui(el, $$(\"invoiceForms\"));\r\n //$$(\"tab_replace\").define(\"tabbar\",{width:150 * m});\r\n //console.log(jsonElement);\r\n\r\n var result = webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00505\").response;\r\n var count = JSON.parse(result)[0].count;\r\n if (count > 0) {\r\n $$(\"btnHoadonCQT\").hide();\r\n }\r\n\r\n this.SetDefaultValue(windowconfig);\r\n }\r\n },\r\n SetDefaultValue: function (winconfig) {\r\n\r\n var form = webix.$$(\"invoiceForms\");\r\n var item = form.getValues();\r\n var vc_window = winconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Normal\" || tab.tab_type == \"Master\") {\r\n var fields = tab.Fields;\r\n\r\n for (var j = 0; j < fields.length; j++) {\r\n var field = fields[j];\r\n\r\n if (field.column_name == tab.table_name + \"_id\") {\r\n item[field.column_name] = null;\r\n }\r\n\r\n if (field.column_name == \"branch_code\") {\r\n item[field.column_name] = user.getDvcsID();\r\n }\r\n\r\n if (field.default_value != null) {\r\n var defaultValue = field.default_value.toString();\r\n\r\n if (defaultValue.startsWith(\"@Default=\")) {\r\n item[field.column_name] = defaultValue.replace(\"@Default=\", \"\");\r\n }\r\n\r\n if (defaultValue.startsWith(\"@JS=\")) {\r\n var fn = Function(defaultValue.replace(\"@JS=\", \"\"));\r\n item[field.column_name] = fn();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n form.setValues(item);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/kyhoadon',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/modules/minvoiceplugin\"\r\n], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Ký hóa đơn chờ ký\",\r\n //fullscreen: true,\r\n width: 600,\r\n height: 600,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Từ ngày\",\r\n width: 290,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Đến ngày\",\r\n width: 290,\r\n labelPosition: \"top\"\r\n },\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: \"Ký hiệu\",\r\n width: 600,\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00029\"\r\n },\r\n {\r\n view: \"combo\",\r\n width: 600,\r\n name: \"cerSerial\",\r\n label: \"Chứng thư số\",\r\n labelPosition: \"top\",\r\n id: \"txtCerSerial\",\r\n options: {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n body: {\r\n columns: [\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 550\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Danh sách hóa đơn chờ ký\",\r\n type: \"section\"\r\n },\r\n {\r\n\r\n view: \"datatable\",\r\n select: \"row\",\r\n id: \"tblHoadon\",\r\n resizeColumn: true,\r\n datafetch: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n })\r\n }\r\n // onKeyPress: function (code, e) {\r\n // var table = this;\r\n\r\n // if (e.key == \"Enter\") {\r\n // var win = this.getTopParentView();\r\n // var toolbar = win.getChildViews()[1].getChildViews()[0];\r\n\r\n // var btnChon = toolbar.getChildViews()[0];\r\n // btnChon.callEvent(\"onClick\");\r\n // }\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"chon1\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: 'C',\r\n uncheckValue: 'K',\r\n template: \"{common.checkbox()}\"\r\n },\r\n { id: \"index\", sort: \"int\", header: \"STT\", width: 50 },\r\n { id: \"inv_InvoiceAuth_id\", header: \"ID hóa đơn\", width: 250, hidden: true },\r\n {\r\n id: \"invoice_issued_date\", header: \"Ngày hóa đơn\", width: 150, format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n { id: \"inv_invoiceNumber\", header: \"Số hóa đơn\" },\r\n {\r\n id: \"total_amount\", header: \"Tổng tiền\", width: 150, format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n })\r\n }\r\n ],\r\n pager: \"selectPagerA\"\r\n },\r\n {\r\n id: \"selectPagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\", view: \"button\", label: \"Tải dữ liệu (F9)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var item = form.getValues();\r\n\r\n var parameter = {\r\n command: \"CM00020\",\r\n parameter: {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay,\r\n inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n }\r\n };\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n //form.disable();\r\n form.showProgress();\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, parameter, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n \r\n if (!json.hasOwnProperty(\"error\")) {\r\n\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu\", \"error\");\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n form.hideProgress();\r\n return;\r\n }\r\n else {\r\n form.hideProgress();\r\n $$(\"btnNhan\").enable();\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n var table = $$(\"tblHoadon\");\r\n table.parse(json);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", id: \"btnNhan\", name: \"btnNhan\", view: \"button\", label: \"Nhận (F10)\", align: \"center\", width: 80,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n // var item = form.getValues();\r\n\r\n // var parameter = {\r\n // command: \"CM00020\",\r\n // parameter: {\r\n // ma_dvcs: user.getDvcsID(),\r\n // tu_ngay: item.tu_ngay,\r\n // den_ngay: item.den_ngay,\r\n // inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n // }\r\n // };\r\n\r\n // var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n var json = $$(\"tblHoadon\").serialize();\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu !\", \"error\");\r\n form.enable();\r\n form.hideProgress();\r\n return;\r\n }\r\n //console.log(json);\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, parameter, function (text) {\r\n\r\n // var json = JSON.parse(text);\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n\r\n // if (json.length == 0) {\r\n // webix.message(\"Không có dữ liệu\");\r\n // return;\r\n // }\r\n\r\n // console.log(json);\r\n // console.log(json.data);\r\n\r\n // var dshoadon = this.$scope.ui(dshoadon.$ui);\r\n // dshoadon.$ui.show();\r\n\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n \r\n var win = $$(\"chukyso-win\");\r\n var server_cert = win.config.server_cert;\r\n\r\n if (server_cert == null) {\r\n var hub = plugin.hub();\r\n hub.off('resCommand');\r\n\r\n hub.on('resCommand', function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var promises = [];\r\n\r\n var array = json.data;\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n var parameters = {\r\n InvoiceXmlData: item.InvoiceXmlData,\r\n inv_InvoiceAuth_id: item.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters);\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n });\r\n\r\n\r\n }\r\n });\r\n\r\n var promises = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n if (json[i].chon1 != null && json[i].chon1 != \"\") {\r\n if (json[i].chon1 == \"C\") {\r\n //console.log(json[i]);\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n promises.push(a);\r\n }\r\n }\r\n\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var arrays = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n arrays.push(results[i].json());\r\n }\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n var item = form.getValues();\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: arrays,\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: resultTime.dateKy,\r\n listcerts: [\r\n {\r\n so_serial: item.cerSerial\r\n }\r\n ]\r\n };\r\n\r\n hub.invoke('execCommand', 'SignListInvoices', JSON.stringify(arg));\r\n });\r\n }\r\n else {\r\n\r\n var promises = [];\r\n\r\n // for (var i = 0; i < json.length; i++) {\r\n // if (json[i].chon1 != null && json[i].chon1 != \"\") {\r\n // if (json[i].chon1 == \"C\") {\r\n\r\n // var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n // promises.push(a);\r\n // }\r\n // }\r\n\r\n // }\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n // console.log(json[i]);\r\n if (json[i].chon1 == null && json[i].chon1 == \"\") {\r\n continue;\r\n }\r\n else {\r\n if (json[i].chon1 == \"C\") {\r\n //console.log(json[i]);\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n\r\n //var text = xhr.responseText;\r\n // var b = JSON.parse(a.responseText);\r\n //console.log(a);\r\n promises.push(a);\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n console.log(results);\r\n var server_cert = win.config.server_cert;\r\n\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n xml: json[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: json[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n //console.log(text);\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Invoice/SaveXml\", parameters, function (text) {\r\n //console.log(text);\r\n });\r\n\r\n promises.push(a);\r\n }\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }\r\n }\r\n // else {\r\n // webix.message(json.error);\r\n\r\n // var form = webix.$$(\"chukyso-form\");\r\n // form.enable();\r\n // form.hideProgress();\r\n\r\n // }\r\n\r\n //});\r\n // }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n // onBeforeShow: function()\r\n // {\r\n // webix.$$(\"btnNhan\").define(\"disabled\", true);\r\n // webix.$$('btnNhan').disable();\r\n // }\r\n\r\n },\r\n // $oninit: function (view, $scope) {\r\n // webix.$$(\"btnNhan\").disable();\r\n // },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/kynhieuhoadon',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"], \"error\");\r\n }\r\n else {\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n //console.log(parameters);\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveXml\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai == \"Đã ký\") {\r\n\r\n // var table = webix.$$(\"dmwindowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00025\",\r\n parameter: {\r\n\r\n }\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n // auto send SMS \r\n if (json[1].gia_tri == \"C\") {\r\n var data = { id: item.inv_InvoiceAuth_id };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Sms/NotifyInvoice\", data, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n\r\n\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n // send email ma = 'AUTO_SEND_EMAIL'\r\n // if (json[0].gia_tri == \"C\") {\r\n // var data = { inv_InvoiceAuth_id: item.inv_InvoiceAuth_id, nguoinhan: item.inv_buyerEmail, tieude: \"Thông báo xuất hóa đơn điện tử\" };\r\n\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/AutoSendInvoiceByEmail\", data, function (text) {\r\n // var data = JSON.parse(text);\r\n\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n\r\n\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n // }\r\n\r\n\r\n });\r\n // webix.modalbox.hide();\r\n // webix.message(\"Ký hóa đơn thành công !\", \"debug\");\r\n }\r\n\r\n });\r\n }\r\n });\r\n }\r\n\r\n function signCertFile() {\r\n var json = $$(\"tblHoadon\").serialize();\r\n var data = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.chon1 != null && item.chon1 != undefined) {\r\n if (item.chon1 == \"C\") {\r\n var inv = {\r\n inv_invoiceauth_id: item.inv_InvoiceAuth_id\r\n };\r\n\r\n data.push(inv);\r\n }\r\n }\r\n }\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n var postData = {\r\n invs: data,\r\n so_serial: cert.so_serial\r\n };\r\n\r\n var url = app.config.host + \"/Invoice/SignListInvoiceCertFile\";\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, postData, function (text) {\r\n var res = JSON.parse(text);\r\n\r\n if (res.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: res.error });\r\n }\r\n else {\r\n webix.message(\"Đã thực hiện xong\");\r\n }\r\n });\r\n }\r\n\r\n var layout = {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Ký hóa đơn chờ ký\",\r\n width: 600,\r\n height: 600,\r\n on: {\r\n onBeforeShow: function () {\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\"\r\n }\r\n }, {\r\n error: function (text, data, XmlHttpRequest) {\r\n //webix.modalbox.hide(box);\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\"\r\n });\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var c_result = JSON.parse(text);\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n $$(\"chukyso-win\").config.kytaptrung = item.gia_tri;\r\n }\r\n if (item.ma == \"SERVER_CERT\") {\r\n $$(\"chukyso-win\").config.server_cert = item.gia_tri;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Từ ngày\",\r\n labelPosition: \"top\",\r\n value: new Date()\r\n },\r\n {\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n format: \"%d/%m/%Y\",\r\n label: \"Đến ngày\",\r\n labelPosition: \"top\",\r\n value: new Date()\r\n },\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"inv_InvoiceCode_id\",\r\n label: \"Ký hiệu\",\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00029\",\r\n required: true,\r\n invalidMessage: \"Ký hiệu hóa đơn không được để trống !\"\r\n // validate: webix.rules.isEmpty\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"cerSerial\",\r\n label: \"Chứng thư số\",\r\n labelPosition: \"top\",\r\n id: \"txtCerSerial\",\r\n required: true,\r\n invalidMessage: \"Chứng thư số không được để trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n body: {\r\n columns: [\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 550\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Danh sách hóa đơn chờ ký\",\r\n type: \"section\"\r\n },\r\n {\r\n\r\n view: \"datatable\",\r\n select: \"row\",\r\n id: \"tblHoadon\",\r\n resizeColumn: true,\r\n datafetch: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n })\r\n }\r\n // onKeyPress: function (code, e) {\r\n // var table = this;\r\n\r\n // if (e.key == \"Enter\") {\r\n // var win = this.getTopParentView();\r\n // var toolbar = win.getChildViews()[1].getChildViews()[0];\r\n\r\n // var btnChon = toolbar.getChildViews()[0];\r\n // btnChon.callEvent(\"onClick\");\r\n // }\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"chon1\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 55,\r\n checkValue: 'C',\r\n uncheckValue: 'K',\r\n template: \"{common.checkbox()}\"\r\n },\r\n { id: \"index\", sort: \"int\", header: \"STT\", width: 50 },\r\n { id: \"inv_InvoiceAuth_id\", header: \"ID hóa đơn\", width: 250, hidden: true },\r\n {\r\n id: \"invoice_issued_date\", header: \"Ngày hóa đơn\", width: 150, format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n { id: \"inv_invoiceNumber\", header: \"Số hóa đơn\" },\r\n {\r\n id: \"total_amount\", header: \"Tổng tiền\", width: 150, format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n })\r\n }\r\n ],\r\n pager: \"selectPagerA\"\r\n },\r\n {\r\n id: \"selectPagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\"\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F9\", view: \"button\", label: \"Tải dữ liệu (F9)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n\r\n var parameter = {\r\n command: \"CM00020\",\r\n parameter: {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay,\r\n inv_InvoiceCode_id: item.inv_InvoiceCode_id\r\n }\r\n };\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n //form.disable();\r\n form.showProgress();\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url, parameter, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n\r\n if (json.length == 0) {\r\n webix.message(\"Không có dữ liệu\", \"error\");\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n form.hideProgress();\r\n return;\r\n }\r\n else {\r\n form.hideProgress();\r\n $$(\"btnNhan\").enable();\r\n var table = $$(\"tblHoadon\");\r\n //table.load(table.config.url);\r\n table.clearAll();\r\n var table = $$(\"tblHoadon\");\r\n table.parse(json);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", view: \"button\", id: \"btnNhan\", name: \"btnNhan\", type: \"form\", label: \"Nhận (F10)\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n var json = $$(\"tblHoadon\").serialize();\r\n\r\n if (json.length == 0) {\r\n\r\n webix.message(\"Không có dữ liệu !\", \"error\");\r\n form.enable();\r\n form.hideProgress();\r\n return;\r\n }\r\n var win = $$(\"chukyso-win\");\r\n\r\n var kytaptrung = win.config.kytaptrung;\r\n var server_cert = win.config.server_cert;\r\n\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Đang ký hóa đơn .... \",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n //clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n }\r\n });\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n var d = 0;\r\n var d1 = 0;\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.chon1 != undefined) {\r\n if (item.chon1 == \"C\") {\r\n d1 = d1 + 1;\r\n console.log(d1);\r\n var a = webix.ajax(app.config.host + \"/Invoice/ExportXml?id=\" + item.inv_InvoiceAuth_id);\r\n\r\n webix.promise.all([a]).then(function (results) {\r\n var a_result = results[0].json();\r\n\r\n signOnServerFile(a_result, cert, server_cert);\r\n d = d + 1;\r\n console.log(d);\r\n\r\n if (d == d1) {\r\n webix.modalbox.hide(box);\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n //webix.modalbox.hide(box);\r\n //clearTimeout(interVal);\r\n\r\n }).fail(function (err) {\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: err,\r\n type: \"alert-error\"\r\n });\r\n });\r\n }\r\n }\r\n }\r\n //console.log(d);\r\n\r\n // var interVal = setTimeout(function () {\r\n\r\n // var txtCer = $$(\"txtCerSerial\");\r\n // var cert = txtCer.getList().getSelectedItem();\r\n\r\n // clearTimeout(interVal);\r\n // webix.modalbox.hide(box);\r\n\r\n // }, 500);\r\n\r\n var tableHD = webix.$$(\"tblHoadon\");\r\n tableHD.clearAll();\r\n form.enable();\r\n form.hideProgress();\r\n\r\n //tableHD.load(tableHD.config.url);\r\n\r\n // var table = webix.$$(\"windowData\");\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n }\r\n else {\r\n if (kytaptrung == \"C\") {\r\n var promises = [];\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n\r\n if (json[i][\"chon1\"] != null && json[i][\"chon1\"] == \"C\") {\r\n var a = webix.ajax().get(app.config.host + \"/Invoice/ExportXml?id=\" + json[i].inv_InvoiceAuth_id);\r\n promises.push(a);\r\n }\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n var server_cert = win.config.server_cert;\r\n\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n xml: json[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: json[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var promises = [];\r\n\r\n for (var i = 0; i < results.length; i++) {\r\n var json = results[i].json();\r\n\r\n var parameters = {\r\n InvoiceXmlData: json.xml,\r\n inv_InvoiceAuth_id: json.inv_InvoiceAuth_id\r\n };\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Invoice/SaveXml\", parameters, function (text) {\r\n });\r\n\r\n promises.push(a);\r\n }\r\n\r\n webix.promise.all(promises).then(function (results) {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n else {\r\n var txtCer = $$(\"txtCerSerial\");\r\n var cert = txtCer.getList().getSelectedItem();\r\n\r\n if (cert.cert_type == \"FILE\") {\r\n signCertFile();\r\n return;\r\n }\r\n\r\n var data = [];\r\n for (var i = 0; i < json.length; i++) {\r\n if (json[i][\"chon1\"] != null && json[i][\"chon1\"] == \"C\") {\r\n data.push(json[i].inv_InvoiceAuth_id);\r\n }\r\n }\r\n //var url = app.config.host + \"/Invoice/GetXmlSignInvoices\";\r\n // var url = app.config.host + \"/Invoice/GetXmlSignInvoices?inv_InvoiceCode_id=\" + item.inv_InvoiceCode_id\r\n // + \"&tu_ngay=\" + moment(item.tu_ngay).format(\"DD/MM/YYYY\") + \"&den_ngay=\" + moment(item.den_ngay).format(\"DD/MM/YYYY\") + \"&inv_invoiceAuth_id=\" + promises_auth_base;\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký hóa đơn hoặc Plugin ký hóa đơn chưa được bật !\", \"error\");\r\n return;\r\n }\r\n else {\r\n\r\n hub.off('resCommand');\r\n hub.on('resCommand', function (result) {\r\n\r\n var json = JSON.parse(result);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var win = $$(\"chukyso-win\");\r\n win.close();\r\n\r\n // webix.message(\"Ký thành công !\", \"success\");\r\n }\r\n });\r\n\r\n // hub.off('resNotice');\r\n // hub.on('resNotice', function (result) {\r\n // webix.message(result, \"debug\");\r\n // });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n var item = form.getValues();\r\n\r\n var token = user.getAccessToken();\r\n var dvcs = user.getDvcsID();\r\n var language = user.getLanguage();\r\n\r\n var bear = token + \";\" + dvcs + \";\" + language;\r\n var url;\r\n if (window.location.protocol == \"file:\") {\r\n url = \"http://localhost:18374\";\r\n }\r\n else {\r\n url = window.location.origin;\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n data: data,\r\n // mst: \"0100686209\",\r\n mst: \"minvoice\", // đang fix cứng.sau này có thể fix\r\n username: user.getCurrentUser(),\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n token: bear,\r\n url: url,\r\n dateKy: resultTime.dateKy,\r\n listcerts: [\r\n {\r\n so_serial: item.cerSerial\r\n }\r\n ]\r\n };\r\n\r\n hub.invoke('execCommand', 'SignListInvoiceV2', JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success SignListInvoiceV2!\")\r\n })\r\n .fail(function (error) {\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n\r\n\r\n }\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/license',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"dmtab-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin bản quyền\",\r\n\t\t\tbody: {\r\n\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: {\r\n\t\t\t\t\tlabelWidth: 60,\r\n\t\t\t\t\tlabelPosition: \"top\"\r\n\t\t\t\t},\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"license-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tborderless: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"ms_thue\",\r\n\t\t\t\t\t\tlabel: _(\"MS_THUE\"),\r\n\t\t\t\t\t\twidth: 450,\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"ten_dvcs\",\r\n\t\t\t\t\t\tlabel: _(\"TEN_DON_VI\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"autonumeric\",\r\n\t\t\t\t\t\tname: \"sl_hd\",\r\n\t\t\t\t\t\tlabel: _(\"SL_HD_DK\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tcss: \"mcls_readonly_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"autonumeric\",\r\n\t\t\t\t\t\tname: \"sl_dk_them\",\r\n\t\t\t\t\t\tlabel: _(\"SL_HD_THEM\"),\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Số lượng đăng ký thêm không được bằng 0 !\",\r\n\t\t\t\t\t\tvalidate: webix.rules.isNotEmpty\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"key_license\",\r\n\t\t\t\t\t\tlabel: _(\"KEY_LICENSE\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\tinputAlign: \"center\",\r\n\t\t\t\t\t\tcss: \"mcls_license_text\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", id: \"btnSave\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\tif (item.sl_dk_them == 0 || item.sl_dk_them == \"\" || item.sl_dk_them == null) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Số lượng đăng ký thêm không được để trống hoặc bằng 0 !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/License/Register\";\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.bind(this)\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(url, item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar interVal = setInterval(function () {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/License/CheckLicense?id=\" + result.id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax(url, {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror: function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInterval(interVal);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsuccess: function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!result.hasOwnProperty(\"error\")) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar values = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.key_license = result.key_license;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.sl_dk_them = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalues.sl_hd = result.sl_hd;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.setValues(values);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearInterval(interVal);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}, 3000);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(result.error);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"license-form\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"dmtab-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/lichsuemail_bienlai',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 700,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số biên lai\", width: 100, editor: \"text\" },\r\n { id: \"series_invoice\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"stt\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/forms/lichsuemailtncn',[\"app\", \"locale\"], function (app, _) {\r\n function initUI(inv_InvoiceAuth_id) {\r\n // var model = { inv_InvoiceAuth_id: inv_InvoiceAuth_id };\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Invoice/history_email\", model, function (text) {\r\n // var data = JSON.parse(text);\r\n // if (!data.hasOwnProperty(\"error\")) {\r\n // $$('email-form').setValue(data);\r\n // }\r\n // else {\r\n // webix.message(data.error, \"error\");\r\n // }\r\n // });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"email-win\",\r\n position: \"center\",\r\n head: \"Lịch sử gửi Email\",\r\n width: 700,\r\n height: 300,\r\n move: true,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"email-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"datatable\",\r\n header: \"Lịch sử gửi Email\",\r\n id: \"tbl_email\",\r\n editable: false,\r\n resizeColumn: true,\r\n select: true,\r\n // fixedRowHeight: true,\r\n // rowLineHeight: 25,\r\n // rowHeight: 25,\r\n //autoheight:true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n var url = app.config.host + \"/Invoice/InvoiceHistorySendEmail?inv_invoiceauth_id=\" + inv_invoiceauth_id;\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onresize: webix.once(function () {\r\n this.adjustRowHeight(\"send_type\", true);\r\n }),\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n // var btnEdit = $$(\"btncskh\");\r\n // btnEdit.callEvent(\"onClick\");\r\n //webix.message(\"Click MobiFone Invoice\", \"error\");\r\n },\r\n onBeforeRender: function () {\r\n //$$(\"tbl_email\").refresh();\r\n //$$(\"tbl_email\").define(\"pager\", kk);\r\n },\r\n },\r\n columns: [\r\n { id: \"stt\", header: \"STT\", width: 40 },\r\n { id: \"invoice_number\", name: \"invoice_number\", header: \"Số chứng từ\", width: 100, editor: \"text\" },\r\n { id: \"series_invoice\", header: \"Ký hiệu\", width: 90, editor: \"text\" },\r\n { id: \"user_send\", name: \"user_send\", header: \"Người gửi\", width: 130, editor: \"text\" },\r\n {\r\n id: \"send_date\",\r\n name: \"send_date\",\r\n header: \"Ngày gửi\",\r\n width: 110,\r\n editor: \"date\",\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n sort: \"date\",\r\n },\r\n { id: \"send_to\", name: \"send_to\", header: \"Gửi đến\", width: 150, editor: \"text\" },\r\n { id: \"send_type\", name: \"send_type\", header: \"Loại gửi\", width: 150, editor: \"text\" },\r\n ],\r\n pager: \"pagerB\",\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n this.sort({ by: \"stt\", dir: \"desc\" });\r\n },\r\n },\r\n {\r\n id: \"pagerB\",\r\n view: \"pager\",\r\n size: 5,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n webix.$$(\"email-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n };\r\n});\r\n\ndefine('views/forms/link_sso_nologin',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"listuser-win\", position: \"center\",\r\n\t\t\thead: \"Liên kết tài khoản SSO\",\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"listuser-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{ view: \"text\", id: \"username1\", name: \"username\", label: \"Tên truy cập\", required: true, css: \"mcls_uppercase\", invalidMessage: \"Tên truy cập để trống!\", labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"password1\", name: \"password\", type: \"password\", label: \"Mật khẩu\", invalidMessage: \"Mật khẩu không được để trống\", required: true, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"email_sso\", name: \"email_sso\", placeholder: \"Nhập địa chỉ Email SSO\", label: \"Email\", required: true, invalidMessage: \"Email để trống hoặc nhập không đúng định dạng!\", validate: webix.rules.isEmail, labelPosition: \"top\" },\r\n\t\t\t\t\t{ view: \"text\", id: \"otp\", disabled: true, name: \"otp\", label: \"Mã OTP\", labelPosition: \"top\" },\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"btn-sendOtp\", label: \"Gửi OTP\", type: \"form\", align: \"center\", width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\tif ($$(\"password\").isVisible()) {\r\n\t\t\t\t\t\t\t\t\t\twebix\r\n\t\t\t\t\t\t\t\t\t\t\t.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.post(\r\n\t\t\t\t\t\t\t\t\t\t\t\tapp.config.host + \"/Account/VerifyPasswordAndGenOTPSSO\", item,\r\n\t\t\t\t\t\t\t\t\t\t\t\tfunction (text, data) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar result = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (result.error != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(result.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"confirm-link-btn\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"otp\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"btn-sendOtp\").setValue(\"Gửi lại OTP\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"email_sso\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"username1\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").define(\"readonly\", \"true\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").define(\"css\", \"mcls_readonly_text\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"password1\").refresh();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Gửi yêu cầu thành công!\", \"success\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", id: \"confirm-link-btn\", label: \"Xác nhận liên kết\", type: \"success\", align: \"center\", disabled: true, width: 120, click: function () {\r\n\r\n\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"listuser-form\");\r\n\r\n\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (item.otp == null||item.otp == \"\") {\r\n\t\t\t\t\t\t\t\t\t\twebix.message(\"Mã OTP không được để trống!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\twebix.extend(form, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\tform.disable();\r\n\t\t\t\t\t\t\t\t\tform.showProgress();\r\n\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/Account/VerifyOtpSsoNoLogin\", item, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tif (!data.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Liên kết thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.modalbox({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"LIÊN KẾT THÀNH CÔNG!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Quý khách vui lòng đăng nhập bằng tài khoản SSO để tiếp tục sử dụng dịch vụ.\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttons: [\"OK\"],\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function() {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.location.reload();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.message(data.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tform.enable();\r\n\t\t\t\t\t\t\t\t\t\t\tform.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", label: \"Hủy bỏ (ESC)\", hotkey: \"esc\", type: \"danger\", align: \"center\", width: 120, click: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"listuser-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\t\t},\r\n\t\t$oninit: function () {\r\n // Load data from API and fill the form\r\n\t\t\t\r\n\t\t\tvar apiUrl = app.config.sso + \"/partner/getInfo\";\r\n\t\t\twebix.ajax().get(apiUrl, function (text) {\r\n\t\t\t\tvar userData = JSON.parse(text);\r\n\t\t\t\tvar userInfo = userData.result.userInfo;\r\n\t\t\t\tvar form = $$(\"listuser-form\");\r\n\t\t\t\tform.setValues(userInfo);\r\n });\r\n }\r\n\t};\r\n\r\n});\ndefine('views/forms/loadDataReport',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\"\r\n], function (app, _, user) {\r\n\tvar editmode = 0;\r\n\tvar _date = new Date();\r\n\tvar _month = _date.getMonth() + 1;\r\n\tfunction subviewT() {\r\n\t\t$$('cbQuy').define('label', \"Tháng\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]);\r\n\t}\r\n\r\n\tfunction subviewQ() {\r\n\r\n\t\t$$('cbQuy').define('label', \"Quý\");\r\n\t\t$$('cbQuy').refresh();\r\n\t\t$$('cbQuy').define('options', [\"1\", \"2\", \"3\", \"4\"]);\r\n\t}\r\n\r\n\tfunction checkHasComp(el, comp) {\r\n\t\tvar rs = false;\r\n\t\tif(comp == null) {\r\n\t\t\treturn rs;\r\n\t\t}\r\n\r\n\t\tfor(var i = 0; i < el.length; i++) {\r\n\t\t\tvar element = el[i];\r\n\t\t\tif(element != null && element.cols != null) {\r\n\t\t\t\tfor(var j = 0; j < element.cols.length; j++) {\r\n\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == comp.id) {\r\n\t\t\t\t\t\trs = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn rs;\r\n\t}\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tid: \"loadDataReportWin\",\r\n\t\t\tview: \"window\",\r\n\t\t\tmodal: true,\r\n\t\t\tposition: \"center\",\r\n\t\t\thead: \"Thông tin Tab\",\r\n\t\t\tresize: true,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 60 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"loadDataReportForm\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\tscroll: \"y\", // Add vertical scroll\r\n\t\t\t\telements: []\r\n\t\t\t},\r\n\t\t\twidth: 600, // Set a fixed width\r\n\t\t\theight: 500 // Set a maximum height\r\n\t\t},\r\n\t\tinitUI: function (infoWindowId) {\r\n\t\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\t\tvar parameters = {\r\n\t\t\t\tcommand: \"CM00013\",\r\n\t\t\t\tparameter: {\r\n\t\t\t\t\twb_infowindow_id: infoWindowId\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn webix.ajax().headers({ \"Content-Type\": \"application/json\" })\r\n\t\t\t\t.post(url, parameters, function (response) {\r\n\t\t\t\t\tvar result = JSON.parse(response);\r\n\r\n\t\t\t\t\tvar win = webix.$$(infoWindowId);\r\n\r\n\t\t\t\t\twin.define(\"width\", result[0].window_width || 600);\r\n\t\t\t\t\twin.define(\"height\", result[0].window_height || 500);\r\n\r\n\t\t\t\t\tvar form = win.getChildViews()[1];\r\n\t\t\t\t\tform.clear();\r\n\r\n\t\t\t\t\tvar view_extension = {\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"radio\",\r\n\t\t\t\t\t\t\t\tid: \"head_extension\",\r\n\t\t\t\t\t\t\t\tvalue: 1,\r\n\t\t\t\t\t\t\t\toptions: [\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 1, \"value\": \"Tháng\" }, // the initially selected item\r\n\t\t\t\t\t\t\t\t\t{ \"id\": 2, \"value\": \"Quý\" }\r\n\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewQ();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(quarter1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (newv == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tsubviewT();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"cbQuy\").setValue(d.getMonth() + 1);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tid: \"cbQuy\",\r\n\t\t\t\t\t\t\t\tname: \"quy\",\r\n\t\t\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\t\t\tlabel: \"Tháng\",\r\n\t\t\t\t\t\t\t\t//height: 30,\r\n\t\t\t\t\t\t\t\tvalue: _month,\r\n\t\t\t\t\t\t\t\toptions: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar d = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar quarter = Math.floor((d.getMonth() / 3));\r\n\t\t\t\t\t\t\t\t\t\tvar quarter1 = quarter + 1;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar option = $$('head_extension').getValue();\r\n\t\t\t\t\t\t\t\t\t\tif (option == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar nam = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar thang;\r\n\t\t\t\t\t\t\t\t\t\t\tvar quy = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 2) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 3;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 3) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 6\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (quy == 4) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthang = 9\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDate = new Date(nam, thang, 1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDate = new Date(nam, thang + 3, 0);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDate);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (option == 1) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar year = d.getFullYear();\r\n\t\t\t\t\t\t\t\t\t\t\tvar month = $$(\"cbQuy\").getValue();\r\n\t\t\t\t\t\t\t\t\t\t\tvar date1 = month + \"/01\" + \"/\" + year;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar date = new Date(date1);\r\n\t\t\t\t\t\t\t\t\t\t\tvar firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").setValue(firstDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_tu_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").setValue(lastDay1);\r\n\t\t\t\t\t\t\t\t\t\t\t$$(win.config.id + \"_den_ngay\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar multiComboBranch = null;\r\n\t\t\t\t\tvar multiComboKH = null;\r\n\r\n\t\t\t\t\tvar formValues = {};\r\n\r\n\t\t\t\t\tvar rows_max = result[0].rows_max;\r\n\r\n\t\t\t\t\tvar el = [];\r\n\r\n\t\t\t\t\tfor (var i = 1; i <= rows_max; i++) {\r\n\t\t\t\t\t\tel.push({ cols: [] });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var i = 0; i < result.length; i++) {\r\n\r\n\t\t\t\t\t\tvar field = result[i];\r\n\r\n\t\t\t\t\t\tvar row = field.row;\r\n\r\n\t\t\t\t\t\tvar item = {\r\n\t\t\t\t\t\t\tview: field.type_editor,\r\n\t\t\t\t\t\t\tname: field.name,\r\n\t\t\t\t\t\t\tlabel: _(field.caption),\r\n\t\t\t\t\t\t\twidth: field.width,\r\n\t\t\t\t\t\t\tlabelPosition: field.label_position,\r\n\t\t\t\t\t\t\tlabelWidth: field.label_width,\r\n\t\t\t\t\t\t\tformat: field.format,\r\n\t\t\t\t\t\t\thidden: field.hidden == \"C\" ? true : false,\r\n\t\t\t\t\t\t\tid: win.config.id + \"_\" + field.name,\r\n\t\t\t\t\t\t\trequired: field.required,\r\n\t\t\t\t\t\t\tinvalidMessage: field.required ? _(field.caption) + \" không được bỏ trống\" : null,\r\n\t\t\t\t\t\t\tvalidate: field.required ? webix.rules.isNotEmpty : null\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (field.default_value != null) {\r\n\t\t\t\t\t\t\tvar defaultValue = field.default_value;\r\n\r\n\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\tvar firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\t\t\t\t\t\t\tvar lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n\t\t\t\t\t\t\tif (defaultValue.startsWith(\"@Default=\")) {\r\n\t\t\t\t\t\t\t\tdefaultValue = defaultValue.replace(\"@Default=\", \"\");\r\n\t\t\t\t\t\t\t\tif (defaultValue == \"MA_DVCS\" || defaultValue == \"BRANCH_CODE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getDvcsID();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"USER\") {\r\n\t\t\t\t\t\t\t\t\titem.value = user.getCurrentUser();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"MA_CT\") {\r\n\t\t\t\t\t\t\t\t\titem.value = \"MA_CT\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"FIRST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse if (defaultValue == \"LAST_DATE\") {\r\n\t\t\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\titem.value = defaultValue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.hidden == true) {\r\n\t\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"combo\" || item.view == \"multiselect\") {\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tfilter: function (item, value) {\r\n\t\t\t\t\t\t\t\t\treturn item.value.toLowerCase().includes(value)\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\tdata: [],\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\twebix.ajax().get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id).then(function (data) {\r\n\t\t\t\t\t\t\t\t$$(item.id).getList().parse(data.json());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Vẽ multi combo\r\n\t\t\t\t\t\tif (item.view == \"multicombo\") {\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tselectAll: true,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tif(item.name == \"lst_branch_code\") {\r\n\t\t\t\t\t\t\t\tmultiComboBranch = item;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(item.name == \"invoice_series\") {\r\n\t\t\t\t\t\t\t\tmultiComboKH = item;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"radio\") {\r\n\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\tradio_id: item.id,\r\n\t\t\t\t\t\t\t\twin_id: win.config.id\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tajax.get(app.config.host + \"/System/GetDataByReferencesId?id=\" + field.wb_references_id, function (text) {\r\n\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\tvar radio = $$(this.radio_id);\r\n\t\t\t\t\t\t\t\tradio.define(\"options\", json);\r\n\t\t\t\t\t\t\t\tradio.refresh();\r\n\r\n\t\t\t\t\t\t\t\t$$(this.win_id).resize();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"treesuggest\") {\r\n\r\n\t\t\t\t\t\t\t//item.REF_ID = field.REF_ID.toString();\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"treesuggest\",\r\n\t\t\t\t\t\t\t\turl: {\r\n\t\t\t\t\t\t\t\t\t$proxy: true,\r\n\t\t\t\t\t\t\t\t\tload: function (view, callback, params) {\r\n\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax(url, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = listToTree(json);\r\n\t\t\t\t\t\t\t\t\t\t\tview.parse(data, \"json\");\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tfilterMode: {\r\n\t\t\t\t\t\t\t\t\t\tlevel: false,\r\n\t\t\t\t\t\t\t\t\t\tshowSubItems: false\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridcombo\") {\r\n\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"combo\";\r\n\t\t\t\t\t\t\titem.options = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/api/System/GetDataByReferencesId?id=\" + field.wb_references_id,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.view == \"gridsuggest\") {\r\n\t\t\t\t\t\t\tvar listColumns = JSON.parse(field.list_column);\r\n\r\n\t\t\t\t\t\t\tfor (var v = 0; v < listColumns.length; v++) {\r\n\t\t\t\t\t\t\t\tlistColumns[v].header = _(listColumns[v].id);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\titem.view = \"text\";\r\n\t\t\t\t\t\t\titem.suggest = {\r\n\t\t\t\t\t\t\t\tview: \"gridsuggest\",\r\n\t\t\t\t\t\t\t\tvalue_suggest: field.value_suggest,\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\tcolumns: listColumns,\r\n\t\t\t\t\t\t\t\t\trefid: field.wb_references_id,\r\n\t\t\t\t\t\t\t\t\tdatatype: \"json\",\r\n\t\t\t\t\t\t\t\t\tdataFeed: function (filtervalue, filter) {\r\n\t\t\t\t\t\t\t\t\t\tif (filtervalue.length < 3) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar refid = this.config.refid;\r\n\t\t\t\t\t\t\t\t\t\tvar pathUrl = app.config.host + \"/System/GetDataByReferencesId?id=\" + refid;\r\n\t\t\t\t\t\t\t\t\t\tvar urldata = \"filtervalue=\" + encodeURIComponent(filtervalue);\r\n\r\n\t\t\t\t\t\t\t\t\t\tthis.load(pathUrl + \"&\" + urldata, this.config.datatype);\r\n\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonValueSuggest: function (obj) {\r\n\t\t\t\t\t\t\t\t\t\tif (this.config.value_suggest != null) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"obj\", \"id\", this.config.value_suggest);\r\n\t\t\t\t\t\t\t\t\t\t\tfn(obj, this.config.id);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"tu_ngay\") {\r\n\t\t\t\t\t\t\titem.value = firstDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (item.name == \"den_ngay\") {\r\n\t\t\t\t\t\t\titem.value = lastDay;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tformValues[item.name] = item.value;\r\n\t\t\t\t\t\tel[row - 1].cols.push(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(el != null && checkHasComp(el, multiComboBranch) && checkHasComp(el, multiComboKH)) {\r\n\t\t\t\t\t\tfor(var i = 0; i < el.length; i++) {\r\n\t\t\t\t\t\t\tvar element = el[i];\r\n\t\t\t\t\t\t\tif(element != null && element.cols != null) {\r\n\t\t\t\t\t\t\t\tfor(var j = 0; j < element.cols.length; j++) {\r\n\t\t\t\t\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == multiComboBranch.id) {\r\n\t\t\t\t\t\t\t\t\t\telement.cols[i].on = {\r\n\t\t\t\t\t\t\t\t\t\t\tonChange: function(newValue, oldValue) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar urlLoad = app.config.host + \"/System/GetDataReferencesByRefIdAndBranchs?refId=RF003001&branchs=\" + newValue;\r\n \r\n\t\t\t\t\t\t\t\t\t\t\t\tvar comp = $$(multiComboKH.id).getPopup().getList();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif(comp != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcomp.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcomp.load(urlLoad);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif(element.cols[j] != null && element.cols[j].id == multiComboKH.id) {\r\n\t\t\t\t\t\t\t\t\t\telement.cols[j].suggest.body = {};\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tform.setValues(formValues);\r\n\r\n\t\t\t\t\tvar buttons = {\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Tải (F10)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\ttype: \"form\", align: \"center\",\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = this.getParentView().getParentView();\r\n\t\t\t\t\t\t\t\t\t\tvar win = this.getTopParentView();\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Chưa nhập đủ thông tin!\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\t\t\t// xóa header ngày tháng trong sproc ko cần\r\n\t\t\t\t\t\t\t\t\t\tdelete item.quy;\r\n\t\t\t\t\t\t\t\t\t\tvar load_event = win.config.load_event == null ? \"loadReport\" : win.config.load_event;\r\n\r\n\t\t\t\t\t\t\t\t\t\tapp.callEvent(load_event, [win.config.report_id, win.config.id, item, win.config.menuitem]);\r\n\r\n\t\t\t\t\t\t\t\t\t\twin.close();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\",\r\n\t\t\t\t\t\t\t\twidth: 120,\r\n\t\t\t\t\t\t\t\talign: \"center\", type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.getTopParentView().close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tel.push(buttons);\r\n\r\n\t\t\t\t\twebix.ui(el, form);\r\n\t\t\t\t\tif ($$(win.config.id + \"_tu_ngay\") != undefined && $$(win.config.id + \"_den_ngay\") != undefined) {\r\n\t\t\t\t\t\tform.addView(view_extension, 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\twin.getHead().setHTML(result[0][\"window_name\"]);\r\n\t\t\t\t\t\r\n\t\t\t\t\t// Tạm thời cmt lại đoạn xet dữ liệu popup\r\n\t\t\t\t\t// if (win.config.editmode != null) {\r\n\t\t\t\t\t// \tif (win.config.editmode == 1) {\r\n\t\t\t\t\t// \t\tform.setValues(win.config.formvalues);\r\n\t\t\t\t\t// \t}\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t//win.resize();\r\n\r\n\t\t\t\t});\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t},\r\n\t\tsetValues: function (item) {\r\n\t\t\tvar win = $$(this.$ui.id);\r\n\t\t\tvar form = win.getChildViews()[1];\r\n\r\n\t\t\tform.setValues(item);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/forms/main',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\"\r\n], function (app, _, user) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n position: \"center\",\r\n head: \"Thêm mới hóa đơn đầu vào\",\r\n id: \"main\",\r\n resize: true,\r\n move: true,\r\n on: {\r\n onBeforeShow: function () {\r\n $$(\"uploader\").files.attachEvent(\"onAfterDelete\", function () {\r\n $$(\"inv_Invoice_fileName\").setValue(null);\r\n $$(\"inv_Invoice_fileData\").setValue(null);\r\n $$(\"inv_Invoice_fileType\").setValue(null);\r\n $$(\"inv_Invoice_fileSize\").setValue(null);\r\n });\r\n }\r\n },\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"main-form\",\r\n width: 800,\r\n height: 500,\r\n complexData: true,\r\n margin: 0,\r\n on: {\r\n // onViewShow: function () {\r\n\r\n // }\r\n },\r\n elements: [\r\n {\r\n view: \"combo\",\r\n name: \"inv_ncc_id\",\r\n label: \"Nhà cung cấp\",\r\n //labelPosition: \"top\",\r\n id: \"inv_Invoice_inv_ncc_id\",\r\n required: true,\r\n invalidMessage: \"Nhà cung cấp không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#ten_ncc#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00300\",\r\n body: {\r\n columns: [\r\n { id: \"mst\", header: _(\"MS_THUE\"), width: 150 },\r\n { id: \"ten_ncc\", header: _(\"Tên nhà cung cấp\"), width: 550 }\r\n ]\r\n }\r\n\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: 'Chọn file',\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"image/png, image/jpeg, application/vnd.ms-excel,text/XML,text/plain,application/octet-stream,application/pdf,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n //accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n //upload: app.config.host + \"/Invoice/SaveInv\",\r\n on: {\r\n onBeforeFileAdd: function (file) {\r\n\r\n var size = file.size;\r\n if (size > 1024000) {\r\n webix.message(\"Bạn chỉ được đính kèm File <= 1 Mb\", \"error\");\r\n return false;\r\n }\r\n var typeList = [\"txt\", \"xml\", \"xls\", \"docx\", \"xlsx\", \"repx\", \"png\", \"pdf\", \"jpg\"];\r\n if (typeList.indexOf(file.type) < 0) {\r\n webix.message('Định dạng: txt, xml, xls, docx, xlsx, repx, png, pdf, jpg !', \"error\");\r\n return false;\r\n }\r\n },\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (upload) {\r\n var file = new Blob([upload.file]);\r\n\r\n var reader = new FileReader();\r\n var type = upload.type;\r\n if (type == \"txt\") { type = \"text/plain\"; }\r\n if (type == \"xml\") { type = \"text/XML\"; }\r\n if (type == \"xls\") { type = \"application/vnd.ms-excel\"; }\r\n if (type == \"docx\") { type = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"; }\r\n if (type == \"xlsx\") { type = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"; }\r\n if (type == \"repx\" || type == \"rar\") { type = \"application/octet-stream\"; }\r\n if (type == \"jpg\") { type = \"image/jpeg\"; }\r\n if (type == \"png\") { type = \"image/png\"; }\r\n if (type == \"pdf\") { type = \"application/pdf\"; }\r\n\r\n reader.onload = function () {\r\n\r\n var arrayBuffer = this.result,\r\n array = new Uint8Array(arrayBuffer);\r\n\r\n var array1 = Array.from(array)\r\n // console.log(array1);\r\n //var data_btoa = btoa(array1);\r\n var data = {\r\n ten_file: upload.name,\r\n file_data: array1,\r\n loai_file: type\r\n }\r\n\r\n $$(\"inv_Invoice_fileName\").setValue(upload.name);\r\n $$(\"inv_Invoice_fileData\").setValue(array1);\r\n $$(\"inv_Invoice_fileType\").setValue(type);\r\n $$(\"inv_Invoice_fileSize\").setValue(upload.size / 1024);\r\n }\r\n reader.readAsArrayBuffer(upload.file);\r\n\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n },\r\n onFileUploadError: function (file, response) {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").refresh();\r\n //console.log(file);\r\n //console.log(response);\r\n var table = $$(\"main-form\");\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(response.error, \"error\");\r\n }\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n //css:{\"border-bottom\": \"none !important\", \"border-color\":\"white !important\"},\r\n //height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n on: {\r\n onAfterDelete: function (id) {\r\n webix.message(\"aaaaaaaaaaa\");\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n view: \"combo\",\r\n name: \"dmloaihd_id\",\r\n label: \"Loại hóa đơn\",\r\n //labelPosition: \"top\",\r\n id: \"inv_Invoice_dmloaihd_id\",\r\n required: true,\r\n invalidMessage: \"Loại hóa đơn không thể bỏ trống !\",\r\n options: {\r\n view: \"gridsuggest\",\r\n template: \"#ten_loai#\",\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00301\",\r\n body: {\r\n columns: [\r\n { id: \"ma_loai\", header: _(\"Mã loại\"), width: 80 },\r\n { id: \"ten_loai\", header: _(\"Tên loại hóa đơn\"), width: 700 }\r\n ]\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n { view: \"text\", label: _(\"Số hóa đơn\"), name: \"invoiceNumber\", id: \"inv_Invoice_invoiceNumber\", attributes: { maxlength: 7 } },\r\n { view: \"datepicker\", label: _(\"Ngày hóa đơn\"), name: \"invoiceDate\", value: new Date(), id: \"inv_Invoice_invoiceDate\" }\r\n ]\r\n\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n label: \"Mẫu số\",\r\n name: \"mauhd\",\r\n id: \"inv_Invoice_mauhd\",\r\n //labelWidth: 90,\r\n required: true,\r\n invalidMessage: \"Mẫu số không được bỏ trống\",\r\n attributes: {\r\n maxlength: 11\r\n },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 11) {\r\n webix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var txtHinhThuc = \"E\";\r\n // var txtLoaihd = $$(\"dmloaihd_id_dmmauhoadon\");\r\n\r\n if (txtHinhThuc == \"\") {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn hình thức hóa đơn\" });\r\n return;\r\n }\r\n\r\n // if (txtLoaihd.getValue() == \"\") {\r\n // webix.message({ type: \"error\", text: \"Bạn chưa chọn loại hóa đơn\" });\r\n // return;\r\n // }\r\n\r\n // var hinhthuc = \"E\";\r\n // var list = txtLoaihd.getList();\r\n\r\n // var selectedItem = list.getItem(txtLoaihd.getValue());\r\n\r\n // if (selectedItem == undefined) return;\r\n\r\n // var ma_loai = selectedItem.ma_loai;\r\n\r\n // var so_lien = hinhthuc == \"E\" ? 0 : \"\";\r\n // var mau_so = ma_loai + so_lien + \"/\";\r\n\r\n // if (newv.startsWith(mau_so) == false) {\r\n // webix.message({ type: \"error\", text: \"Mẫu số không đúng\" });\r\n // this.focus();\r\n // return;\r\n // }\r\n\r\n var sttMau = newv.substring(newv.length - 3, newv.length);\r\n var patt = /^[0-9][0-9][0-9]$/;\r\n\r\n if (patt.test(sttMau) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự cuối phải là số\" });\r\n this.focus();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Ký hiệu\",\r\n name: \"invoiceSeries\",\r\n id: \"inv_Invoice_invoiceSeries\",\r\n // labelWidth: 110,\r\n required: true,\r\n invalidMessage: \"Ký hiệu không được bỏ trống\",\r\n attributes: { maxlength: 6 },\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu của ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n patt = /^[1-9][1-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm của ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < (year - 1) || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n }\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n id: \"inv_Invoice_sellerTaxCode\",\r\n name: \"sellerTaxCode\",\r\n view: \"search\",\r\n label: \"MST người bán\",\r\n //align: \"center\",\r\n placeholder: _(\"SEARCH\") + \"...\",\r\n // width: 300,\r\n on: {\r\n onTimedKeyPress: function () {\r\n // var table = $$(\"tblSearch\");\r\n\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n },\r\n onSearchIconClick: function (e) {\r\n var text = this.getValue();\r\n var datapost = { \"masothue\": text };\r\n var table = $$(\"main-form\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/GetInfoByMST\", datapost, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"inv_Invoice_sellerName\").setValue(json.ten_cty);\r\n $$(\"inv_Invoice_sellerAdress\").setValue(json.dia_chi);\r\n }\r\n else {\r\n // nếu không tồn tại mã số thuế phải xóa địa chỉ + tên cty ở đây \r\n webix.message(json.error, \"error\", 1500);\r\n }\r\n\r\n });\r\n }\r\n }\r\n },\r\n { view: \"text\", label: _(\"Tên người bán\"), name: \"sellerName\", id: \"inv_Invoice_sellerName\" },\r\n { view: \"text\", label: _(\"Địa chỉ\"), name: \"sellerAdress\", id: \"inv_Invoice_sellerAdress\" },\r\n { view: \"text\", label: _(\"Tên mặt hàng tiêu biểu\"), name: \"itemName\", id: \"inv_Invoice_itemName\" },\r\n { view: \"text\", label: _(\"Tiền trước thuế\"), name: \"totalAmountWithoutVat\", id: \"inv_Invoice_totalAmountWithoutVat\", inputAlign: \"right\", type: \"number\" },\r\n { view: \"text\", label: _(\"Tiền thuế\"), name: \"vatAmount\", id: \"inv_Invoice_vatAmount\", inputAlign: \"right\", type: \"number\" },\r\n { view: \"textarea\", label: _(\"GHI_CHU\"), name: \"ghi_chu\", id: \"inv_Invoice_ghi_chu\" },\r\n { view: \"text\", label: _(\"Tên File\"), name: \"fileName\", id: \"inv_Invoice_fileName\", hidden: true },\r\n { view: \"text\", label: _(\"File Data\"), name: \"fileData\", id: \"inv_Invoice_fileData\", hidden: true },\r\n { view: \"text\", label: _(\"Mime Type\"), name: \"fileType\", id: \"inv_Invoice_fileType\", hidden: true },\r\n { view: \"text\", label: _(\"File Size\"), name: \"fileSize\", id: \"inv_Invoice_fileSize\", hidden: true },\r\n { view: \"text\", label: _(\"File Url\"), name: \"fileUrl\", id: \"inv_Invoice_fileUrl\", hidden: true },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Nhận (F10)\", type: \"form\", align: \"center\",\r\n on: {\r\n onClick: function () {\r\n var item = $$(\"main-form\").getValues();\r\n var table = $$(\"main-form\");\r\n\r\n if (table.validate()) {\r\n // var fn = Function(check);\r\n // var result = fn();\r\n // console.log(result);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n // if (file == undefined || file == null) {\r\n // webix.message(\"Bạn chưa chọn File hóa đơn đính kèm !\", \"error\");\r\n // table.enable();\r\n // table.hideProgress();\r\n // return;\r\n // }\r\n var item1 = [];\r\n item1.push(item);\r\n var data_post = { editmode: editmode, data: item1 };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/ManageInvoice/SaveInv\", data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n\r\n }, success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n table.enable();\r\n table.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.$$(\"main\").close();\r\n app.callEvent(\"dataChangedMain\", [editmode, json.data]);\r\n }\r\n else {\r\n webix.message(json.error, \"error\");\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", type: \"danger\",\r\n click: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n this.getTopParentView().close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n setValues: function (item, winconfig, params) {\r\n var win = $$(this.$ui.id);\r\n\r\n var form = win.getChildViews()[1];\r\n\r\n item[\"invoiceDate\"] = removeTimeZoneT(item[\"invoiceDate\"]);\r\n form.setValues(item);\r\n\r\n if (editmode == 2) {\r\n $$(\"uploader\").files.parse([\r\n { name: item.fileName == null ? \"\" : item.fileName, sizetext: item.fileSize == null ? \"\" : item.fileSize, status: \"server\" }\r\n ]);\r\n }\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n\r\n //var form = webix.$$(\"main-form\");\r\n var form = $$(this.$ui.id);\r\n //var topParentView = form.getTopParentView();\r\n form.config.editmode = mode;\r\n }\r\n };\r\n\r\n});\r\n\ndefine('views/forms/mauhoadon',[\"app\"], function (app) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"mauhoadon-win\", position: \"center\",\r\n\t\t\thead: \"Mẫu hóa đơn\",\r\n\t\t\theight: 250,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\t//elementsConfig:{labelWidth: 120}, \r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"mauhoadon-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tlabel: \"Tên mẫu\",\r\n\t\t\t\t\t\tname: \"name\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Tên mẫu không được bỏ trống\",\r\n\t\t\t\t\t\twidth: 600,\r\n\t\t\t\t\t\tlabelWidth: 90\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tlabel: \"Hình thức\",\r\n\t\t\t\t\t\tname: \"invoice_type\",\r\n\t\t\t\t\t\tid: \"hinhthuc_dmmauhoadon\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Hình thức không được bỏ trống\",\r\n\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\toptions: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00009\",\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tvar txtSolien = $$(\"so_lien_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\tif (newv == \"E\") {\r\n\t\t\t\t\t\t\t\t\ttxtSolien.setValue(0);\r\n\t\t\t\t\t\t\t\t\ttxtSolien.define(\"readonly\", true);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\ttxtSolien.define(\"readonly\", false);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\ttxtSolien.refresh();\r\n\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"combo\",\r\n\t\t\t\t\t\tlabel: \"Loại hóa đơn\",\r\n\t\t\t\t\t\tname: \"sl_invoice_type_id\",\r\n\t\t\t\t\t\tid: \"dmloaihd_id_dmmauhoadon\",\r\n\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\tinvalidMessage: \"Loại hóa đơn không được bỏ trống\",\r\n\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t//options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\turl: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n\t\t\t\t\t\t\t\tready: function () {\r\n\t\t\t\t\t\t\t\t\tvar form = $$(\"mauhoadon-form\");\r\n\t\t\t\t\t\t\t\t\tvar values = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\tif (values.sl_invoice_type_id == null || values.sl_invoice_type_id == undefined || values.sl_invoice_type_id == \"\") {\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar data = this.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\t\tvar item = data[i];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (item.code == \"01GTKT\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"dmloaihd_id_dmmauhoadon\").setValue(item.id);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\tvar list = this.getPopup().getList();\r\n\t\t\t\t\t\t\t\tvar item = list.getItem(newv);\r\n\r\n\t\t\t\t\t\t\t\tif (item === undefined) {\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar txtMauso = $$(\"mau_so_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\tvar txtSolien = $$(\"so_lien_dmmauhoadon\");\r\n\t\t\t\t\t\t\t\tvar so_lien = txtSolien.getValue();\r\n\t\t\t\t\t\t\t\tvar mau_so = item.code + so_lien + \"/001\";\r\n\r\n\t\t\t\t\t\t\t\ttxtMauso.setValue(mau_so);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Mẫu số\",\r\n\t\t\t\t\t\t\t\tname: \"template_code\",\r\n\t\t\t\t\t\t\t\tid: \"mau_so_dmmauhoadon\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\tinvalidMessage: \"Mẫu số không được bỏ trống\",\r\n\t\t\t\t\t\t\t\tattributes: {\r\n\t\t\t\t\t\t\t\t\tmaxlength: 11\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv == undefined) return;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == \"\") return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.length != 11) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Độ dài mẫu số phải là 11 ký tự\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar txtHinhThuc = $$(\"hinhthuc_dmmauhoadon\");\r\n\t\t\t\t\t\t\t\t\t\tvar txtLoaihd = $$(\"dmloaihd_id_dmmauhoadon\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (txtHinhThuc.getValue() == \"\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn hình thức hóa đơn\" });\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (txtLoaihd.getValue() == \"\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Bạn chưa chọn loại hóa đơn\" });\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar hinhthuc = txtHinhThuc.getValue();\r\n\t\t\t\t\t\t\t\t\t\tvar list = txtLoaihd.getList();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar selectedItem = list.getItem(txtLoaihd.getValue());\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (selectedItem == undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar ma_loai = selectedItem.code;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar so_lien = hinhthuc == \"E\" ? 0 : \"\";\r\n\t\t\t\t\t\t\t\t\t\tvar mau_so = ma_loai + so_lien + \"/\";\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.startsWith(mau_so) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Mẫu số không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar sttMau = newv.substring(newv.length - 3, newv.length);\r\n\t\t\t\t\t\t\t\t\t\tvar patt = /^[0-9][0-9][0-9]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(sttMau) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"3 ký tự cuối phải là số\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Ký hiệu\",\r\n\t\t\t\t\t\t\t\tname: \"invoice_series\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 110,\r\n\t\t\t\t\t\t\t\trequired: true,\r\n\t\t\t\t\t\t\t\tinvalidMessage: \"Ký hiệu không được bỏ trống\",\r\n\t\t\t\t\t\t\t\tattributes: {\r\n\t\t\t\t\t\t\t\t\tmaxlength: 6\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonChange: function (newv, oldv) {\r\n\t\t\t\t\t\t\t\t\t\tif (newv == undefined) return;\r\n\t\t\t\t\t\t\t\t\t\tif (newv == \"\") return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.length != 6) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(newv.substring(0, 3)) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tpatt = /^[0-9][0-9]$/;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar nam = newv.substring(3, 5);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (patt.test(nam) == false) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar now = new Date();\r\n\t\t\t\t\t\t\t\t\t\tvar year = now.getFullYear();\r\n\r\n\t\t\t\t\t\t\t\t\t\tnam = Number(\"20\" + nam);\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (nam < (year - 1) || nam > year) {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (newv.substring(5, 6) != \"E\") {\r\n\t\t\t\t\t\t\t\t\t\t\twebix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n\t\t\t\t\t\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Số liên\",\r\n\t\t\t\t\t\t\t\tname: \"copy_number\",\r\n\t\t\t\t\t\t\t\tid: \"so_lien_dmmauhoadon\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 90,\r\n\t\t\t\t\t\t\t\thidden: true,\r\n\t\t\t\t\t\t\t\tvalue: 0\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\t\t\tlabel: \"Số dòng in mẫu\",\r\n\t\t\t\t\t\t\t\tname: \"row_print_template\",\r\n\t\t\t\t\t\t\t\tlabelWidth: 110,\r\n\t\t\t\t\t\t\t\thidden: true,\r\n\t\t\t\t\t\t\t\tvalue: 10\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t/* {\r\n\t\t\t\t\t\tborderless: true,\r\n\t\t\t\t\t\tview: \"tabview\",\r\n\t\t\t\t\t\tscrollX: true,\r\n\t\t\t\t\t\tcells: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: \"Thông tin mẫu hóa đơn\",\r\n\t\t\t\t\t\t\t\tselect: \"cell\",\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\theader: \"Tiêu đề liên\",\r\n\t\t\t\t\t\t\t\tselect: \"cell\",\r\n\t\t\t\t\t\t\t\tbody: {\r\n\t\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 1\", name: \"copy1\", width: 300\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 2\", name: \"copy2\", width: 300\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 3\", name: \"copy3\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 4\", name: \"copy4\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 5\", name: \"copy5\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 6\", name: \"copy6\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 7\", name: \"copy7\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 8\", name: \"copy8\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tview: \"text\", label: \"Liên 9\", name: \"copy9\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\t\t\t\t\t\t\r\n\t\t\t\t\t}, */\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"mauhoadon-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (form.validate() == false) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mauhoadon-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(json.hasOwnProperty(\"ok\") && editmode == 1 && json.ok == \"true\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Thêm mới mẫu hóa đơn thành công!\", \"success\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"mauhoadon-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/phanquyen',[\"app\",\"locale\"],function(app,_){\r\n\t\r\n\tfunction initUI(item){\r\n\t\t\r\n\t\tvar url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n\t\twebix.ajax()\r\n\t\t\t.headers({'Content-type':'application/json'})\r\n\t\t\t.post(url,\r\n\t\t\t\t{\r\n\t\t\t\t\tcommand:\"CM00003\",\r\n\t\t\t\t\tparameter:{\r\n\t\t\t\t\t\twb_nhomquyen_id: item.id\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t,function(text){\r\n var json = JSON.parse(text);\r\n\t\t\tvar data = listToTree(json, { idKey: \"id\", parentId: \"parent_id\" });\r\n\t\t\t\r\n\t\t\tvar trtChucNang = $$(\"trtChucNang\");\r\n\r\n\t\t\ttrtChucNang.parse(data,\"json\");\r\n\t\t\ttrtChucNang.openAll();\r\n\r\n\t\t\tfor(var i=0;i\" + _(\"TEN_CHUC_NANG\"),\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate : \"{common.space()} {common.icon()} {common.treecheckbox()} #name#\",\r\n\t\t\t\t\t\t\t\t\t\t\tfillspace:true\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"them\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"THEM\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"sua\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"SUA\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tid:\"xoa\",\r\n\t\t\t\t\t\t\t\t\t\t\theader: [ {text:\"\", content:\"masterCheckbox\" }, _(\"XOA\")],\r\n\t\t\t\t\t\t\t\t\t\t\twidth:55,\r\n\t\t\t\t\t\t\t\t\t\t\tcheckValue:'C', \r\n\t\t\t\t\t\t\t\t\t\t\tuncheckValue:'K', \r\n\t\t\t\t\t\t\t\t\t\t\ttemplate: function(obj,common,value, config) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (obj.$count>0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn common.checkbox(obj, common,value, config);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\ton:{\r\n\t\t\t\t\t\t\t\t\t\tonHeaderClick:function(id, e, node){\r\n\t\t\t\t\t\t\t\t\t\t\tif (e.target.className == \"chkBox\"){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar chk=document.getElementById(\"chkBox\").checked;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar trtChucNang = $$(\"trtChucNang\");\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\ttrtChucNang.openAll();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = trtChucNang.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tfor(var i=0;i\" +_(\"CHON_BOCHON\"),\r\n\t\t\t\t\t\t\t\t\t\t\ttemplate : \"{common.space()} {common.icon()} {common.treecheckbox()} #name#\",\r\n\t\t\t\t\t\t\t\t\t\t\tfillspace:true\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t],\r\n\t\t\t\t\t\t\t\t\ton:{\r\n\t\t\t\t\t\t\t\t\t\tonHeaderClick:function(id, e, node){\r\n\t\t\t\t\t\t\t\t\t\t\tif (e.target.className == \"chkBox\"){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar chk=document.getElementById(\"chkBox\").checked;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar trtBaoCao = $$(\"trtBaoCao\");\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\ttrtBaoCao.openAll();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = trtBaoCao.serialize();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tfor(var i=0;iBiên lai chưa gửi cho khách hàng !\";\r\n return (\r\n \"Biên lai đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemail',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi hóa đơn cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Hóa đơn chưa gửi cho khách hàng !\";\r\n return (\r\n \"Hóa đơn đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemailbienlai',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi biên lai cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Biên lai chưa gửi cho khách hàng !\";\r\n return (\r\n \"Biên lai đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/sendemailtncn',[\"app\", \"locale\", \"views/forms/lichsuemail\"], function (app, _, his_email) {\r\n var editmode = 0;\r\n var itemdoc;\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"dmtab-win\",\r\n position: \"center\",\r\n head: \"Gửi chứng từ cho khách hàng qua email\",\r\n fullscreen: true,\r\n //height: 700,\r\n //width: 1000,\r\n keepViews: true,\r\n move: true,\r\n body: {\r\n paddingY: 5,\r\n paddingX: 5,\r\n view: \"form\",\r\n id: \"dmtab-form\",\r\n // on: {\r\n // \tonItemClick: function (id) {\r\n // \t\tif (id == \"his_email\") {\r\n // \t\t\tvar detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n // \t\t\tdetailForm.show();\r\n // \t\t}\r\n // \t}\r\n // },\r\n elements: [\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin gửi mail\",\r\n body: {\r\n rows: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_gui\",\r\n label: _(\"NGUOI_GUI\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người gửi không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"alias\",\r\n label: _(\"Bí Danh\"),\r\n labelPosition: \"top\",\r\n // required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Tên hiển thị không được để trống !\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"mat_khau\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n // {\r\n // \tview: \"text\",\r\n // \tname: \"nguoinhan\",\r\n // \tid: \"nguoinhan\",\r\n // \tlabel: _(\"NGUOI_NHAN\"),\r\n // \tlabelPosition: \"top\",\r\n // \trequired: true,\r\n // \tvalidate: webix.rules.isNotEmpty,\r\n // \tinvalidMessage: \"Người nhận không được để trống !\"\r\n // },\r\n {\r\n view: \"multicombo\",\r\n name: \"nguoinhan\",\r\n id: \"nguoinhan\",\r\n label: _(\"NGUOI_NHAN\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Người nhận không được để trống !\",\r\n newValues: true,\r\n separator: \";\",\r\n suggest: {\r\n selectAll: true,\r\n\r\n body: {\r\n id: \"nguoinhan_suggest\",\r\n //data: [{\"id\":\"hungkq@minvoice.vn\",\"value\":\"hungkq@minvoice.vn\"},{\"id\":\"khieuhung.kt@gmail.com\",\"value\":\"khieuhung.kt@gmail.com\"},{\"id\":\"abc@gmail.com\",\"value\":\"abc@gmail.com\"},{\"id\":\"xyz@gmail.com\",\"value\":\"xyz@gmail.com\"}]\r\n //url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00050\",\r\n //template: webix.template(\"#value#\")\r\n },\r\n },\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bcc\",\r\n label: \"BCC\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n view: \"text\",\r\n name: \"tieude\",\r\n label: _(\"TIEU_DE\"),\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n name: \"his_email\",\r\n id: \"his_email\",\r\n //label: \"Hóa đơn đã được gửi đi 5 lần\",\r\n template: function (obj) {\r\n if (obj.value == 0) return \"Chứng từ chưa gửi cho khách hàng !\";\r\n return (\r\n \"Chứng từ đã được gửi \" +\r\n obj.value +\r\n \" lần ! Lịch sử gửi email \"\r\n );\r\n },\r\n on: {\r\n onItemClick: function () {\r\n var inv_invoiceauth_id = \"\";\r\n var table = webix.$$(\"windowData\");\r\n if (table === undefined || table === null) {\r\n table = webix.$$(\"invoiceViews\");\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.hdon_id;\r\n } else {\r\n item = table.getSelectedItem();\r\n inv_invoiceauth_id = item.inv_invoiceauth_id;\r\n }\r\n\r\n var detailForm = $$(\"dmtab-win\").$scope.ui(his_email.$ui);\r\n his_email.initUI(inv_invoiceauth_id);\r\n detailForm.show();\r\n },\r\n },\r\n },\r\n {\r\n name: \"noidung\",\r\n view: \"ckeditor\",\r\n keepViews: true,\r\n label: _(\"NOI_DUNG\"),\r\n labelPosition: \"top\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"dmtab-form\");\r\n var item = form.getValues();\r\n var url = app.config.host + \"/Invoice/SendInvoiceByEmail\";\r\n console.log(itemdoc);\r\n if (itemdoc.hdon68 == 1) {\r\n url = app.config.host + \"/Invoice68/SendInvoiceByEmail\";\r\n }\r\n\r\n if ($$(\"dmtab-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var form = webix.$$(\"dmtab-form\");\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(\"Gửi Email thành công !\", \"debug\");\r\n\r\n var item = form.getValues();\r\n var topParentView = form.getTopParentView();\r\n\r\n if (topParentView.config.tableId != undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n var item = table.getSelectedItem();\r\n item.trang_thai = \"Chờ người mua ký\";\r\n table.updateItem(item.id, item);\r\n }\r\n\r\n webix.$$(\"dmtab-win\").close();\r\n } else {\r\n webix.message(data.error);\r\n }\r\n });\r\n } else {\r\n $$(\"nguoinhan\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n type: \"danger\",\r\n align: \"center\",\r\n width: 120,\r\n click: function () {\r\n webix.$$(\"dmtab-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (values) {\r\n itemdoc = values;\r\n $$(\"dmtab-form\").setValues(values);\r\n // var k = [{ \"id\": \"hungkq@minvoice.vn\", \"value\": \"hungkq@minvoice.vn\" }, { \"id\": \"khieuhung.kt@gmail.com\", \"value\": \"khieuhung.kt@gmail.com\" }, { \"id\": \"abc@gmail.com\", \"value\": \"abc@gmail.com\" }, { \"id\": \"xyz@gmail.com\", \"value\": \"xyz@gmail.com\" }];\r\n // $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n if (values.nguoinhan != null && values.nguoinhan != \"\") {\r\n var k = [{ id: values.nguoinhan, value: values.nguoinhan }];\r\n $$(\"nguoinhan_suggest\").define(\"data\", k);\r\n }\r\n if (values.hasOwnProperty(\"lst_email\")) {\r\n $$(\"nguoinhan_suggest\").define(\"data\", values.lst_email);\r\n }\r\n\r\n // $$(\"dmtab-form\").setValues(values);\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/templatewindow',[\r\n\t\"app\",\r\n\t\"locale\",\r\n\t\"models/user\",\r\n\t\"views/forms/editwindow\",\r\n\t\"views/forms/selectwindow\"\r\n],function(app,_,user,editwindow,selectwindow){\r\n\tvar editmode = 0;\t\r\n var tables = [];\r\n\r\n\tvar windowno = app.path[1].params[0];\r\n var col=[];\r\n\tvar rw =[];\t\t\t\t\t\r\n\tvar el = [];\r\n\tvar head_name=[];\r\n\tvar head;\r\n\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + windowno;\r\n\t\t \r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"window-win\", position:\"center\",\r\n\t\t\t//width:800,\r\n\t\t\thead:\"Thông tin khách hàng\",\r\n\t\t\t//fullscreen:true,\t\t\t\r\n\t\t\tbody:{\r\n paddingY:10, \r\n paddingX:10, \r\n view:\"form\", \r\n\t\t\t\tid:\"window-form\", \r\n\t\t\t\tcomplexData:true,\r\n\t\t\t\tmargin:0,\r\n\t\t\t\tborderless:true,\r\n elements:el\t\t\t\t\r\n\t\t\t}\t\t\t\r\n\t\t},\t\r\n\t\tinitUI: function(windowconfig) {\r\n\t\t\t\r\n\t\t\tvar rp = windowconfig;\r\n\t\t\tvar rows_max = rp['data'][0]['rows_max'];\r\n\t\t\tvar vc_window = rp[\"data\"][0];\r\n\t\t\tvar tabs = vc_window.Tabs;\r\n\r\n\t\t\tvar win = $$(vc_window.window_id);\r\n\r\n\t\t\tif (typeof win.showProgress === \"undefined\")\r\n\t\t\t\twebix.extend(win, webix.ProgressBar);\r\n\t\t\t\r\n\t\t\tel = [];\r\n\t\t\tcol = [] ;\t\t\t\r\n\r\n\t\t\tif (vc_window.width==null && vc_window.height==null){\r\n\t\t\t\twin.config.fullscreen = true;\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tif (vc_window.after_save!=null){\r\n\t\t\t\twin.config.after_save = vc_window.after_save;\r\n\t\t\t}\r\n\r\n\t\t\tvar layoutdetail = vc_window.layoutdetail;\r\n\t\t\twebix.ui(JSON.parse(layoutdetail),$$(\"window-form\"));\r\n\r\n\t\t\tvar fields = rp['data'][0]['Tabs'][0]['Fields'];\r\n\r\n\t\t\tfor(var i=0;i0){\r\n\r\n\t\t\t\t\t\t\t\t\tjson[0].editorId = this.editorId;\r\n\t\t\t\t\t\t\t\t\tjson[0].formId = this.formId;\r\n\t\t\t\t\t\t\t\t\tjson[0].fieldExpression = this.fieldExpression;\r\n\t\t\t\t\t\t\t\t\tjson[0].editmode = this.editmode;\r\n\t\t\t\t\t\t\t\t\tjson[0].editorvalue = this.editorvalue;\r\n\t\t\t\t\t\t\t\t\tjson[0].suggest = this.suggest;\r\n\r\n\t\t\t\t\t\t\t\t\tvar windowno = json[0].WINDOWNO;\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+windowno ;\r\n\t\t\t\t\t\t\t\t\tvar a = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\turl = app.config.host +\"/api/System/GetDataByReferences?id=\"+json[0].id+\"&value_field=\" + this.editorvalue;\r\n\t\t\t\t\t\t\t\t\tvar b = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\tvar c= this.editmode;\r\n\t\t\t\t\t\t\t\t\tvar d = json[0];\r\n\r\n\t\t\t\t\t\t\t\t\twebix.promise.all([a,b,c,d]).then(function(results){\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tvar windowconfig = results[0].json();\r\n\t\t\t\t\t\t\t\t\t\tvar res_b = results[1].json();\r\n\t\t\t\t\t\t\t\t\t\tvar mode = results[2];\r\n\t\t\t\t\t\t\t\t\t\tvar master = results[3];\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar vc_window = windowconfig[\"data\"][0];\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (mode == 1){\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(mode);\r\n\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(null,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\telse {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (res_b.length == 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thông báo\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Không tìm thấy dữ liệu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\t\t\t\t\tmaster: master,\r\n\t\t\t\t\t\t\t\t\t\t\t\tvc_window: vc_window\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetDataById?window_id=\"+ vc_window.window_id + \"&id=\"+res_b[0].doc_id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tajax.get(url,function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar data = json.data[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = this.vc_window;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar master = this.master;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(2);\r\n\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(data,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (item.value_change!=null || field.column_type == \"nvarchar\" || field.column_type == \"varchar\" || field.column_type == \"char\"){\r\n\t\t\t\t\titem.on.onChange = function(newv,oldv){\r\n\t\t\t\t\t\t\tvar data_width = this.config.data_width;\r\n\r\n\t\t\t\t\t\t\tif (data_width< newv.length){\r\n\t\t\t\t\t\t\t\twebix.message(\"Số lượng ký tự tối đa là \" + data_width.toString());\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (this.config.value_change!=null){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar fn = Function(\"newv\",\"oldv\",\"id\",this.config.value_change);\r\n\t\t\t\t\t\t\t\tfn(newv,oldv,this.config.id);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\twebix.ui(item,$$(item.id));\r\n\t\t\t\t//el[row-1].cols.push(item);\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\tif (vc_window.window_type == \"MasterDetail\"){\r\n\r\n\t\t\t\tvar cells = [];\r\n\r\n for(var i=0;i0){\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editorId = this.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].tableId = this.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].fieldExpression = this.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].columnName = this.columnName;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editmode = this.editmode;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].editorvalue = this.editorvalue;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjson[0].suggest = this.suggest;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar windowno = json[0].WINDOWNO;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetAllByWindowNo?window_id=\"+windowno ;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar a = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\turl = app.config.host +\"/api/System/GetDataByReferences?id=\"+json[0].id+\"&value_field=\" + this.editorvalue;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar b = webix.ajax(url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar c= this.editmode;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar d = json[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.promise.all([a,b,c,d]).then(function(results){\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar windowconfig = results[0].json();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar res_b = results[1].json();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar mode = results[2];\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar master = results[3];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = windowconfig[\"data\"][0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (mode == 1){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.tableId = master.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.columnName = master.columnName;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(mode);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(null,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (res_b.length == 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thông báo\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"Không tìm thấy dữ liệu\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar ajax = webix.ajax();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tajax.master = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmaster: master,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvc_window: vc_window\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar url = app.config.host + \"/api/System/GetDataById?window_id=\"+ vc_window.window_id + \"&id=\"+res_b[0].doc_id;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tajax.get(url,function(text){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar data = json.data[0];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar vc_window = this.vc_window;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar master = this.master;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.id = vc_window.window_id;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.editorId = master.editorId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.valueField = master.value_field;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.fieldExpression = master.fieldExpression;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.formId = master.formId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.tableId = master.tableId;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.$ui.columnName = master.columnName;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar win = webix.ui(editwindow.$ui); \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.initUI(windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setEditMode(2);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teditwindow.setValues(data,windowconfig);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(master.suggest).hide();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twin.show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonSelectChange:function(){\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar selectedItem = this.getSelectedId();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (this.config.select_change!=null){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar fn = Function(\"selectedItem\",this.config.select_change);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfn(selectedItem);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n \r\n }\r\n };\r\n\r\n cells.push(item);\r\n }\r\n\t\t\t\t}\r\n\t\t\t\t\r\n var subview = {\r\n borderless:true,\r\n view:\"tabview\",\r\n scrollX:true,\r\n\t\t\t\t\tcells: cells,\r\n\t\t\t\t\ttabbar:{\r\n\t\t\t\t\t\twidth:200\r\n\t\t\t\t\t}\t\t\t\t\t\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif (vc_window.width!=null || vc_window.height!=null){\r\n\t\t\t\t\tsubview.height = 250;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//el.push(subview);\r\n\t\t\t\t\r\n\t\t\t\tif (vc_window.row_tab!=null){\r\n\t\t\t\t\tel[vc_window.row_tab-1]=subview;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tel.push(subview);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n }\r\n\t\t\t\r\n\t\t\tvar cols = [\r\n\t\t\t\t{},\r\n\t\t\t\t{ \r\n\t\t\t\t\tshortcut:\"F10\", \r\n\t\t\t\t\tview:\"button\", label:\"Nhận\", type:\"form\", align:\"center\", \r\n\t\t\t\t\twidth:100,\r\n\t\t\t\t\ton: {\r\n\t\t\t\t\t\tonClick: function() {\r\n\t\t\t\t\t\t\tvar form = webix.$$(\"window-form\");\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar item = form.getValues();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar khData={};\r\n\r\n\t\t\t\t\t\t\tkhData.windowid=String(rp['data'][0]['window_id']);\r\n\t\t\t\t\t\t\tkhData.editmode=editmode;\r\n\t\t\t\t\t\t\tkhData.data=[];\r\n\r\n\t\t\t\t\t\t\tvar vc_window = rp['data'][0];\r\n\r\n\t\t\t\t\t\t\tif (vc_window.window_type == \"MasterDetail\"){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tvar tabs = vc_window.Tabs;\r\n\t\t\t\t\t\t\t\tvar details = [];\r\n\r\n\t\t\t\t\t\t\t\tfor(var i=0;iSTT\", width: 50 },\r\n { id: \"code\", header: \"
Mã loại hóa đơn
\", width: 100 },\r\n { id: \"name\", header: \"
Tên loại hóa đơn
\", width: 160 },\r\n { id: \"mau_hd\", header: \"
Mẫu hóa đơn
\", width: 120 },\r\n { id: \"ky_hieu\", header: \"
Ký hiệu
\", width: 100 },\r\n {\r\n id: \"ton_dau_ky\", name: \"namdaika\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"ton_dau\",\r\n groupText: \"Tổng số tồn đầu kỳ\", colspan: 1\r\n },\r\n \"Tổng số \"], width: 150\r\n },\r\n {\r\n id: \"tu_so1\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr1\",\r\n groupText: \"Số tồn đầu kỳ\", colspan: 2\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so1\", batch: \"gr1\", header: [null, \"Đến số\"] },\r\n {\r\n id: \"tu_so2\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr2\",\r\n groupText: \"Số mua/phát hành trong kỳ\", colspan: 2\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so2\", batch: \"gr2\", header: [null, \"Đến số\"] },\r\n {\r\n id: \"tu_so3\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr3\",\r\n groupText: \"Tổng số sử dụng, xóa bỏ, mất, hủy\", colspan: 3\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so3\", batch: \"gr3\", header: [null, \"Đến số\"] },\r\n { id: \"cong\", batch: \"gr3\", header: [null, \"Cộng\"] },\r\n {\r\n id: \"sl_sd\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr4\",\r\n groupText: \"Đã sử dụng\", colspan: 1\r\n },\r\n \"Số lượng\"], width: 150\r\n },\r\n {\r\n id: \"so_luong1\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr5\",\r\n groupText: \"Xóa bỏ\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so1\", batch: \"gr5\", header: [null, \"Số\"] },\r\n {\r\n id: \"so_luong2\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr6\",\r\n groupText: \"Mất\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so2\", batch: \"gr6\", header: [null, \"Số\"] },\r\n {\r\n id: \"so_luong3\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr7\",\r\n groupText: \"Hủy\", colspan: 2\r\n },\r\n \"Số lượng\"], width: 110\r\n },\r\n { id: \"so3\", batch: \"gr7\", header: [null, \"Số\"] },\r\n {\r\n id: \"tu_so4\", header: [\r\n {\r\n content: \"columnGroup\", closed: false, batch: \"gr8\",\r\n groupText: \"Tồn cuối kỳ\", colspan: 3\r\n },\r\n \"Từ số\"]\r\n },\r\n { id: \"den_so4\", batch: \"gr8\", header: [null, \"Đến số\"] },\r\n { id: \"so_luong4\", batch: \"gr8\", header: [null, \"Số lượng\"] }\r\n\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n id: \"nguoi_dai_dien\",\r\n name: \"nguoi_dai_dien\",\r\n //labelPosition: \"top\",\r\n label: \"Người đại diện\",\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 100,\r\n readonly: true,\r\n width: 500\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"nguoi_lap\",\r\n view: \"text\",\r\n name: \"nguoi_lap\",\r\n //labelPosition: \"top\",\r\n css: \"mcls_readonly_text\",\r\n labelWidth: 100,\r\n label: \"Người lập\",\r\n readonly: true,\r\n width: 500\r\n },\r\n {\r\n id: \"ngay_lap\",\r\n view: \"datepicker\",\r\n name: \"ngay_lap\",\r\n css: \"mcls_readonly_text\",\r\n value: new Date(),\r\n label: \"Ngày lập\",\r\n readonly: true,\r\n width: 500\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F11\", view: \"button\", icon: \"refresh\", type: \"form\", label: \"Tải dữ liệu (F11)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/BcTinhhinhsudung\", $$('dataform').config.item, function (text) {\r\n var data = JSON.parse(text);\r\n //console.log(data);\r\n var table = webix.$$(\"dataBC\");\r\n table.clearAll();\r\n table.parse(data);\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F10\", id: \"btnGhi\", view: \"button\", icon: \"refresh\", label: \"Lưu (F10)\", type: \"danger\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var ss = $$(\"dataBC\").serialize();\r\n\r\n var dataBC = {\r\n data: ss,\r\n nguoi_lap: $$('nguoi_lap').getValue(),\r\n nguoi_dai_dien: $$('nguoi_dai_dien').getValue(),\r\n ngay_lap: $$('ngay_lap').getValue()\r\n };\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/bcthsd_INSERT\", dataBC, function (text) {\r\n var data = JSON.parse(text);\r\n if (data.hasOwnProperty(\"error\")) {\r\n webix.message(data.error);\r\n }\r\n else {\r\n webix.message(data.ok, \"debug\");\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F9\", view: \"button\", type: \"form\", icon: \"refresh\", label: \"Export XML (F9)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn ghi báo cáo trước khi kết suất XML không ?\", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var ss = $$(\"dataBC\").serialize();\r\n\r\n var dataBC = {\r\n data: ss,\r\n nguoi_lap: $$('nguoi_lap').getValue(),\r\n nguoi_dai_dien: $$('nguoi_dai_dien').getValue(),\r\n ngay_lap: $$('ngay_lap').getValue()\r\n };\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất XML ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/bcthsd_INSERT\", dataBC, function (text) {\r\n var data = JSON.parse(text);\r\n if (data.hasOwnProperty(\"error\")) {\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n else {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay\r\n }\r\n\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/ExportFileXML\", input, function (text, data) {\r\n var file = new Blob([data], { type: 'application/xml' });\r\n webix.html.download(file, $$('tenfile').getValue());\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n });\r\n\r\n }\r\n else {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tu_ngay: item.tu_ngay,\r\n den_ngay: item.den_ngay\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất XML ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/ExportFileXML\", input, function (text, data) {\r\n var file = new Blob([data], { type: 'application/xml' });\r\n webix.html.download(file, $$('tenfile').getValue());\r\n webix.modalbox.hide(box);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n shortcut: \"F8\", view: \"button\", type: \"form\", icon: \"far fa-refresh\", label: \"Print (F8)\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n var item = $$('dataform').config.item;\r\n // console.log(item);\r\n var input = {\r\n ma_dvcs: user.getDvcsID(),\r\n bc_soluong: item.bc_soluong,\r\n nam: item.nam,\r\n thang: item.thang,\r\n tokhai_quy: item.tokhai_quy,\r\n tokhai_thang: item.tokhai_thang\r\n }\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/Bcthsd/PrintPDF?ma_dvcs=\" + user.getDvcsID() + \"&bc_soluong=\" + item.bc_soluong + \"&nam=\" + item.nam + \"&thang=\" + item.thang + \"&tokhai_quy=\" + item.tokhai_quy + \"&tokhai_thang=\" + item.tokhai_thang, function (text, data) {\r\n var file = new Blob([data], { type: 'application/pdf' });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n // var printWindow = window.open(fileURL, '', 'width=800,height=500');\r\n // printWindow.print()\r\n // var a = document.createElement(\"a\");\r\n // a.target = '_blank';\r\n // document.body.appendChild(a);\r\n\r\n // a.href = fileURL;\r\n // a.download = \"fileName.pdf\";\r\n // a.click();\r\n //$$(\"frame-body\").define(\"src\", fileURL);\r\n //kk.show();\r\n window.open(fileURL, '_blank');\r\n\r\n // webix.html.download(file, $$('tenfile').getValue());\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n /*{\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ\", align: \"center\", width: 120,\r\n click: function () {\r\n $$(\"tinhhinhsudung\").removeView(\"dataBC\");\r\n // webix.$$(\"tinhhinhsudung\").close();\r\n }\r\n }*/\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/forms/token',[\"app\", \"locale\"], function (app, _) {\r\n\tvar editmode = 0;\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n\t\t\thead: \"Thông tin Token\",\r\n\t\t\t//height:420,\t\t\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"chukyso-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\tmargin: 0,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"serial_number\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"SO_SERIAL\"),\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t\twidth: 350\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"token_label\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: \"TOKEN LABEL\",\r\n\t\t\t\t\t\treadonly: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"text\",\r\n\t\t\t\t\t\tname: \"pass\",\r\n\t\t\t\t\t\tlabelPosition: \"top\",\r\n\t\t\t\t\t\tlabel: _(\"PASSWORD\"),\r\n\t\t\t\t\t\ttype: \"password\"\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmargin: 10,\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\tvar form = webix.$$(\"chukyso-form\");\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar item = form.getValues();\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar khData = {};\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.windowid = app.path[1].params[0];\r\n\t\t\t\t\t\t\t\t\t\tkhData.editmode = editmode;\r\n\t\t\t\t\t\t\t\t\t\tkhData.data = [];\r\n\r\n\t\t\t\t\t\t\t\t\t\tkhData.data.push(item);\r\n\r\n\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t.post(app.config.host + \"/System/Save\", khData, function (text) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar json = JSON.parse(text);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!json.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tapp.callEvent(\"dataChanged\", [editmode, json.data]);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(json.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\twebix.$$(\"chukyso-win\").close();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tsetEditMode: function (mode) {\r\n\t\t\teditmode = mode;\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/forms/tokenfile',[\"app\", \"locale\"], function (app, _) {\r\n var editmode = 0;\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"tokenfile-win\", position: \"center\",\r\n head: \"Thông tin Token File\",\r\n //height:420,\t\t\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"tokenfile-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"textarea\",\r\n name: \"file_path\",\r\n labelPosition: \"top\",\r\n label: _(\"PATH\"),\r\n height: 100,\r\n required: true,\r\n validate: webix.rules.isNotEmpty,\r\n invalidMessage: \"Đường dẫn không được để trống !\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n labelPosition: \"top\",\r\n label: _(\"PASSWORD\"),\r\n type: \"password\",\r\n required: true,\r\n invalidMessage: \"Password không được để trống !\",\r\n validate: webix.rules.isNotEmpty\r\n },\r\n {},\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 120,\r\n on: {\r\n onClick: function () {\r\n if ($$(\"tokenfile-form\").validate()) {\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var item = form.getValues();\r\n\r\n var khData = {};\r\n\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = editmode;\r\n khData.data = [];\r\n\r\n khData.data.push(item);\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Token/SaveTokenFile\", khData, function (text) {\r\n\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"tokenfile-win\").close();\r\n app.callEvent(\"dataChanged\", [editmode, json.data]);\r\n }\r\n else {\r\n webix.message(json.error, \"error\");\r\n }\r\n\r\n\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n click: function () {\r\n webix.$$(\"tokenfile-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/forms/updateToWeb',[\"require\", \"locale\", \"app\"], function (require, _, app) {\r\n \r\n\r\n var layout = {\r\n view: \"window\",\r\n id: \"formConfirm\",\r\n head: \"Đăng nhập\",\r\n modal: true,\r\n position: \"center\",\r\n // css: { \"font-weight\": \"bold\", \"text-transform\": \"uppercase\" },\r\n body: {\r\n view: \"form\",\r\n id: \"formConfirmValid\",\r\n // elementsConfig: {\r\n // labelPosition: \"top\",\r\n // //validateEvent: \"key\"\r\n // },\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: _(\"Account\"),\r\n id: \"1\",\r\n name: \"taikhoan\",\r\n width: 350,\r\n invalidMessage: \"Tài khoản không được để trống !\",\r\n required: true,\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"text\",\r\n label: _(\"PASSWORD\"),\r\n id: \"pass\",\r\n name: \"matkhau\",\r\n type: \"password\",\r\n width: 350,\r\n invalidMessage: \"Mật khẩu không được để trống !\",\r\n required: true,\r\n },\r\n // {\r\n // view: \"label\",\r\n // name: \"lb1\",\r\n // id: \"lb\",\r\n // template: \"
\"\r\n // },\r\n {\r\n view: \"button\",\r\n css: \"mcls_btnRegisterLogin\",\r\n type: \"iconButton\",\r\n icon: \"long-arrow-right\",\r\n label: _(\"Phần mềm hóa đơn điện tử MobiFone Invoice\"),\r\n width: 250,\r\n click: function () {\r\n window.open(\"http://minvoice.vn/dang-ky-su-dung/\", \"_blank\");\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n value: \"Đồng ý\",\r\n type: \"danger\",\r\n click: function () {\r\n var model = {\r\n username: $$(\"1\").getValue(),\r\n password: $$(\"pass\").getValue(),\r\n };\r\n if ($$(\"formConfirmValid\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang cập nhật phần mềm ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n var urlCheck = app.config.host + \"/System/CheckPassUpdate\";\r\n\r\n var url = app.config.host + \"/System/UpdateToWeb\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(urlCheck, model, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n //console.log(text);\r\n var data = JSON.parse(text);\r\n\r\n if (data.error == \"\" || data.error == null) {\r\n webix.modalbox.hide(box);\r\n webix.message(data.ok, \"debug\");\r\n\r\n webix.$$(\"formConfirm\").close();\r\n } else {\r\n webix.$$(\"formConfirm\").close();\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n webix.modalbox.hide(box);\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n //this.getTopParentView().hide();\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ\",\r\n type: \"iconButton\",\r\n icon: \"times\",\r\n click: function () {\r\n //this.getFormView().save();\r\n $$(\"formConfirm\").close();\r\n //this.getTopParentView().hide();\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function () {\r\n $$(\"formConfirmValid\").focus();\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexcel',[\"app\", \"locale\"], function (app, _) {\r\n // var dialog = webix.ui({\r\n // \tid: \"uploader\",\r\n // \tview: \"uploader\",\r\n // \tvalue: 'Chọn file',\r\n // \tname: \"uploader\",\r\n // \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n // \tlink: \"mylist\",\r\n // \tautosend: false,\r\n // \t//borderless: true,\r\n // \tmultiple: false,\r\n // \tupload: app.config.host + \"/System/UploadExcel\",\r\n // \ton: {\r\n // \t\tonAfterFileAdd: function (file) {\r\n // \t\t\t//console.log(file);\r\n // \t\t\t// var kk = {\r\n // \t\t\t// \tname: file.name,\r\n // \t\t\t// \tlastModified: file.lastModified,\r\n // \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n // \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n // \t\t\t// \tid: file.id,\r\n // \t\t\t// \tsize: file.size,\r\n // \t\t\t// \tsizetext: file.sizetext,\r\n // \t\t\t// \tstatus: file.status,\r\n // \t\t\t// \ttype: file.type\r\n // \t\t\t// };\r\n // \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n // \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n // \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n // \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n // \t\t\t$$(\"mylist\").refresh();\r\n // \t\t\t//$$(\"mylist\").show();\r\n\r\n // \t\t},\r\n // \t\tonUploadComplete: function (response) {\r\n // \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n // \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n // \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \t\t\t// \tif (table != null) {\r\n // \t\t\t// \t\ttable.clearAll();\r\n // \t\t\t// \t\ttable.load(table.config.url);\r\n // \t\t\t// \t}\r\n // \t\t\t// }\r\n // \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n // \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n // \t\t},\r\n // \t\tonFileUploadError: function (file, response) {\r\n // \t\t\tconsole.log(file);\r\n // \t\t\tconsole.log(response);\r\n // \t\t}\r\n // \t},\r\n // \tapiOnly: true,\r\n // });\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"uploadfile-win\",\r\n position: \"center\",\r\n head: \"Nhận dữ liệu từ file Excel\",\r\n width: 500,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"uploadfile-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"toolbar\",\r\n css: { background: \"#e6f7ff !important\" },\r\n rows: [\r\n // { gravity: 2 },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Chọn file\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: \"Tải file mẫu\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .bind({ filename: filename })\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n webix.delay(\r\n function (filename) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.download = filename;\r\n link.href = fileURL;\r\n link.click();\r\n document.body.removeChild(link); // remove the link when done\r\n //document.location.href = fileURL;\r\n },\r\n null,\r\n [filename],\r\n 500\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-check\",\r\n label: \"Nhận file (F10)\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n if (file == undefined || file == null) {\r\n webix.message(\"Bạn chưa chọn file !\", \"error\");\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n return;\r\n }\r\n // var kk = $$(\"uploader\").files.data.pull;\r\n // console.log(kk);\r\n $$(\"uploader\").send(function (response) {\r\n var message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n console.log(response);\r\n console.log(message);\r\n if (response != undefined) {\r\n if (!response.hasOwnProperty(\"error\")) {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n //this.callEvent(\"onUploadComplete\");\r\n // success call event onUploadComplete ở trên\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.callback) {\r\n topParentView.config.callback();\r\n return;\r\n }\r\n\r\n if (topParentView.config.tableId !== undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n if (table != null && table.config.url != undefined) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n\r\n webix.alert({\r\n title: \"Thành công !\",\r\n text: \"
\" + message + \"
\",\r\n type: \"alert-warning\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n });\r\n\r\n //webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: response.error,\r\n type: \"alert-error\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n // callback: function (result) {\r\n // \twebix.alert({\r\n // \t\ttitle: \"Custom title\",\r\n // \t\tok: \"Custom text\",\r\n // \t\ttext: \"Result: \" + result\r\n // \t});\r\n // }\r\n });\r\n //webix.message(response.error, \"error\");\r\n }\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n hotkey: \"esc\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-times\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: \"Chọn file\",\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n upload: app.config.host + \"/System/UploadExcel\",\r\n on: {\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (file) {\r\n var fileName = file.name;\r\n if (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"File không đúng định dạng Excel!\",\r\n type: \"alert-error\",\r\n callback: function () {\r\n $$(\"uploader\").files.data.clearAll();\r\n },\r\n });\r\n }\r\n //console.log(file);\r\n // var kk = {\r\n // \tname: file.name,\r\n // \tlastModified: file.lastModified,\r\n // \tlastModifiedDate: file.lastModifiedDate,\r\n // \twebkitRelativePath: file.webkitRelativePath,\r\n // \tid: file.id,\r\n // \tsize: file.size,\r\n // \tsizetext: file.sizetext,\r\n // \tstatus: file.status,\r\n // \ttype: file.type\r\n // };\r\n // $$(\"mylist\").add(kk);\r\n\r\n // console.log($$(\"mylist\").getIdByIndex(0));\r\n // var id = $$(\"mylist\").getIdByIndex(0);\r\n // console.log($$(\"mylist\").getItem(id));\r\n $$(\"mylist\").refresh();\r\n //$$(\"mylist\").show();\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n\r\n if (response === undefined) return;\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n }\r\n },\r\n onFileUploadError: function (file, response) {\r\n console.log(file);\r\n console.log(response);\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n },\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexcelform',[\"app\", \"locale\"], function (app, _) {\r\n // var dialog = webix.ui({\r\n // \tid: \"uploader\",\r\n // \tview: \"uploader\",\r\n // \tvalue: 'Chọn file',\r\n // \tname: \"uploader\",\r\n // \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n // \tlink: \"mylist\",\r\n // \tautosend: false,\r\n // \t//borderless: true,\r\n // \tmultiple: false,\r\n // \tupload: app.config.host + \"/System/UploadExcel\",\r\n // \ton: {\r\n // \t\tonAfterFileAdd: function (file) {\r\n // \t\t\t//console.log(file);\r\n // \t\t\t// var kk = {\r\n // \t\t\t// \tname: file.name,\r\n // \t\t\t// \tlastModified: file.lastModified,\r\n // \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n // \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n // \t\t\t// \tid: file.id,\r\n // \t\t\t// \tsize: file.size,\r\n // \t\t\t// \tsizetext: file.sizetext,\r\n // \t\t\t// \tstatus: file.status,\r\n // \t\t\t// \ttype: file.type\r\n // \t\t\t// };\r\n // \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n // \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n // \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n // \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n // \t\t\t$$(\"mylist\").refresh();\r\n // \t\t\t//$$(\"mylist\").show();\r\n\r\n // \t\t},\r\n // \t\tonUploadComplete: function (response) {\r\n // \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n // \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n // \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \t\t\t// \tif (table != null) {\r\n // \t\t\t// \t\ttable.clearAll();\r\n // \t\t\t// \t\ttable.load(table.config.url);\r\n // \t\t\t// \t}\r\n // \t\t\t// }\r\n // \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n // \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n // \t\t},\r\n // \t\tonFileUploadError: function (file, response) {\r\n // \t\t\tconsole.log(file);\r\n // \t\t\tconsole.log(response);\r\n // \t\t}\r\n // \t},\r\n // \tapiOnly: true,\r\n // });\r\n\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"uploadfile-win\",\r\n position: \"center\",\r\n head: \"Nhận dữ liệu từ file Excel\",\r\n width: 500,\r\n height: 500,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n id: \"uploadfile-form\",\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"toolbar\",\r\n css: { background: \"#e6f7ff !important\" },\r\n rows: [\r\n // { gravity: 2 },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-folder-open\",\r\n label: \"Chọn file\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"uploader\").fileDialog();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-download\",\r\n label: \"Tải file mẫu\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n debugger\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n var table = $$(\"uploadfile-win\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .bind({ filename: filename })\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n webix.delay(\r\n function (filename) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var link = document.createElement(\"a\");\r\n document.body.appendChild(link);\r\n link.download = filename;\r\n link.href = fileURL;\r\n link.click();\r\n document.body.removeChild(link); // remove the link when done\r\n //document.location.href = fileURL;\r\n },\r\n null,\r\n [filename],\r\n 500\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-check\",\r\n label: \"Nhận file (F10)\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n\r\n // Lấy mẫu excel import\r\n var uploader = webix.$$(\"uploader\");\r\n var formData = uploader.config.formData;\r\n var excel_id = formData[\"excel_id\"];\r\n \r\n var table = $$(\"uploadfile-win\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n var file = $$(\"uploader\").files.getFirstId();\r\n if (file == undefined || file == null) {\r\n webix.message(\"Bạn chưa chọn file !\", \"error\");\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n return;\r\n }\r\n\r\n // khi import bật lên rồi sau khi import thì tắt\r\n debugger\r\n var checkTien = $$(\"tudongtinhtien\");\r\n checkTien.setValue(1);\r\n\r\n if(excel_id ===\"EX00017\"){\r\n var checkbox = $$(\"giamthuebanhang20\");\r\n if (checkbox) {\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n checkbox.setValue(0);\r\n }\r\n }\r\n\r\n var fileData = $$(\"uploader\").files.getItem(file);\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(fileData.file);\r\n reader.onload = function (e) {\r\n var table = webix.$$(\"hoadon68_chitiet\");\r\n table.clearAll();\r\n\r\n //Đọc file excel\r\n var data = new Uint8Array(e.target.result);\r\n var workbook = XLSX.read(data, { type: \"array\" });\r\n //Lấy sheet data\r\n var firstSheetName = workbook.SheetNames[0];\r\n var firstSheet = workbook.Sheets[firstSheetName];\r\n var range = XLSX.utils.decode_range(firstSheet[\"!ref\"]);\r\n // đếm cột có kí tự để so sánh mẫu\r\n var totalColumns = 0;\r\n for (var col = range.s.c; col <= range.e.c; col++) {\r\n for (var row = 0; row <= range.e.r; row++) { \r\n var cellAddress = XLSX.utils.encode_cell({ r: row, c: col });\r\n var cell = firstSheet[cellAddress];\r\n \r\n if (cell && cell.v && String(cell.v).trim() !== \"\") {\r\n totalColumns ++; \r\n break; \r\n }\r\n }\r\n }\r\n var checkErro = false;\r\n var isGiamTru = false;\r\n //Lặp từng dòng trong file import\r\n for (var row = 5; row <= (range.e.r + 1); row++) {\r\n var item = {\r\n id: webix.uid(),\r\n };\r\n //Map dữ liệu excel với cột trong bảng table_chitiet\r\n var columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n var columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tlckhau\", \"stckhau\", \"thtien\", \"tiletienthuegtgtgiam\", \"tienthuegtgtgiam\", \"tgtien\"];\r\n if(excel_id ===\"EX00011\"){\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n columnIds= [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"thtien\", \"tlckhau\", \"stckhau\", \"tsuat\", \"tthue\", \"tgtien\"]; // Tên cột tương ứng trong Webix\r\n }else if(excel_id ===\"EX00024\"){\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\"];\r\n columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tgtien\", \"kmai\"]; \r\n }else{\r\n columns = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\"];\r\n columnIds = [\"ma\", \"ten\", \"mdvtinh\", \"sluong\", \"dgia\", \"tlckhau\", \"stckhau\", \"thtien\", \"tiletienthuegtgtgiam\", \"tienthuegtgtgiam\", \"tgtien\"]; \r\n }\r\n if(totalColumns !== columns.length){\r\n webix.message(\"File excel là \" + totalColumns + \" cột khác với file mẫu là \" + columns.length + \" cột!\" , \"error\");\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n //Lặp columns để set giá trị vào ô trong bảng table_chitiet\r\n for (var index = 0; index < columns.length; index++) {\r\n var col = columns[index]; \r\n\r\n var cellAddress = col + row; \r\n var cell = firstSheet[cellAddress];\r\n var value;\r\n if (cell) { \r\n value = cell.v; \r\n if(columnIds[index] === \"tsuat\"){\r\n item[columnIds[index]] = String(value); \r\n }else{\r\n item[columnIds[index]] = value;\r\n }\r\n \r\n } else {\r\n // Check các cột bắt buộc nhập trong excel\r\n if(excel_id ===\"EX00011\" && (columnIds[index]===\"ten\" || columnIds[index]===\"tsuat\" || columnIds[index]===\"tthue\"|| columnIds[index]===\"tgtien\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n if(excel_id ===\"EX00024\" && (columnIds[index]===\"ten\" || columnIds[index]===\"kmai\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n \r\n if(excel_id ===\"EX00017\" && (columnIds[index]===\"ten\" || columnIds[index]===\"thtien\" || columnIds[index]===\"tgtien\")){\r\n webix.message(\"Dòng \" + row + \" cột \" + col+ \" không được để trống\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n item[columnIds[index]] = \"\"; \r\n }\r\n };\r\n\r\n debugger\r\n if(excel_id ===\"EX00017\" && (item[\"sluong\"]!==\"\" && item[\"stckhau\"] !== \"\" && item[\"dgia\"] !== \"\"\r\n && item[\"tlckhau\"] !== \"\")){\r\n if(item[\"dgia\"]*item[\"sluong\"]*item[\"tlckhau\"]/100 !== item[\"stckhau\"]){\r\n webix.message(\"Tiền chiết khấu tại dòng \" + row + \" đang bị tính sai\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n if((item[\"dgia\"]*item[\"sluong\"] - item[\"stckhau\"]) !== item[\"thtien\"]){\r\n webix.message(\"Thành tiền tại dòng \" + row + \" đang bị tính sai\" , \"error\");\r\n table.clearAll();\r\n checkErro = true;\r\n $$(\"tienthuegtgtgiam\").setValue(0);\r\n $$(\"tgtttbso_last\").setValue(0);\r\n break;\r\n }\r\n\r\n }\r\n\r\n if(excel_id ===\"EX00024\" && (item[\"tgtien\"]===\"\" && item[\"kmai\"] !== 4)){\r\n webix.message(\"Trường thành tiền bắt buộc nhập với tính chất khác ghi chú!\" , \"error\");\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"Trường thành tiền bắt buộc nhập với tính chất khác ghi chú!\",\r\n type: \"alert-error\",\r\n });\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n\r\n if(excel_id ===\"EX00024\" && (item[\"tgtien\"]!==\"\" && item[\"kmai\"] === 4)){\r\n webix.message(\"Trường thành tiền không được nhập với tính chất ghi chú!\" , \"error\");\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"Trường thành tiền không được nhập với tính chất ghi chú!\",\r\n type: \"alert-error\",\r\n });\r\n table.clearAll();\r\n checkErro = true;\r\n break;\r\n }\r\n if(checkErro) break;\r\n \r\n if(excel_id ===\"EX00017\" && item[\"tienthuegtgtgiam\"]!==\"\"){\r\n isGiamTru = true;\r\n }\r\n\r\n if(excel_id !==\"EX00024\"){\r\n item[\"kmai\"] = 1; \r\n }\r\n table.add(item); \r\n table.updateItem(item.id, item);\r\n \r\n }\r\n \r\n table.refreshColumns(); \r\n\r\n if(!checkErro){\r\n webix.message(\"Import dữ liệu thành công!\");\r\n }\r\n\r\n //Tắt tự động tính tiền\r\n var checkbox = $$(\"tudongtinhtien\");\r\n if (checkbox) {\r\n checkbox.setValue(0);\r\n }\r\n if(excel_id ===\"EX00017\"){\r\n var checkbox = $$(\"giamthuebanhang20\");\r\n if(isGiamTru){\r\n checkbox.setValue(1);\r\n }\r\n }\r\n };\r\n \r\n reader.onerror = function () {\r\n webix.message(\"Không thể đọc file Excel!\", \"error\");\r\n };\r\n\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n webix.$$(\"uploadfile-win\").close();\r\n return;\r\n \r\n \r\n // var kk = $$(\"uploader\").files.data.pull;\r\n // console.log(kk);\r\n\r\n $$(\"uploader\").send(function (response) {\r\n var message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n console.log(response);\r\n console.log(message);\r\n if (response != undefined) {\r\n if (!response.hasOwnProperty(\"error\")) {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n //this.callEvent(\"onUploadComplete\");\r\n // success call event onUploadComplete ở trên\r\n var topParentView = this.getTopParentView();\r\n\r\n if (topParentView.config.callback) {\r\n topParentView.config.callback();\r\n return;\r\n }\r\n\r\n if (topParentView.config.tableId !== undefined) {\r\n var table = $$(topParentView.config.tableId);\r\n\r\n if (table != null && table.config.url != undefined) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n }\r\n\r\n webix.alert({\r\n title: \"Thành công !\",\r\n text: \"
\" + message + \"
\",\r\n type: \"alert-warning\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n });\r\n\r\n //webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: response.error,\r\n type: \"alert-error\",\r\n callback: function (result) {\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n // callback: function (result) {\r\n // \twebix.alert({\r\n // \t\ttitle: \"Custom title\",\r\n // \t\tok: \"Custom text\",\r\n // \t\ttext: \"Result: \" + result\r\n // \t});\r\n // }\r\n });\r\n //webix.message(response.error, \"error\");\r\n }\r\n } else {\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n }\r\n });\r\n\r\n\r\n\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n hotkey: \"esc\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-times\",\r\n label: \"Hủy bỏ (ESC)\",\r\n width: 110,\r\n on: {\r\n onClick: function () {\r\n $$(\"mylist\").clearAll();\r\n $$(\"mylist\").unbind();\r\n var id = $$(\"uploader\").files.getFirstId();\r\n if (id != undefined) {\r\n $$(\"uploader\").stopUpload(id);\r\n }\r\n webix.$$(\"uploadfile-win\").close();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n rows: [\r\n // {view:\"text\",id:\"df\",label:\"errr\"},\r\n {\r\n id: \"uploader\",\r\n view: \"uploader\",\r\n value: \"Chọn file\",\r\n hide: true,\r\n name: \"uploader\",\r\n accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n link: \"mylist\",\r\n autosend: false,\r\n //borderless: true,\r\n multiple: false,\r\n upload: app.config.host + \"/System/UploadExcel\",\r\n on: {\r\n onAfterRender: function () {\r\n //console.log('called once after first rendering:');\r\n this.hide();\r\n },\r\n onAfterFileAdd: function (file) {\r\n var fileName = file.name;\r\n if (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n webix.alert({\r\n title: \"Lỗi !\",\r\n text: \"File không đúng định dạng Excel!\",\r\n type: \"alert-error\",\r\n callback: function () {\r\n $$(\"uploader\").files.data.clearAll();\r\n },\r\n });\r\n }\r\n //console.log(file);\r\n // var kk = {\r\n // \tname: file.name,\r\n // \tlastModified: file.lastModified,\r\n // \tlastModifiedDate: file.lastModifiedDate,\r\n // \twebkitRelativePath: file.webkitRelativePath,\r\n // \tid: file.id,\r\n // \tsize: file.size,\r\n // \tsizetext: file.sizetext,\r\n // \tstatus: file.status,\r\n // \ttype: file.type\r\n // };\r\n // $$(\"mylist\").add(kk);\r\n\r\n // console.log($$(\"mylist\").getIdByIndex(0));\r\n // var id = $$(\"mylist\").getIdByIndex(0);\r\n // console.log($$(\"mylist\").getItem(id));\r\n $$(\"mylist\").refresh();\r\n //$$(\"mylist\").show();\r\n },\r\n onUploadComplete: function (response) {\r\n // var topParentView = this.getTopParentView();\r\n\r\n // if (topParentView.config.tableId !== undefined) {\r\n // \tvar table = $$(topParentView.config.tableId);\r\n\r\n // \tif (table != null) {\r\n // \t\ttable.clearAll();\r\n // \t\ttable.load(table.config.url);\r\n // \t}\r\n // }\r\n // webix.message(\"Upload File thành công !\", \"debug\");\r\n // webix.$$(\"uploadfile-win\").close();\r\n\r\n if (response === undefined) return;\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n }\r\n },\r\n onFileUploadError: function (file, response) {\r\n console.log(file);\r\n console.log(response);\r\n $$(\"uploadfile-win\").enable();\r\n $$(\"uploadfile-win\").hideProgress();\r\n },\r\n },\r\n apiOnly: true,\r\n },\r\n {\r\n view: \"list\",\r\n id: \"mylist\",\r\n type: \"uploader\",\r\n height: 100,\r\n //autoheight: true\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/uploadexceltemplate',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"uploadfile-win\", position: \"center\",\r\n\t\t\thead: \"Nhận dữ liệu từ file Excel\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 500,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"uploadfile-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"toolbar\",\r\n\t\t\t\t\t\t\t\tcss: { \"background\": \"#e6f7ff !important\" },\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploader\").fileDialog();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-download\", label: \"Tải file mẫu\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar uploader = webix.$$(\"uploader\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tdebugger;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar formData = uploader.config.formData;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar parent_code = formData[\"parent_code\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.bind({filename: filename})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.response(\"arraybuffer\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"] + \"&branch_code=\" + parent_code, function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.delay(function (filename) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar fileURL = URL.createObjectURL(file);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar link = document.createElement('a');\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(link);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.download = filename;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.click();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.removeChild(link); // remove the link when done\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, null, [filename], 500);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", type: \"icon\", icon: \"fas fa-check\", label: \"Nhận file (F10)\", width: 120, on: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar file = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (file == undefined || file == null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Bạn chưa chọn file !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").send(function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar message = response.message || \"Nhập file Excel thành công !\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (response != undefined) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!response.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.callback){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttopParentView.config.callback();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (table != null && table.config.url!=undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thành công !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"
\"+message+\"
\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-warning\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: response.error,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n callback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\thotkey: \"esc\", view: \"button\", type: \"icon\", icon: \"fas fa-times\", label: \"Hủy bỏ (ESC)\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").unbind();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar id = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (id != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").stopUpload(id);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tview: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tvalue: 'Chọn file',\r\n\t\t\t\t\t\t\t\t\t\thide: true,\r\n\t\t\t\t\t\t\t\t\t\tname: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\t\t\t\t\tlink: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\tautosend: false,\r\n\t\t\t\t\t\t\t\t\t\tmultiple: false,\r\n\t\t\t\t\t\t\t\t\t\tupload: app.config.host + \"/System/UploadExcelTemplate\",\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterRender: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterFileAdd: function (file) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar fileName = file.name;\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (!fileName.endsWith(\".xls\") && !fileName.endsWith(\".xlsx\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"File không đúng định dạng Excel!\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").files.data.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonUploadComplete: function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response === undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({type:\"error\",text:response.error});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonFileUploadError: function (file, response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tapiOnly: true,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\t\tid: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\ttype: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\theight: 100,\r\n\t\t\t\t\t\t\t\t\t\tborderless: true\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/forms/uploadexceluser',[\"app\", \"locale\"], function (app, _) {\r\n\r\n\t// var dialog = webix.ui({\r\n\t// \tid: \"uploader\",\r\n\t// \tview: \"uploader\",\r\n\t// \tvalue: 'Chọn file',\r\n\t// \tname: \"uploader\",\r\n\t// \taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t// \tlink: \"mylist\",\r\n\t// \tautosend: false,\r\n\t// \t//borderless: true,\r\n\t// \tmultiple: false,\r\n\t// \tupload: app.config.host + \"/System/UploadExcel\",\r\n\t// \ton: {\r\n\t// \t\tonAfterFileAdd: function (file) {\r\n\t// \t\t\t//console.log(file);\r\n\t// \t\t\t// var kk = {\r\n\t// \t\t\t// \tname: file.name, \r\n\t// \t\t\t// \tlastModified: file.lastModified,\r\n\t// \t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n\t// \t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n\t// \t\t\t// \tid: file.id,\r\n\t// \t\t\t// \tsize: file.size,\r\n\t// \t\t\t// \tsizetext: file.sizetext,\r\n\t// \t\t\t// \tstatus: file.status,\r\n\t// \t\t\t// \ttype: file.type\r\n\t// \t\t\t// };\r\n\t// \t\t\t// $$(\"mylist\").add(kk);\r\n\r\n\t// \t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n\t// \t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n\t// \t\t\t// console.log($$(\"mylist\").getItem(id));\r\n\t// \t\t\t$$(\"mylist\").refresh();\r\n\t// \t\t\t//$$(\"mylist\").show();\r\n\r\n\t// \t\t},\r\n\t// \t\tonUploadComplete: function (response) {\r\n\t// \t\t\t// var topParentView = this.getTopParentView();\r\n\r\n\t// \t\t\t// if (topParentView.config.tableId !== undefined) {\r\n\t// \t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n\t// \t\t\t// \tif (table != null) {\r\n\t// \t\t\t// \t\ttable.clearAll();\r\n\t// \t\t\t// \t\ttable.load(table.config.url);\r\n\t// \t\t\t// \t}\r\n\t// \t\t\t// }\r\n\t// \t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n\t// \t\t\t// webix.$$(\"uploadfile-win\").close();\r\n\t// \t\t},\r\n\t// \t\tonFileUploadError: function (file, response) {\r\n\t// \t\t\tconsole.log(file);\r\n\t// \t\t\tconsole.log(response);\r\n\t// \t\t}\r\n\t// \t},\r\n\t// \tapiOnly: true,\r\n\t// });\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\tview: \"window\", modal: true, id: \"uploadfile-win\", position: \"center\",\r\n\t\t\thead: \"Nhận dữ liệu từ file Excel\",\r\n\t\t\twidth: 500,\r\n\t\t\theight: 500,\r\n\t\t\tbody: {\r\n\t\t\t\tpaddingY: 10,\r\n\t\t\t\tpaddingX: 10,\r\n\t\t\t\telementsConfig: { labelWidth: 100 },\r\n\t\t\t\tview: \"form\",\r\n\t\t\t\tid: \"uploadfile-form\",\r\n\t\t\t\tcomplexData: true,\r\n\t\t\t\telements: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tview: \"toolbar\",\r\n\t\t\t\t\t\t\t\tcss: { \"background\": \"#e6f7ff !important\" },\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t// { gravity: 2 },\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-folder-open\", label: \"Chọn file\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploader\").fileDialog();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"button\", type: \"icon\", icon: \"fas fa-download\", label: \"Tải file mẫu\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar uploader = webix.$$(\"uploader\");\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar formData = uploader.config.formData;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar filename = formData[\"filename\"] == null ? \"template.xlsx\" : formData[\"filename\"];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.extend(table, webix.OverlayBox);\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.ajax()\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.bind({filename: filename})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.response(\"arraybuffer\")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.headers({ 'Content-type': 'application/json' })\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t.get(app.config.host + \"/System/DownloadFileExcelTemplate?id=\" + formData[\"excel_id\"], function (text, data, XmlHttpRequest) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.delay(function (filename) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar fileURL = URL.createObjectURL(file);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar link = document.createElement('a');\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.appendChild(link);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.download = filename;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlink.click();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdocument.body.removeChild(link); // remove the link when done\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//document.location.href = fileURL;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, null, [filename], 500);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tshortcut: \"F10\", view: \"button\", type: \"icon\", icon: \"fas fa-check\", label: \"Nhận file (F10)\", width: 120, on: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(\"uploadfile-win\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.extend(table, webix.OverlayBox);\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.extend(table, webix.ProgressBar);\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.disable();\r\n\t\t\t\t\t\t\t\t\t\t\t\ttable.showProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar file = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (file == undefined || file == null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message(\"Bạn chưa chọn file !\", \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var kk = $$(\"uploader\").files.data.pull;\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log(kk);\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").send(function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar message = response.message || \"Nhận dữ liệu Excel thành công !\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(response);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(message);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (response != undefined) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (!response.hasOwnProperty(\"error\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//this.callEvent(\"onUploadComplete\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// success call event onUploadComplete ở trên \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// if (topParentView.config.callback){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \ttopParentView.config.callback();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \treturn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (table != null && table.config.url!=undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Thành công !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: \"
\"+message+\"
\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-warning\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(\"Nhận dữ liệu Excel thành công !\", \"debug\");\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle: \"Lỗi !\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext: response.error,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"alert-error\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcallback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// callback: function (result) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \twebix.alert({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttitle: \"Custom title\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\tok: \"Custom text\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttext: \"Result: \" + result\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// \t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//webix.message(response.error, \"error\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\thotkey: \"esc\", view: \"button\", type: \"icon\", icon: \"fas fa-times\", label: \"Hủy bỏ (ESC)\", width: 110,\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").unbind();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar id = $$(\"uploader\").files.getFirstId();\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (id != undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploader\").stopUpload(id);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\trows: [\r\n\t\t\t\t\t\t\t\t\t// {view:\"text\",id:\"df\",label:\"errr\"},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tid: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tview: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\tvalue: 'Chọn file',\r\n\t\t\t\t\t\t\t\t\t\thide: true,\r\n\t\t\t\t\t\t\t\t\t\tname: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\taccept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\t\t\t\t\tlink: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\tautosend: false,\r\n\t\t\t\t\t\t\t\t\t\t//borderless: true,\r\n\t\t\t\t\t\t\t\t\t\tmultiple: false,\r\n\t\t\t\t\t\t\t\t\t\tupload: app.config.host + \"/System/UploadExcelListUnit\",\r\n\t\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterRender: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log('called once after first rendering:');\r\n\t\t\t\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonAfterFileAdd: function (file) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t//console.log(file);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var kk = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tname: file.name, \r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tlastModified: file.lastModified,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tlastModifiedDate: file.lastModifiedDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \twebkitRelativePath: file.webkitRelativePath,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tid: file.id,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tsize: file.size,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tsizetext: file.sizetext,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tstatus: file.status,\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \ttype: file.type\r\n\t\t\t\t\t\t\t\t\t\t\t\t// };\r\n\t\t\t\t\t\t\t\t\t\t\t\t// $$(\"mylist\").add(kk);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log($$(\"mylist\").getIdByIndex(0));\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var id = $$(\"mylist\").getIdByIndex(0);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// console.log($$(\"mylist\").getItem(id));\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"mylist\").refresh();\r\n\t\t\t\t\t\t\t\t\t\t\t\t//$$(\"mylist\").show();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonUploadComplete: function (response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// var topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// if (topParentView.config.tableId !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \tif (table != null) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t// }\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.message(\"Upload File thành công !\", \"debug\");\r\n\t\t\t\t\t\t\t\t\t\t\t\t// webix.$$(\"uploadfile-win\").close();\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response === undefined) return;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\twebix.message({type:\"error\",text:response.error});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\tonFileUploadError: function (file, response) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(file);\r\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(response);\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").enable();\r\n\t\t\t\t\t\t\t\t\t\t\t\t$$(\"uploadfile-win\").hideProgress();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tapiOnly: true,\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tview: \"list\",\r\n\t\t\t\t\t\t\t\t\t\tid: \"mylist\",\r\n\t\t\t\t\t\t\t\t\t\ttype: \"uploader\",\r\n\t\t\t\t\t\t\t\t\t\theight: 100,\r\n\t\t\t\t\t\t\t\t\t\t//autoheight: true\r\n\t\t\t\t\t\t\t\t\t\tborderless: true\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/forms/uploadfile',[\"app\"],function(app){\r\n\t\r\n\treturn {\t\t\r\n\t\t$ui:{\r\n\t\t\tview:\"window\", modal:true, id:\"uploadfile-win\", position:\"center\",\r\n\t\t\thead:\"Tải file\",\r\n\t\t\tbody:{\r\n paddingY:20, \r\n paddingX:30, \r\n elementsConfig:{labelWidth: 100}, \r\n view:\"form\", \r\n\t\t\t\tid:\"uploadfile-form\", \r\n\t\t\t\tcomplexData:true,\r\n elements:[\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\tid:\"uploader\",\r\n\t\t\t\t\t\tview: \"uploader\", \r\n\t\t\t\t\t\tvalue: 'Upload file', \r\n\t\t\t\t\t\tname:\"file\",\r\n\t\t\t\t\t\t//accept:\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n\t\t\t\t\t\tlink:\"mylist\",\r\n\t\t\t\t\t\t//upload: app.config.host + \"/System/UploadExcel\" ,\r\n\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\tonUploadComplete: function(response){\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"error\")){\r\n\t\t\t\t\t\t\t\t\twebix.message({ type:\"error\",text:response[\"error\"]});\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar topParentView = this.getTopParentView();\r\n\r\n\t\t\t\t\t\t\t\tif (topParentView.config.tableId !== undefined){\r\n\t\t\t\t\t\t\t\t\tvar table = $$(topParentView.config.tableId);\r\n\r\n\t\t\t\t\t\t\t\t\tif (table!=null){\r\n\t\t\t\t\t\t\t\t\t\ttable.clearAll();\r\n\t\t\t\t\t\t\t\t\t\ttable.load(table.config.url);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (response.hasOwnProperty(\"success\")){\r\n\t\t\t\t\t\t\t\t\twebix.message({ type:\"success\",text:response[\"success\"]});\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview:\"list\", \r\n\t\t\t\t\t\tid:\"mylist\", \r\n\t\t\t\t\t\ttype:\"uploader\",\r\n\t\t\t\t\t\tautoheight:true, borderless:true\t\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\tlabel: \"Hủy bỏ\",\r\n\t\t\t\t\t\tclick: function() {\r\n\t\t\t\t\t\t\twebix.$$(\"uploadfile-win\").close();\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t}\t\r\n\t\t\r\n\t};\r\n\r\n});\ndefine('views/forms/usertracuu',[\"app\", \"models/user\", \"views/menus/version\"], function (app, user, version) {\r\n var editmode = 0;\r\n function initUI(item) {\r\n var form = $$(\"usertracuu-win\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n var mst = version.getMST();\r\n var schema = version.GetSchema();\r\n //console.log(schema);\r\n item.mst = mst;\r\n // item.mst = \"0100686209\";\r\n item.schema_name = schema;\r\n webix\r\n .ajax()\r\n .headers({ \"content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/GetUserTracuu\", item, function (result) {\r\n form.enable();\r\n form.hideProgress();\r\n var data = JSON.parse(result);\r\n if (!data.hasOwnProperty(\"error\")) {\r\n var btnEdit = webix.$$(\"btnSavve\");\r\n btnEdit.define(\"label\", \"Sửa\");\r\n btnEdit.refresh();\r\n data.ma_dt = data.code_customer;\r\n data.mst = data.tax_code;\r\n $$(\"usertracuu-form\").setValues(data);\r\n } else {\r\n webix.message(data.error, \"debug\");\r\n $$(\"schema_name\").setValue(item.schema_name);\r\n $$(\"mst\").setValue(item.mst);\r\n // $$(\"mst\").setValue(\"0100686209\");\r\n $$(\"email\").setValue(item.email);\r\n $$(\"username\").setValue(item.code.replace(/[^a-zA-Z0-9 ]/g, \"\"));\r\n $$(\"ma_dt\").setValue(item.code);\r\n }\r\n });\r\n }\r\n return {\r\n $ui: {\r\n view: \"window\",\r\n modal: true,\r\n id: \"usertracuu-win\",\r\n position: \"center\",\r\n move: true,\r\n resize: true,\r\n head: \"Thông tin khách hàng hỗ trợ\",\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n //elementsConfig: { labelWidth: 100 },\r\n view: \"form\",\r\n width: 500,\r\n // height: 150,\r\n id: \"usertracuu-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: \"Chema name: \",\r\n labelWidth: 80,\r\n name: \"schema_name\",\r\n id: \"schema_name\",\r\n readonly: true,\r\n hidden: true,\r\n css: \"mcls_readonly_text\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã số thuế: \",\r\n labelWidth: 80,\r\n name: \"mst\",\r\n id: \"mst\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Mã KH : \",\r\n labelWidth: 80,\r\n name: \"ma_dt\",\r\n id: \"ma_dt\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Username \",\r\n labelWidth: 80,\r\n name: \"username\",\r\n id: \"username\",\r\n // readonly: true,\r\n readonly: true,\r\n css: \"mcls_readonly_text\",\r\n required: true,\r\n invalidMessage: \"Tên truy cập không để trống hoặc nhập không đúng (a-z,A-Z,0-9)\",\r\n validate: webix.rules.isSpecialCharacter,\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Password: \",\r\n labelWidth: 80,\r\n name: \"password\",\r\n id: \"password\",\r\n //value: \"minvoice\",\r\n required: true,\r\n invalidMessage: \"Password không được để trống\",\r\n },\r\n {\r\n view: \"text\",\r\n label: \"Email: \",\r\n labelWidth: 80,\r\n name: \"email\",\r\n id: \"email\",\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n view: \"button\",\r\n id: \"btnSavve\",\r\n type: \"image\",\r\n image: \"assets/imgs/save.png\",\r\n label: \"Lưu\",\r\n width: 60,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n\r\n if ($$(\"usertracuu-form\").validate()) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/CreateUser_tracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"image\",\r\n image: \"assets/imgs/reset.png\",\r\n label: \"Reset Password\",\r\n width: 130,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn muốn reset mật khẩu về mật khẩu mặc định ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/ResetPassUserTracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n id: \"btnXoa\",\r\n type: \"image\",\r\n image: \"assets/imgs/xoa.png\",\r\n label: \"Xóa\",\r\n width: 60,\r\n click: function () {\r\n var form = webix.$$(\"usertracuu-form\");\r\n var item = form.getValues();\r\n webix.confirm({\r\n text: \"Bạn có chắc chắn muốn xóa tài khoản ?\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/DeleteUserTracuu\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message(data.ok, \"success\");\r\n webix.$$(\"usertracuu-win\").close();\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"image\",\r\n image: \"assets/imgs/close.png\",\r\n label: \"Hủy bỏ\",\r\n hotkey: \"esc\",\r\n width: 80,\r\n click: function () {\r\n webix.$$(\"usertracuu-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n },\r\n initUI: initUI,\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n },\r\n setValues: function (item) {\r\n var form = webix.$$(\"usertracuu-form\");\r\n // var table = webix.$$(\"discountTable\");\r\n\r\n form.setValues(item);\r\n // table.parse(item.hp_hsgiamtrus, \"json\");\r\n },\r\n };\r\n});\r\n\ndefine('views/forms/xoabo',[\"app\", \"locale\", \"models/user\", \"views/modules/minvoiceplugin\"], function (app, _, user, plugin) {\r\n var editmode = 0;\r\n\r\n function signOnServer(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n data.serialNumber = cert.so_serial;\r\n\r\n webix.ajax()\r\n .bind(data)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json[\"error\"] });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var parameters = this;\r\n parameters.InvoiceXmlData = json.xml;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n\r\n function signOnServerFile(data, cert, server_cert) {\r\n\r\n var parameters = {\r\n xml: data[\"InvoiceXmlData\"],\r\n refUri: \"#data\",\r\n certSerial: cert.so_serial,\r\n tokenSerial: cert.tokenSerial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n path: cert.path,\r\n inv_InvoiceAuth_id: data[\"inv_InvoiceAuth_id\"]\r\n };\r\n\r\n data.serialNumber = cert.so_serial;\r\n\r\n webix.ajax()\r\n .bind(data)\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXmlByFile\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json[\"error\"] });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n else {\r\n var parameters = this;\r\n parameters.InvoiceXmlData = json.xml;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n function signOnCertFile(cert){\r\n \r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var item = form.getValues();\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var postData={\r\n username:user.getCurrentUser(),\r\n branch_code:\"\",\r\n template_code:selectedItem.template_code,\r\n invoice_series:selectedItem.invoice_series,\r\n invoice_number:selectedItem.invoice_number,\r\n cer_serial:cert.so_serial,\r\n ngayvb:moment(item.ngayvb).format(\"YYYY-MM-DD\"),\r\n sovb:item.sovb,\r\n ghi_chu:item.ghi_chu\r\n };\r\n\r\n webix.ajax()\r\n .headers({'Content-Type':'application/json'})\r\n .post(app.config.host + \"/Invoice/DeleteByCertFile\",postData,function(text){\r\n var res=JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (res.hasOwnProperty(\"error\")){\r\n webix.message({type:\"error\",text:res.error});\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n });\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"chukyso-win\", position: \"center\",\r\n head: \"Xoá bỏ hóa đơn\",\r\n width: 400,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 10,\r\n view: \"form\",\r\n id: \"chukyso-form\",\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n label: _(\"SOVB\"),\r\n labelPosition: \"top\",\r\n name: \"sovb\",\r\n required: true,\r\n invalidMessage: \"Số văn bản không được để trống\"\r\n },\r\n {\r\n view: \"datepicker\",\r\n label: _(\"NGAYVB\"),\r\n labelPosition: \"top\",\r\n name: \"ngayvb\",\r\n format: \"%d/%m/%Y\",\r\n required: true,\r\n invalidMessage: \"Ngày văn bản không được để trống\"\r\n },\r\n {\r\n view: \"textarea\",\r\n name: \"ghi_chu\",\r\n label: _(\"GHI_CHU\"),\r\n labelPosition: \"top\",\r\n height: 150\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\", view: \"button\", label: \"Lưu (F10)\", type: \"form\", align: \"center\", width: 100,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n if (form.validate() == false) return;\r\n\r\n var item = form.getValues();\r\n\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var a = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/GetThongTinXoaBo\", {\r\n id: selectedItem.id,\r\n sovb: item.sovb,\r\n ngayvb: item.ngayvb,\r\n ghi_chu: item.ghi_chu\r\n });\r\n\r\n var b = webix.ajax(app.config.host + \"/Invoice/GetListCertificates\");\r\n\r\n var c = webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\"\r\n }\r\n });\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix.promise.all([a, b, c]).then(function (results) {\r\n var a_result = results[0].json();\r\n var listcerts = results[1].json();\r\n var c_result = results[2].json();\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n return;\r\n }\r\n\r\n if (a_result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: a_result.error });\r\n\r\n form.enable();\r\n form.hideProgress();\r\n\r\n return;\r\n\r\n }\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < c_result.length; i++) {\r\n var item = c_result[i];\r\n\r\n if (item.ma == \"KYTAPTRUNG\") {\r\n kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n server_cert = item.gia_tri;\r\n }\r\n }\r\n\r\n //console.log(listcerts.length);\r\n\r\n if (kytaptrung == \"C\") {\r\n if (listcerts.length == 1) {\r\n signOnServer(a_result, listcerts[0], server_cert);\r\n }\r\n else {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide(); \r\n signOnServer(table.config.xmlData, cert, table.config.server_cert);\r\n\r\n break;\r\n }\r\n }\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\"\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\"\r\n });\r\n }\r\n }\r\n else {\r\n if (kytaptrung == \"FILE\") {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n webix.modalbox.hide();\r\n signOnServerFile(table.config.xmlData, cert, table.config.server_cert);\r\n\r\n break;\r\n }\r\n }\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n xmlData: a_result,\r\n server_cert: server_cert,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\"\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"so_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150\r\n },\r\n {\r\n id: \"subjectname\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450\r\n },\r\n {\r\n id: \"ngaybatdau\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200\r\n },\r\n {\r\n id: \"ngayketthuc\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificatesFile\"\r\n });\r\n }\r\n else {\r\n\r\n if (listcerts.length == 1){\r\n var cert = listcerts[0];\r\n\r\n if (cert.cert_type == \"FILE\"){\r\n signOnCertFile(cert);\r\n return;\r\n }\r\n }\r\n \r\n console.log(\"Signature_Client\");\r\n //console.log(a_result);\r\n var resultTime;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/System/GetDate\", function (text) {\r\n resultTime = JSON.parse(text);\r\n });\r\n var hub = plugin.hub();\r\n\r\n hub.off('resCommand');\r\n hub.on('resCommand', function (result) {\r\n var json = JSON.parse(result);\r\n console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: 'error', text: json.error });\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n }\r\n else {\r\n\r\n var callback = json.callback;\r\n\r\n if (callback == \"SignCancelInvoice\") {\r\n var parameters = json.data;\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SaveInvoiceXoaBo\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result[\"error\"] });\r\n }\r\n else {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n $$(\"chukyso-win\").close();\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var arg = {\r\n callback: \"SignCancelInvoice\",\r\n idData: \"#data\",\r\n data: a_result,\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: resultTime.dateKy,\r\n listcerts: listcerts\r\n };\r\n\r\n\r\n hub.invoke('execCommand', arg.callback, JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success done !\");\r\n //console.log(\"2\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n }\r\n }\r\n\r\n }).fail(function (err) {\r\n alert(err);\r\n\r\n var form = webix.$$(\"chukyso-form\");\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n\r\n }\r\n },\r\n {\r\n view: \"button\", hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", type: \"danger\", align: \"center\", width: 100,\r\n click: function () {\r\n webix.$$(\"chukyso-win\").close();\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n\r\n },\r\n setEditMode: function (mode) {\r\n editmode = mode;\r\n }\r\n };\r\n\r\n});\ndefine('views/hotro',[\"app\", \"locale\", \"views/forms/license\"], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\", details: \"Gửi yêu cầu hỗ trợ đến MobiFone Invoice\" });\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n // {\r\n // height: 35,\r\n // type: \"toolbar\",\r\n // cols: controls\r\n // },\r\n {\r\n // view: \"scrollview\",\r\n // scroll: \"y\",\r\n // body: {\r\n view: \"form\",\r\n id: \"form_hotro\",\r\n paddingY: 10,\r\n // width: 500,\r\n // height: 500,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n id: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n id: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_lien_he\",\r\n id: \"nguoi_lien_he\",\r\n label: _(\"Người liên hệ\"),\r\n labelPosition: \"top\",\r\n required: true,\r\n invalidMessage: \"Bạn phải nhập người liên hệ\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"sdt\",\r\n id: \"sdt\",\r\n label: \"Số điện thoại\",\r\n labelPosition: \"top\",\r\n required: true,\r\n //webix.ru\r\n invalidMessage: \"Bạn phải nhập số điện thoại\",\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"teamview\",\r\n id: \"teamview\",\r\n label: _(\"Teamview (UltraViewer)\"),\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"pass\",\r\n id: \"pass\",\r\n label: \"Password\",\r\n labelPosition: \"top\",\r\n },\r\n ],\r\n },\r\n {\r\n id: \"noi_dung\",\r\n view: \"textarea\",\r\n name: \"noi_dung\",\r\n label: \"Yêu cầu hỗ trợ\",\r\n height: 160,\r\n labelPosition: \"top\",\r\n },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi (F10)\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"form_hotro\");\r\n\r\n var item = form.getValues();\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y - %H:%i\");\r\n var string = format(new Date());\r\n\r\n var descrip =\r\n \"Ngày :\" +\r\n string +\r\n \"
\" +\r\n \"Công ty :\" +\r\n item.ten_dvcs +\r\n \"
\" +\r\n \"Mã số thuế :\" +\r\n item.ms_thue +\r\n \"
\" +\r\n \"Người liên hệ: \" +\r\n item.nguoi_lien_he +\r\n \"
\" +\r\n \"Số điện thoại: \" +\r\n item.sdt +\r\n \"
\" +\r\n \"Teamview (UltraViewer): \" +\r\n item.teamview +\r\n \"
\" +\r\n \"Pass: \" +\r\n item.pass +\r\n \"
\" +\r\n \"Nội dung cần hỗ trợ: \" +\r\n item.noi_dung +\r\n \"
\";\r\n\r\n if ($$(\"form_hotro\").validate()) {\r\n var box = webix.modalbox({\r\n title: \"Đang gửi yêu cầu hỗ trợ đến MobiFone Invoice\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var data = {\r\n mst: item.ms_thue,\r\n noidung: item.noi_dung,\r\n nguoi_lien_he: item.nguoi_lien_he,\r\n sdt_nguoi_lien_he: item.sdt,\r\n ultra_teamview: item.teamview,\r\n pass: item.pass,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/SendSupport\", data, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n if (!json.hasOwnProperty(\"error\")) {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n webix.message(\"Gửi yêu cầu hỗ trợ thành công !\", \"debug\");\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n webix.modalbox.hide(box);\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Nhập lại (ESC)\",\r\n align: \"center\",\r\n width: 120,\r\n type: \"danger\",\r\n click: function () {\r\n $$(\"nguoi_lien_he\").setValue(null);\r\n $$(\"sdt\").setValue(null);\r\n $$(\"teamview\").setValue(null);\r\n $$(\"pass\").setValue(null);\r\n $$(\"noi_dung\").setValue(null);\r\n // webix.$$(\"chukyso-win\").close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"form_hotro\").setValues(json);\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/infocompany',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Thông tin doanh nghiệp\", details: \"Cập nhật thông tin doanh nghiệp\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n //css: \"mcls_btn_save\", \r\n icon: \"save\",\r\n label: _(\"Ghi\") + \" (F10)\",\r\n width: 85,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"foInfoCompany\");\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n\r\n webix.ajax()\r\n .bind(form)\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/SaveInfoCompany\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n this.enable();\r\n this.hideProgress();\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"debug\", text: \"Đã lưu thành công\" });\r\n\r\n }\r\n else {\r\n webix.message({ type: \"error\", text: data.error });\r\n }\r\n });\r\n }\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { height: 20 },\r\n {\r\n view: \"form\",\r\n id: \"foInfoCompany\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"tax_code\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"name\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"address\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email\",\r\n label: \"Email\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"text\",\r\n name: \"begin_date\",\r\n label: _(\"NGAY_BD_NAM_TC\"),\r\n placeholder: \"dd/mm\",\r\n labelPosition: \"top\",\r\n invalidMessage: _(\"NGAY_BD_NAM_TC\") + \" không hợp lệ\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n this.validate();\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"tel\",\r\n label: _(\"DIEN_THOAI\"),\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng điện thoại nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"fax\",\r\n label: \"Fax\",\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng fax nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"city\",\r\n label: _(\"TINH_THANH\"),\r\n labelPosition: \"top\"\r\n },\r\n\r\n {\r\n view: \"text\",\r\n name: \"district\",\r\n label: \"Quận huyện\",\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"bank_account\",\r\n label: _(\"TAI_KHOAN\"),\r\n labelPosition: \"top\",\r\n validate: webix.rules.isPhoneNumber,\r\n invalidMessage: \"Định dạng tài khoản nhập không đúng\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"bank_name\",\r\n label: _(\"TAI_NH\"),\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"combo\",\r\n name: \"provincial_tax_authorities\",\r\n label: \"Cơ quan thuế cấp tỉnh\",\r\n labelPosition: \"top\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00015\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.ajax()\r\n .headers({ 'Content-Type': 'application/json' })\r\n .post(\r\n app.config.host + \"/System/ExecuteCommand\",\r\n {\r\n command: \"CM00007\",\r\n parameter: {\r\n nhom: newv\r\n }\r\n },\r\n function (text) {\r\n var result = JSON.parse(text);\r\n\r\n var list = $$(\"ma_cqthuecapql\").getPopup().getList();\r\n list.clearAll();\r\n\r\n list.parse(result);\r\n });\r\n\r\n\r\n }\r\n }\r\n },\r\n {\r\n id: \"ma_cqthuecapql\",\r\n view: \"combo\",\r\n name: \"manage_tax_authorities\",\r\n label: \"Cơ quan thuế quản lý\",\r\n labelPosition: \"top\",\r\n options: []\r\n }\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị chủ quản\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n name: \"manage_taxcode\",\r\n label: _(\"MS_THUE\"),\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"manage_unit_name\",\r\n label: _(\"DONVI\"),\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"manage_email\",\r\n validate: webix.rules.isEmail,\r\n invalidMessage: \"Email không hợp lệ\",\r\n label: _(\"EMAIL\"),\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n }\r\n ],\r\n rules: {\r\n begin_date: function (value) {\r\n if (value != \"\") {\r\n\r\n if (value.toString().length != 5)\r\n return false;\r\n\r\n var patt = /^[0-1][1-2][/][0-9][0-9]$/;\r\n\r\n return patt.test(value);\r\n\r\n }\r\n return true;\r\n }\r\n }\r\n },\r\n { height: 10 }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"foInfoCompany\").setValues(json);\r\n\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/license',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký bản quyền\", details: \"Đăng ký số lượng hóa đơn sử dụng\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRegFirst\",\r\n view: \"button\",\r\n type: \"form\",\r\n icon: \"registered\",\r\n label: _(\"DANG_KY_LAN_DAU\"),\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax().bind(this).get(app.config.host + \"/License/Info\", function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.key_license != undefined) {\r\n webix.alert({\r\n title: _(\"THONG_BAO\"),\r\n ok: \"OK\",\r\n text: \"Phần mềm đã được đăng ký lần đầu\"\r\n });\r\n }\r\n else {\r\n var win = this.$scope.ui(licenseForm.$ui);\r\n win.getHead().setHTML(_(\"DANG_KY_LAN_DAU\"));\r\n win.show();\r\n $$(\"license-form\").setValues(json);\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnRegMore\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"registered\",\r\n label: _(\"DANG_KY_THEM\"),\r\n width: 150,\r\n on: {\r\n onClick: function () {\r\n\r\n webix.ajax().bind(this).get(app.config.host + \"/License/Info\", function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.key_license != undefined) {\r\n var win = this.$scope.ui(licenseForm.$ui);\r\n win.getHead().setHTML(_(\"DANG_KY_THEM\"));\r\n win.show();\r\n $$(\"license-form\").setValues(json);\r\n }\r\n else {\r\n\r\n webix.alert({\r\n title: _(\"THONG_BAO\"),\r\n ok: \"OK\",\r\n text: \"Phần mềm chưa được đăng ký lần đầu\"\r\n });\r\n }\r\n });\r\n\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n view: \"iframe\",\r\n id: \"framePdf\",\r\n toolbar: \"toolbar\",\r\n //src: app.config.host + \"/License/PrintLicenseInfo\"\r\n\r\n }\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/License/PrintLicenseInfo\";\r\n\r\n var form = view;\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n form.enable();\r\n form.hideProgress();\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: 'application/pdf' });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n var framePdf = $$(\"framePdf\");\r\n framePdf.load(fileURL);\r\n\r\n form.enable();\r\n form.hideProgress();\r\n }\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/licenseInvoice',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/menus/version\",\r\n], function (app, _, user, version) {\r\n \r\n\r\n var op = [];\r\n webix.$$(\"title\").parse({ title: \"Thông tin doanh nghiệp\", details: \"Cập nhật thông tin doanh nghiệp\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Cấp bản quyền (F10)\",\r\n //width: 135,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"foInfoCompany\");\r\n\r\n if (form.validate()) {\r\n var item = form.getValues();\r\n if (item.floderId == null || item.floderId == \"\") {\r\n var box = webix.modalbox({\r\n title: \"Đang tạo thư mục ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200\r\n });\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/License/SaveInfoCompany\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"debug\", text: \"Cấp bản quyền thành công\" });\r\n var table = webix.$$(\"foInfoCompany\");\r\n table.refresh();\r\n\r\n table.load(table.config.url);\r\n webix.modalbox.hide(box);\r\n }\r\n else {\r\n webix.message({ type: \"error\", text: data.error });\r\n webix.modalbox.hide(box);\r\n }\r\n });\r\n }\r\n else {\r\n webix.message(\"Khách hàng đã được cấp bản quyền !\", \"error\");\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"form\",\r\n id: \"foInfoCompany\",\r\n paddingY: 15,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 15,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"text\",\r\n name: \"ms_thue\",\r\n label: _(\"MS_THUE\"),\r\n css: \"mcls_license_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"nguoi_dai_dien\",\r\n label: _(\"NGUOI_DAI_DIEN_PL\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n }\r\n ]\r\n\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcs\",\r\n label: _(\"DONVI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: _(\"DIA_CHI\"),\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin đơn vị chủ quản\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"text\",\r\n name: \"mst_dvcq\",\r\n label: _(\"MS_THUE\"),\r\n validate: webix.rules.isTaxCode,\r\n invalidMessage: \"Mã số thuế không hợp lệ\",\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"ten_dvcq\",\r\n label: _(\"DONVI\"),\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"email_dvcq\",\r\n validate: webix.rules.isEmail,\r\n invalidMessage: \"Email không hợp lệ\",\r\n label: _(\"EMAIL\"),\r\n labelPosition: \"top\",\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv != \"\") {\r\n this.validate();\r\n }\r\n }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderId\",\r\n label: _(\"Key\"),\r\n css: \"mcls_license_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderTitle\",\r\n label: _(\"Title\"),\r\n validate: webix.rules.isEmpty,\r\n invalidMessage: \"Bạn phải nhập tiêu đề cho thư mục !\",\r\n required: true,\r\n //css: \"mcls_readonly_text\",\r\n //readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"floderDes\",\r\n label: _(\"Description\"),\r\n validate: webix.rules.isEmpty,\r\n invalidMessage: \"Bạn phải nhập diễn dải cho thư mục !\",\r\n required: true,\r\n //css: \"mcls_readonly_text\",\r\n //readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n\r\n }\r\n\r\n ]\r\n },\r\n { gravity: 5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetInfoCompany\";\r\n $$(\"foInfoCompany\").config.url = url;\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"foInfoCompany\").setValues(json);\r\n\r\n });\r\n }\r\n };\r\n});\ndefine('views/quenmk',[\"app\", \"locale\"], function (app, _) {\r\n //var json = version.getInfocompany();\r\n //$$(\"hotro-form\").setValues(json);\r\n\r\n var layout = {\r\n view: \"window\",\r\n modal: true,\r\n id: \"retrivepass-win\",\r\n position: \"center\",\r\n head: {\r\n // height: 40,\r\n rows: [\r\n {\r\n height: 15,\r\n borderless: true,\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"icon\",\r\n icon: \"fal fa-times\",\r\n css: \"icquenmk\",\r\n hotkey: \"esc\",\r\n click: function () {\r\n $$(\"retrivepass-win\").close();\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"head-form\",\r\n height: 60,\r\n view: \"template\",\r\n css: \"quenmklock\",\r\n borderless: true,\r\n template: function (obj) {\r\n return '';\r\n },\r\n },\r\n {\r\n view: \"label\",\r\n label: \"Quên mật khẩu tài khoản MobiFone Invoice\",\r\n css: \"quenmk\",\r\n },\r\n ],\r\n },\r\n width: 500,\r\n //minheight: 240,\r\n height: 350,\r\n body: {\r\n paddingY: 10,\r\n paddingX: 30,\r\n //elementsConfig:{labelWidth: 120},\r\n view: \"form\",\r\n id: \"retrivepassForm\",\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"template\",\r\n css: \"forgot-password-link\",\r\n borderless: true,\r\n template: \"Quý khách quên mật khẩu tài khoản SSO, vui lòng truy cập tại đây\",\r\n },\r\n {\r\n view: \"template\",\r\n borderless: true,\r\n template: \"
Hệ thống của MobiFone Invoice sẽ gửi mật khẩu mới cho Quý khách hàng. \" + \"Quý khách hàng dùng mật khẩu đó để đăng nhập vào phần mềm
\",\r\n css: \"quenmktemplate\",\r\n },\r\n {\r\n view: \"text\",\r\n labelPosition: \"top\",\r\n //id: \"email\",\r\n name: \"email\",\r\n label: \"MỜI NHẬP EMAIL\",\r\n icon: \"email\",\r\n css: \"quenmkemail\",\r\n required: true,\r\n invalidMessage: \"Bạn chưa nhập địa chỉ email hoặc email định dạng không đúng\",\r\n placeholder: \"ví dụ lan@gmail.com\",\r\n validate: webix.rules.isEmail,\r\n },\r\n // {\r\n // view: \"fieldset\",\r\n // label: \"Hướng dẫn\",\r\n // body: {\r\n // rows: [\r\n // {\r\n // id: \"version\",\r\n // //borderless: true,\r\n // css: { \"background\": \"#e6f7ff !important\" },\r\n // // width: 200,\r\n // view: \"template\",\r\n // template: \"

Bước 1:


\"\r\n // + \"

Bước 2:

\"\r\n // + \"

Bước 3:

\"\r\n // }\r\n // ]\r\n // }\r\n // },\r\n\r\n {\r\n margin: 10,\r\n cols: [\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Gửi yêu cầu (F10)\",\r\n css: \"btnlogin\",\r\n align: \"center\",\r\n height: 43,\r\n width: 180,\r\n type: \"form\",\r\n on: {\r\n onClick: function () {\r\n if ($$(\"retrivepassForm\").validate()) {\r\n var form = $$(\"retrivepassForm\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/ResetPass\", $$(\"retrivepassForm\").getValues(), function (text, xml, xhr) {\r\n var json = JSON.parse(text);\r\n\r\n var form = $$(\"retrivepassForm\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n // webix.alert({\r\n // title: \"Thông báo\",\r\n // ok: \"OK\",\r\n // text: json.error,\r\n // type: \"alert-error\"\r\n // });\r\n webix.message(json.error, \"error\");\r\n } else {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: \"Đã gửi mật khẩu tới email.Bạn hãy kiểm tra lại.\",\r\n });\r\n }\r\n });\r\n } else {\r\n $$(\"retrivepassForm\").focus();\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n // {\r\n // view: \"button\", hidden: true, hotkey: \"esc\", label: \"Hủy bỏ (ESC)\", align: \"center\", width: 120, type: \"danger\",\r\n // click: function () {\r\n // webix.$$(\"retrivepass-win\").close();\r\n // }\r\n // },\r\n {},\r\n ],\r\n },\r\n { height: 10 },\r\n ],\r\n },\r\n };\r\n return {\r\n $ui: layout,\r\n initUI: function (json) {\r\n $$(\"retrivepassForm\").setValues(json);\r\n },\r\n };\r\n});\r\n\ndefine('views/thongbaosso_nologin',[\"app\", \"locale\", \"views/forms/link_sso_nologin\"], function (app, _, linkSSO) {\r\n\tvar layout = {\r\n\t\tview: \"window\",\r\n\t\tmodal: true,\r\n\t\tid: \"notisso\",\r\n\t\tposition: \"center\",\r\n\t\thead: \"Thông báo\",\r\n\t\twidth: 800,\r\n\t\theight: 400,\r\n\t\tbody: {\r\n\t\t\tview: \"form\",\r\n\t\t\tid: \"notissobody\",\r\n\t\t\telements: [\r\n\t\t\t\t{\r\n\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\trows: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\ttemplate: \"
\" +\r\n\t\t\t\t\t\t\t\t\"

Kính gửi Quý khách hàng

\" +\r\n\t\t\t\t\t\t\t\t\"
Nhằm nâng cao chất lượng dịch vụ, MobiFone tiến hành nâng cấp hệ thống Quản lý tài khoản tập trung (SSO) cho các khách hàng sử dụng hệ sinh thái giải pháp số của MobiFone.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Sau khi hoàn thành liên kết, Quý khách có thể đăng nhập toàn bộ các hệ thống thuộc hệ sinh thái giải pháp của MobiFone bằng một tài khoản duy nhất.
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
Thời gian liên kết: Từ ngày 01/04/2024 đến 30/04/2024
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\" +\r\n\t\t\t\t\t\t\t\t\"
\",\r\n\t\t\t\t\t\t\tborderless: false,\r\n\t\t\t\t\t\t\theight: 200\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\ttemplate: \"
Liên kết ngay tại đây
\",\r\n\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\tvar win = this.$scope.ui(linkSSO.$ui);\r\n\t\t\t\t\t\t\t\t\twin.show();\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\theight: 50\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\ttype: \"clean\",\r\n\t\t\t\t\t\t\tcols: [\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"template\",\r\n\t\t\t\t\t\t\t\t\ttemplate: \"Xem chi tiết hướng dẫn tại đây\",\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tview: \"button\",\r\n\t\t\t\t\t\t\t\t\tvalue: \"Đóng\",\r\n\t\t\t\t\t\t\t\t\twidth: 100,\r\n\t\t\t\t\t\t\t\t\ton: {\r\n\t\t\t\t\t\t\t\t\t\tonClick: function () {\r\n\t\t\t\t\t\t\t\t\t\t\t$$(\"notisso\").hide();\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\tclick: function () {\r\n\t\t\t\t\t\t\t\t\t\tthis.callEvent(\"onClick\");\r\n\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\treturn {\r\n\t\t$ui: layout,\r\n\t\tinitUI: function (json) {\r\n\t\t\treturn\r\n\t\t},\r\n\t};\r\n});\n/**\r\n * Created by Mads on 03-10-2015.\r\n */\r\n\r\ndefine('views/login',[\"models/user\", \"locale\", \"app\", \"helpers/locale\", \"views/menus/version\", \"views/quenmk\", \"views/thongbaosso_nologin\", \"views/forms/link_sso\"], function (user, _, app, locale, version, quenmk, thongbaosso, linkSSO) {\r\n \r\n webix.ui({\r\n view: \"popup\",\r\n id: \"my_pop\",\r\n head: \"Submenu\",\r\n width: 250,\r\n body: {\r\n view: \"list\",\r\n data: [{ id: \"1\", name: \"Cập nhật bản cũ\", location: \"Mobi-Invoice Desktop\" }],\r\n template: \"#name# - #location#\",\r\n autoheight: true,\r\n select: true,\r\n on: {\r\n onItemDblClick: function (id) {\r\n if (id == \"1\") {\r\n app.router(\"/updateToWeb\");\r\n }\r\n },\r\n },\r\n },\r\n });\r\n var values = webix.copy(\r\n {\r\n username: \"\",\r\n password: \"\",\r\n rememberme: false,\r\n language: \"vi\",\r\n ma_dvcs: \"\",\r\n },\r\n Cookies.getJSON(\"Crm\")\r\n );\r\n\r\n var demo = function () {\r\n webix.message(\"ấvasv\");\r\n };\r\n\r\n var action = document.querySelector(\".showLogin\");\r\n action.classList.add(\"inactive\");\r\n\r\n return {\r\n $ui: {\r\n css: \"bodylogin\",\r\n rows: [\r\n {\r\n //borderless: true,\r\n // css: { \"box-shadow\": \"0 15px 10px rgba(0,0,0,0.2)\" },\r\n height: 80,\r\n cols: [\r\n { gravity: 1, template: \"\", width: 150 },\r\n {\r\n view: \"label\",\r\n template: \"\",\r\n height: 65,\r\n borderless: true,\r\n css: { padding: \"10px\", \"padding-top\": \"1px !important\" },\r\n },\r\n {\r\n id: \"version\",\r\n borderless: true,\r\n view: \"label\",\r\n template: \"
Hotline:
\",\r\n css: { padding: \"10px\", \"padding-top\": \"20px\", color: \"white\" },\r\n },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n id: \"cbLanguage\",\r\n view: \"combo\",\r\n width: 125,\r\n options: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n /* { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" } */\r\n ],\r\n // inputAlign: \"right\",\r\n //css: \"cbLanguage\",\r\n value: locale.getLang(),\r\n on: {\r\n onChange: function (newv, oldv) {\r\n locale.setLang(newv, null);\r\n },\r\n },\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\", width: 150 },\r\n ],\r\n },\r\n {\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n // { gravity: 1, template: \"\" },\r\n {\r\n // css: { \"padding-left\": \"450px\" },\r\n rows: [\r\n { gravity: 0.05, template: \"\" },\r\n {\r\n view: \"form\",\r\n gravity: 5,\r\n id: \"loginForm\",\r\n width: 900,\r\n height: 550,\r\n margin: 5,\r\n paddingX: 50,\r\n css: \"login\",\r\n borderless: false,\r\n elements: [\r\n {\r\n view: \"label\",\r\n label: \"Đăng nhập\",\r\n css: \"lbldangnhap\",\r\n },\r\n {\r\n view: \"combo\",\r\n id: \"ma_dvcs\",\r\n name: \"ma_dvcs\",\r\n label: _(\"DONVI\"),\r\n width: 330,\r\n css: \"donvilogin\",\r\n //options: app.config.host +\"/System/GetAllDmDvcs\",\r\n options: {\r\n view: \"gridsuggest\",\r\n textValue: \"name\",\r\n body: {\r\n //url: app.config.host + \"/System/GetAllDmDvcs\",\r\n textValue: \"name\",\r\n columns: [\r\n {\r\n id: \"tax_code\",\r\n width: 120,\r\n header: _(\"MS_THUE\"),\r\n },\r\n {\r\n id: \"name\",\r\n width: 450,\r\n header: _(\"DONVI\"),\r\n },\r\n ],\r\n ready: function () {\r\n var values = Cookies.getJSON(\"Crm\");\r\n\r\n var obj = $$(\"ma_dvcs\");\r\n var list = obj.getList();\r\n \r\n if (values === undefined) {\r\n if (list.count()) {\r\n var id = list.getIdByIndex(0);\r\n obj.setValue(id);\r\n }\r\n } else {\r\n var item = list.getItem(values.ma_dvcs);\r\n\r\n if (item != null && item != undefined) {\r\n obj.setValue(values.ma_dvcs);\r\n } else {\r\n if (list.count()) {\r\n var id = list.getIdByIndex(0);\r\n obj.setValue(id);\r\n }\r\n }\r\n }\r\n },\r\n },\r\n },\r\n value: values.ma_dvcs,\r\n required: true,\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"username\",\r\n name: \"username\",\r\n label: _(\"USERNAME\"),\r\n icon: \"user\",\r\n width: 330,\r\n value: values.username,\r\n required: true,\r\n invalidMessage: \"Tên truy cập không để trống!\",\r\n //validate: webix.rules.isSpecialCharacter,\r\n css: \"mcls_uppercase\",\r\n },\r\n {\r\n view: \"text\",\r\n id: \"password\",\r\n name: \"password\",\r\n width: 330,\r\n type: \"password\",\r\n label: _(\"PASSWORD\"),\r\n value: values.password,\r\n invalidMessage: \"Mật khẩu không được để trống\",\r\n required: true,\r\n css: \"passlogin\",\r\n icon: \"fa fa-eye\", \r\n on: {\r\n onItemClick: function (id, e) {\r\n // Kiểm tra xem người dùng có click vào biểu tượng không\r\n if (e.target && e.target.classList.contains(\"webix_input_icon\")) {\r\n var inputNode = $$(\"password\").getInputNode(); // Lấy node input\r\n var inputType = inputNode.type; // Kiểm tra loại của input (password hoặc text)\r\n \r\n // Thay đổi loại input và biểu tượng tương ứng\r\n if (inputType === \"password\") {\r\n inputNode.type = \"text\"; // Hiển thị mật khẩu\r\n webix.html.removeCss(e.target, \"fa-eye\");\r\n webix.html.addCss(e.target, \"fa-eye-slash\"); // Thêm biểu tượng mắt đóng\r\n } else {\r\n inputNode.type = \"password\"; // Ẩn mật khẩu\r\n webix.html.removeCss(e.target, \"fa-eye-slash\");\r\n webix.html.addCss(e.target, \"fa-eye\"); // Thêm biểu tượng mắt mở\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"remember\",\r\n name: \"rememberme\",\r\n css: \"rememberlogin\",\r\n label: _(\"REMEMBERME\") + \" ?\",\r\n labelPosition: \"left\",\r\n labelWidth: 130,\r\n checkValue: \"true\",\r\n uncheckValue: \"false\",\r\n value: values.rememberme,\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n id: \"login\",\r\n name: \"login\",\r\n label: _(\"DANGNHAP\"),\r\n css: \"btnlogin\",\r\n width: 300,\r\n height: 43,\r\n hotkey: \"enter\",\r\n type: \"form\",\r\n click: function () {\r\n var username = $$(\"username\").getValue();\r\n $$(\"username\").setValue(username.toUpperCase());\r\n \r\n if ($$(\"loginForm\").validate()) {\r\n var values = $$(\"loginForm\").getValues();\r\n if (\"true\" === values.rememberme) {\r\n values.language = $$(\"cbLanguage\").getValue();\r\n Cookies.set(\"Crm\", values);\r\n } else {\r\n // Clear cookie\r\n Cookies.remove(\"Crm\");\r\n }\r\n \r\n var _ma_dvcs = values.ma_dvcs;\r\n\r\n if ($$(\"ma_dvcs\").config.hidden) {\r\n _ma_dvcs = \"\";\r\n }\r\n user.login(values.username, values.password, _ma_dvcs, $$(\"cbLanguage\").getValue(), $$(\"loginForm\"));\r\n } else {\r\n $$(\"username\").focus();\r\n $$(\"loginForm\").focus();\r\n }\r\n },\r\n },\r\n ]\r\n },\r\n {\r\n width: 330,\r\n css: \"linelogin\",\r\n cols: [\r\n {\r\n view: \"button\",\r\n label: _(\"QUENMK\"),\r\n css: \"mcls_btnResetPassLogin\",\r\n type: \"iconButton\",\r\n icon: \"far fa-key\",\r\n width: 300,\r\n click: function () {\r\n var win = this.$scope.ui(quenmk.$ui);\r\n win.show();\r\n // app.router(\"/retrivepass\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n css: \"mcls_btnRegisterLogin\",\r\n type: \"iconButton\",\r\n hidden: true,\r\n icon: \"far fa-long-arrow-right\",\r\n label: _(\"DANGKY\"),\r\n width: 150,\r\n click: function () {\r\n window.open(\"http://mobifone.vn/\", \"_blank\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n height: 25\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"label\",\r\n template: \"
Hoặc đăng nhập bằng
\",\r\n width: 300,\r\n align: \"center\"\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"button\",\r\n id: \"loginsso\",\r\n name: \"loginsso\",\r\n template: \"
\" +\r\n \"\" +\r\n \"\" +\r\n _(\"DANGNHAPSSO\") + \"
\",\r\n align: \"center\",\r\n width: 300,\r\n height: 100,\r\n type: \"iconButton\",\r\n click: function () {\r\n var host_name = \"auth-sso.mobifone.vn:8080\";\r\n var realm_name = \"sso-mobifone\";\r\n var client_id = \"TTCNTT-MOBIFONEINVOICE\";\r\n var scope = \"openid\";\r\n var response_type = \"code\";\r\n var redirect_uri = \"http:\" + window.location.host + \"/%23%21/app/loginsso\";\r\n var url = \"https://\" + host_name +\r\n \"/oauth/realms/\" + realm_name +\r\n \"/protocol/openid-connect/auth?client_id=\" + client_id +\r\n \"&scope=\" + scope +\r\n \"&response_type=\" + response_type +\r\n \"&redirect_uri=\" + redirect_uri;\r\n window.location.href = url;\r\n },\r\n }\r\n\r\n ],\r\n },\r\n ],\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n //validateEvent: \"key\"\r\n },\r\n },\r\n { gravity: 0.1, temlate: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n {\r\n height: 80,\r\n },\r\n ],\r\n },\r\n $oninit: function (view, $scope) {\r\n\r\n $$(\"loginForm\").focus();\r\n //var winthongbaosso = $scope.ui(thongbaosso.$ui);\r\n //winthongbaosso.show();\r\n },\r\n };\r\n});\r\n\ndefine('views/loginsso',[\"models/user\"], function (user) {\r\n function getParameterByName(name, url) {\r\n if (!url) url = window.location.href;\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n }\r\n var currentUrl = window.location.href.replace(/#!\\//, '');\r\n var urlParams = new URLSearchParams(currentUrl);\r\n var sso_code = urlParams.get('code');\r\n var login_type = getParameterByName('login_type', url);\r\n login_type = getParameterByName('login_type', url);\r\n var redirect_uri_api = \"http:\" + window.location.host + \"/#!/app/loginsso\";\r\n var redirect_uri = \"http:\" + window.location.host + \"/%23%21/app/loginsso\";\r\n if(login_type == 'sso'){\r\n var host_name = \"auth-sso.mobifone.vn:8080\";\r\n var realm_name = \"sso-mobifone\";\r\n var client_id = \"TTCNTT-MOBIFONEINVOICE\";\r\n var scope = \"openid\";\r\n var response_type = \"code\";\r\n var url = \"https://\" + host_name +\r\n \"/oauth/realms/\" + realm_name +\r\n \"/protocol/openid-connect/auth?client_id=\" + client_id +\r\n \"&scope=\" + scope +\r\n \"&response_type=\" + response_type +\r\n \"&redirect_uri=\" + redirect_uri;\r\n window.location.href = url;\r\n }\r\n else{\r\n if(sso_code != null || sso_code != \"\"){\r\n user.loginsso(sso_code, redirect_uri_api, '', 'vi');\r\n }\r\n else{\r\n window.location.href = \"/#!\" + start;\r\n }\r\n }\r\n return {\r\n $ui: {},\r\n }\r\n});\r\n\ndefine('views/main',[\"app\", \"locale\", \"models/user\", \"views/forms/main\"], function (app, _, user, main) {\r\n \r\n\r\n var fm = function (number, decimalSizeDefault) {\r\n if (decimalSizeDefault === undefined || decimalSizeDefault === null) decimalSizeDefault = 0;\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimalSizeDefault,\r\n });\r\n return k(number);\r\n };\r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Quản lý hóa đơn\", details: \"Quản lý hóa đơn đầu vào\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Thêm\", { $template: \"Separator\" }, \"Sửa\", { $template: \"Separator\" }, \"Xóa\", { $template: \"Separator\" }, \"Tải File đính kèm\"],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Tải File đính kèm\") {\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn !\", \"error\");\r\n return;\r\n }\r\n webix.message(\"Continue !\", \"debug\");\r\n //console.log(item);\r\n // if (item.inv_originalId != null && item.inv_originalId != undefined) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // //var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n // //newWin.location = fileURL;\r\n // window.open(fileURL, '_blank');\r\n\r\n // }\r\n // });\r\n\r\n // // webix.ajax()\r\n // // .response(\"arraybuffer\")\r\n // // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // // var file = new Blob([data], { type: 'application/pdf' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n // // window.open(fileURL, '_blank');\r\n // // // webix.html.download(file, $$('tenfile').getValue());\r\n // // });\r\n // }\r\n // else {\r\n // webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n // return;\r\n // }\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n id: \"btnReload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 96,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mainData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm (F4)\",\r\n width: 90,\r\n shortcut: \"F4\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(main.$ui);\r\n //main.setValues(null, null, null);\r\n main.setEditMode(1);\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-edit\",\r\n label: \"Sửa (F3)\",\r\n width: 90,\r\n shortcut: \"F3\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(main.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.$group) {\r\n webix.message(\"Không thể sửa nhóm !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n main.setEditMode(2);\r\n main.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n label: \"Xóa (F8)\",\r\n width: 80,\r\n shortcut: \"F8\",\r\n css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n if (item.$group) {\r\n webix.message(\"Không thể xóa cột nhóm !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n // khData.windowid = windowconfig.data[0].window_id;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + item.invoiceNumber + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/ManageInvoice/SaveInv\", khData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.ExceptionMessage, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n table.remove(item.id);\r\n table.enable();\r\n table.hideProgress();\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDowload\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-download\",\r\n css: \"webix_secondary\",\r\n label: _(\"Tải File\"),\r\n width: 80,\r\n on: {\r\n onClick: function () {\r\n //webix.confirm();\r\n //webix.message(\"Continue ! \", \"debug\");\r\n var table = webix.$$(\"mainData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.fileUrl == null || item.fileUrl == \"\") {\r\n webix.message(\"Hóa đơn không có file đính kèm !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.$group) {\r\n webix.message(\"Không thể sửa nhóm !\", \"error\");\r\n return;\r\n }\r\n\r\n webix.confirm({\r\n title: \"TẢI HÓA ĐƠN\",\r\n text: \"Bạn có muốn tải file hóa đơn số: \" + item.invoiceNumber + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(app.config.host + \"/ManageInvoice/DowloadFile?url=\" + item.fileUrl, function (text, data) {\r\n var file = new Blob([data], { type: item.fileType });\r\n webix.html.download(file, item.fileName);\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n // webix.ajax()\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/ManageInvoice/SaveInv\", khData,\r\n // {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // table.enable();\r\n // table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n // //webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // table.remove(item.id);\r\n // table.enable();\r\n // table.hideProgress();\r\n // }\r\n // });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-print\",\r\n label: _(\"PRINT\") + \" PDF\",\r\n css: \"webix_secondary\",\r\n width: 70,\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"mainData\");\r\n\r\n // var rpParameter = table.config.rpParameter;\r\n var rpParameter = null;\r\n // if (rpParameter == undefined || rpParameter == null) {\r\n // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // return;\r\n // }\r\n // rpParameter.type = \"PDF\";\r\n //console.log(rpParameter);\r\n // if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n window.open(fileURL, \"_blank\");\r\n webix.modalbox.hide(box);\r\n },\r\n }\r\n // function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.open(fileURL, '_blank');\r\n // }\r\n );\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnExport\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"far fa-file\",\r\n label: _(\"EXPORT_EXCEL\"),\r\n css: \"webix_secondary\",\r\n width: 115,\r\n on: {\r\n onClick: function () {\r\n var box = webix.modalbox({\r\n title: \"Đang kết suất Excel ... \",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n },\r\n });\r\n var interVal = setTimeout(function () {\r\n var table = $$(\"mainData\");\r\n webix.toExcel(table, {\r\n rawValues: true,\r\n });\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n }, 1500);\r\n\r\n // var rpParameter = table.config.rpParameter;\r\n // if (rpParameter == undefined || rpParameter == null) {\r\n // webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n // return;\r\n // }\r\n // rpParameter.type = \"xlsx\";\r\n\r\n // if (rpParameter != null) {\r\n // var box = webix.modalbox({\r\n // title: \"Đang kết xuất Excel ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(app.config.host + \"/Bcthsd/PrintPDFBangKeBanRa\", rpParameter,\r\n // {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // webix.message(XmlHttpRequest.statusText, \"error\");\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // webix.modalbox.hide(box);\r\n // window.location.href = fileURL;\r\n // }\r\n // }\r\n // // function (text, data) {\r\n\r\n // // var file = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\r\n // // var fileURL = URL.createObjectURL(file);\r\n\r\n // // window.location.href = fileURL;\r\n // // }\r\n // );\r\n // }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n container: \"testA\",\r\n view: \"treetable\",\r\n id: \"mainData\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n //autowidth: true,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/ManageInvoice/GetData\";\r\n\r\n if (params == null) {\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n }\r\n }\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onItemClick: function (id) {\r\n if (id.column == \"ten_loai\") {\r\n //webix.confirm()\r\n webix.message(\"Continue Dowloading ... !\", \"debug\");\r\n }\r\n },\r\n onClick: function (e) {\r\n var view = $$(e);\r\n if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\")) webix.confirm(\"The changes was not saved\");\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n webix.delay(function () {\r\n this.adjustRowHeight(\"ten_loai\", true);\r\n this.render();\r\n }, this);\r\n //console.log($$(\"mainData\").serialize());\r\n this.openAll();\r\n $$(\"cmenu\").attachTo($$(\"mainData\"));\r\n },\r\n onColumnResize: function () {\r\n this.adjustRowHeight(\"ten_loai\", true);\r\n this.render();\r\n },\r\n // \"data->onStoreUpdated\": function () {\r\n // this.data.each(function (obj, i) {\r\n // console.log(obj);\r\n // console.log(i);\r\n // obj.index = i + 1;\r\n // })\r\n // }\r\n },\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"
STT
\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"ten_loai\",\r\n header: [{ text: \"
Hóa đơn chứng từ bán
\", colspan: 2 }, { text: \"
Số hóa đơn
\" }],\r\n width: 525,\r\n // template: function (obj, common) {\r\n // if (obj.$group) return common.treetable(obj, common) + obj.invoiceNumber;\r\n // return obj.invoiceNumber;\r\n //}\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n //return obj.invoiceNumber;\r\n return \" \" + obj.invoiceNumber + \"\";\r\n },\r\n },\r\n {\r\n id: \"invoiceDate\",\r\n header: [null, { text: \"
Ngày hóa đơn
\" }],\r\n width: 150,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n { id: \"sellerName\", header: [\"
Tên người mua
\", { content: \"textFilter\" }], width: 300 },\r\n { id: \"sellerTaxCode\", header: \"
Mã số thuế
\", width: 150 },\r\n {\r\n id: \"totalAmountWithoutVat\",\r\n header: \"
Doanh thu chưa có thuế GTGT
\",\r\n width: 200,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return \"\" + fm(obj.totalAmountWithoutVat) + \"\";\r\n return obj.totalAmountWithoutVat == null ? 0 : fm(obj.totalAmountWithoutVat);\r\n },\r\n },\r\n {\r\n id: \"vatAmount\",\r\n header: \"
Thuế GTGT
\",\r\n width: 100,\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n }),\r\n template: function (obj, common) {\r\n if (obj.$level == 1) return \"\" + fm(obj.vatAmount) + \"\";\r\n return obj.vatAmount == null ? 0 : fm(obj.vatAmount);\r\n },\r\n },\r\n { id: \"ghi_chu\", header: \"
Ghi chú
\", width: 150 },\r\n ],\r\n pager: \"pagerA\",\r\n scheme: {\r\n $group: {\r\n by: \"ten_loai\",\r\n //css:\"multiline\",\r\n map: {\r\n vatAmount: [\"vatAmount\", \"sum\"],\r\n totalAmountWithoutVat: [\"totalAmountWithoutVat\", \"sum\"],\r\n //title: [\"year\"]\r\n },\r\n },\r\n //$sort: { by: \"stt\", dir: \"asc\" }\r\n },\r\n ready: function () {\r\n //this.open(this.getFirstId());\r\n //this.sort({ by: \"stt\", dir: \"asc\" });\r\n this.openAll();\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChangedMain\", function (editmode, item) {\r\n var table = webix.$$(\"mainData\");\r\n\r\n if (editmode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // console.log(item);\r\n // console.log(item.ten_loai);\r\n // table.add(item);\r\n //table.select(item.id,false);\r\n }\r\n\r\n if (editmode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n\r\n // webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n // var table = $$(\"mainData\");\r\n // var url = {\r\n // $proxy: true,\r\n // load: function (view, callback, params) {\r\n // console.log(view.config);\r\n // console.log(callback);\r\n // console.log(params);\r\n // /*var windowno = app.path[1].params[0];\r\n // var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n // if (params == null) {\r\n // url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n // }\r\n // else {\r\n // url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n // if (params.filter != null) {\r\n // var array = [];\r\n\r\n // for (var property in params.filter) {\r\n\r\n // var column = view.getColumnConfig(property);\r\n\r\n // if (column !== undefined) {\r\n // var item = {\r\n // columnName: property,\r\n // columnType: column.columnType,\r\n // value: params.filter[property]\r\n // };\r\n\r\n // array.push(item);\r\n // }\r\n // }\r\n\r\n // //console.log(JSON.stringify(array));\r\n // if (array.length > 0) {\r\n // url = url + \"&filter=\" + JSON.stringify(array);\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n\r\n // }\r\n // else {\r\n // url = url + \"&filter=null\";\r\n // }\r\n // }\r\n\r\n // if (view.config.infoparam != null) {\r\n // url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n // }\r\n // else {\r\n // url = url + \"&infoparam=null\";\r\n // }\r\n\r\n // var tlbParams = $$(\"tlbParams\");\r\n\r\n // if (tlbParams !== undefined) {\r\n // var childViews = tlbParams.getChildViews();\r\n\r\n // var parameters = [];\r\n\r\n // for (var i = 0; i < childViews.length; i++) {\r\n // var child = childViews[i];\r\n\r\n // var id = child.config.id;\r\n // var value_field = child.config.value_field;\r\n\r\n // var item = {\r\n // columnName: value_field,\r\n // value: $$(id).getValue()\r\n // };\r\n\r\n // parameters.push(item);\r\n // }\r\n\r\n // url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n // }\r\n // else {\r\n // url = url + \"&tlbparam=null\";\r\n // }*/\r\n\r\n // //console.log(url);\r\n\r\n // /* webix.ajax().bind(view)\r\n // .get(url,function(text){\r\n // var json =JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")){\r\n // this.parse(json.data,\"json\");\r\n // }\r\n // }); */\r\n\r\n // //webix.ajax(url, callback, view);\r\n\r\n // }\r\n // };\r\n\r\n // table.define(\"url\", url);\r\n },\r\n };\r\n});\r\n\ndefine('views/mauhoadon',[\"app\", \"views/forms/mauhoadon\", \"locale\", \"views/modules/minvoiceplugin\"], function (app, dmwindowform, _, plugin) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Mẫu hóa đơn\", details: \"Danh sách mẫu hóa đơn\" });\r\n\r\n var submenu = webix.ui({\r\n view: \"submenu\",\r\n width: 200,\r\n padding: 0,\r\n data: [\r\n // { id: \"createInvoiceTemplate\", value: \"Tạo mẫu hóa đơn\" },\r\n { id: \"printInvoiceTemplate\", value: \"Xem mẫu hóa đơn (PDF)\" },\r\n { id: \"printTempHtml\", value: \"Xem mẫu hóa đơn (Html)\" },\r\n { id: \"dowload\", value: \"Tải file .repx\" },\r\n // { id: \"signInvoiceTemplate\", value: \"Ký mẫu hóa đơn\" },\r\n { id: \"uploadInvoiceTemplate\", value: \"Upload mẫu hóa đơn\" },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n this.hide();\r\n\r\n if (id == \"createInvoiceTemplate\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang tạo mẫu hóa đơn\",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearInterval(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var interVal = setInterval(function () {\r\n var url = app.config.host + \"/Invoice/GetInvoiceTemplate?id=\" + item.id;\r\n\r\n webix.ajax(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n alert(text);\r\n webix.modalbox.hide(box);\r\n clearInterval(interVal);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.trang_thai_mau == \"Đã tạo mẫu\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n item.trang_thai_mau = \"Đã tạo mẫu\";\r\n table.updateItem(item);\r\n\r\n webix.modalbox.hide(box);\r\n clearInterval(interVal);\r\n }\r\n },\r\n });\r\n }, 3000);\r\n\r\n window.location.href = app.config.host + \"/Content/App/ReportDesign/ReportDesign.application?type=99&id=\" + item.id;\r\n }\r\n\r\n if (id == \"printInvoiceTemplate\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/PrintInvoiceTemplate?id=\" + item.id;\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn (PDF) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n // webix.html.download(file, \"ahihi.pdf\");\r\n var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n });\r\n }\r\n if (id == \"dowload\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.template_status != \"Đã tạo mẫu\") {\r\n webix.message(\"Mẫu hóa đơn chưa được tạo, không thể tải xuống !\", \"error\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/DowloadRepx?id=\" + item.id;\r\n var box = webix.modalbox({\r\n title: \"Đang tải mẫu hóa đơn (repx) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"application/octet-stream\" });\r\n webix.html.download(file, \"InvoiceTemplate.repx\");\r\n // var fileURL = URL.createObjectURL(file);\r\n //console.log(fileURL);\r\n webix.modalbox.hide(box);\r\n //window.open(fileURL, '_blank');\r\n });\r\n }\r\n\r\n if (id == \"printTempHtml\") {\r\n var item = $$(\"dmwindowData\").getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/PrintInvoiceTemplate?id=\" + item.id + \"&type=Html\";\r\n var box = webix.modalbox({\r\n title: \"Đang in mẫu hóa đơn (Html) ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n var newwin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n var file = new Blob([data], { type: \"text/html\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n newwin.location = fileURL;\r\n });\r\n }\r\n\r\n if (id == \"signInvoiceTemplate\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn mẫu hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n var a = webix.ajax(app.config.host + \"/Invoice/GetXmlTemplate?id=\" + item.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice/GetListCertificates\");\r\n var c = webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/ExecuteCommand\", {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n });\r\n\r\n webix.promise.all([a, b, c]).then(function (results) {\r\n var xmlData = results[0].json();\r\n var listcerts = results[1].json();\r\n var c_results = results[2].json();\r\n\r\n if (listcerts.length == 0) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < c_results.length; i++) {\r\n var item = c_results[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.value;\r\n }\r\n\r\n if (item.ma == \"SERVER_CERT\") {\r\n server_cert = item.value;\r\n }\r\n }\r\n\r\n if (kytaptrung == \"K\") {\r\n var hub = plugin.hub();\r\n\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var callback = json.callback;\r\n\r\n if (callback == \"SignInvoice\") {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var parameter = {\r\n id: item.id,\r\n xml: json.xml,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SignXmlTemplate\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var item = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: item.cer_serial,\r\n ngaybatdau: item.begin_date,\r\n ngayketthuc: item.end_date,\r\n issuer: item.issuer,\r\n subjectname: item.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n callback: \"SignInvoice\",\r\n idData: \"#data\",\r\n xml: xmlData[\"xml\"],\r\n idSigner: \"seller\",\r\n tagSign: \"Signatures\",\r\n dateKy: xmlData[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", arg.callback, JSON.stringify(arg));\r\n } else {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n webix.ajax(app.config.host + \"/Invoice/GetXmlTemplate?id=\" + item.id, function (text, data) {\r\n var xmlData = JSON.parse(text);\r\n\r\n var parameters = {\r\n xml: xmlData[\"xml\"],\r\n refUri: \"#data\",\r\n certSerial: cert.cer_serial,\r\n tokenSerial: cert.token_serial,\r\n signId: \"seller\",\r\n signTag: \"Signatures\",\r\n pass: cert.pass,\r\n inv_InvoiceAuth_id: xmlData[\"id\"],\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(server_cert + \"/Token/SignXml\", parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json[\"error\"]);\r\n } else {\r\n var parameter = {\r\n id: item.inv_InvoiceAuth_id,\r\n xml: json.xml,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice/SignXmlTemplate\", parameter, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 100,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice/GetListCertificates\",\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (id == \"uploadInvoiceTemplate\") {\r\n require([\"views/forms/uploadfile\"], function (uploadForm) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n\r\n win.getHead().setHTML(\"Tải file mẫu hóa đơn\");\r\n win.show();\r\n\r\n var item = table.getSelectedItem();\r\n\r\n webix.$$(\"uploader\").define(\"upload\", app.config.host + \"/Invoice/UploadInvTemplate\");\r\n webix.$$(\"uploader\").define(\"formData\", { dmmauhoadon_id: item.id });\r\n webix.$$(\"uploader\").refresh();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-plus\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"THEM\") + \" (F4)\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(dmwindowform.$ui);\r\n dmwindowform.setEditMode(1);\r\n\r\n win.show();\r\n\r\n var form = $$(\"mauhoadon-form\");\r\n var values = form.getValues();\r\n\r\n values.invoice_type = \"E\";\r\n values.copy_number = 0;\r\n values.row_print_template = 10;\r\n\r\n form.setValues(values);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-edit\",\r\n // css: \"webix_secondary\",\r\n // label: _(\"SUA\") + \" (F3)\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"mauhoadon-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash-o\",\r\n // label: _(\"XOA\") + \" (F8)\",\r\n // css: \"webix_secondary\",\r\n // width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.name,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"COPY\") + \" (F7)\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-copy\",\r\n // label: _(\"COPY\") + \" (F7)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n //css:\"button_raised\",\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn mẫu cần sao chép\" });\r\n return;\r\n }\r\n\r\n var comp = {\r\n view: \"window\",\r\n modal: true,\r\n head: \"Sao chép mẫu\",\r\n position: \"center\",\r\n body: {\r\n view: \"form\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n margin: 0,\r\n complexData: true,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"invoice_series\",\r\n labelPosition: \"top\",\r\n width: 300,\r\n value: item.invoice_series,\r\n required: true,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv == undefined) return;\r\n if (newv == \"\") return;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n patt = /^[1-9][0-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < year - 1 || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n this.focus();\r\n return;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n this.focus();\r\n return;\r\n }\r\n },\r\n },\r\n },\r\n {\r\n margin: 10,\r\n cols: [\r\n {},\r\n {\r\n shortcut: \"F10\",\r\n view: \"button\",\r\n label: \"Lưu (F10)\",\r\n type: \"form\",\r\n align: \"center\",\r\n width: 120,\r\n on: {\r\n onClick: function () {\r\n var win = this.getTopParentView();\r\n var form = win.queryView({ view: \"form\" });\r\n\r\n if (form.validate() == false) {\r\n return;\r\n }\r\n var item = form.getValues();\r\n var table = webix.$$(\"dmwindowData\");\r\n var selectedItem = table.getSelectedItem();\r\n\r\n var url = app.config.host + \"/Invoice/CopyTemplate\";\r\n item.id = selectedItem.id;\r\n\r\n webix\r\n .ajax()\r\n .bind(win)\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n this.close();\r\n if (data.hasOwnProperty(\"ok\") && data.ok) {\r\n webix.message(\"Thêm mới mẫu hóa đơn thành công!\", \"success\");\r\n }\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n hotkey: \"esc\",\r\n label: \"Hủy bỏ (ESC)\",\r\n align: \"center\",\r\n type: \"danger\",\r\n width: 120,\r\n click: function () {\r\n var win = this.getTopParentView();\r\n win.close();\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n rules: {\r\n $obj: function () {\r\n var data = this.getValues();\r\n var newv = data.invoice_series;\r\n\r\n if (newv.length != 6) {\r\n webix.message({ type: \"error\", text: \"Độ dài ký hiệu phải là 6 ký tự\" });\r\n return false;\r\n }\r\n\r\n var patt = /^[A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][A,B,C,D,E,G,H,K,L,M,N,P,Q,R,S,T,U,V,X,Y][/]$/;\r\n\r\n if (patt.test(newv.substring(0, 3)) == false) {\r\n webix.message({ type: \"error\", text: \"3 ký tự đầu không đúng\" });\r\n return false;\r\n }\r\n\r\n patt = /^[1-9][0-9]$/;\r\n\r\n var nam = newv.substring(3, 5);\r\n\r\n if (patt.test(nam) == false) {\r\n webix.message({ type: \"error\", text: \"2 ký tự năm không đúng\" });\r\n return false;\r\n }\r\n\r\n var now = new Date();\r\n var year = now.getFullYear();\r\n\r\n nam = Number(\"20\" + nam);\r\n\r\n if (nam < year - 1 || nam > year) {\r\n webix.message({ type: \"error\", text: \"Năm ký hiệu không đúng\" });\r\n return false;\r\n }\r\n\r\n if (newv.substring(5, 6) != \"E\") {\r\n webix.message({ type: \"error\", text: \"Ký tự cuối phải là E\" });\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n },\r\n },\r\n };\r\n\r\n var win = this.$scope.ui(comp);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n rules: {\r\n $obj: function () {\r\n var data = this.getValues();\r\n\r\n return true; //success!\r\n },\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-angle-down\",\r\n // label: \"Chức năng\",\r\n // width: 120,\r\n // css: \"button_raised\",\r\n click: function () {\r\n submenu.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n if (column.tableAlias != undefined) {\r\n item.tableAlias = column.tableAlias;\r\n }\r\n\r\n if (item.columnType == \"bit\") {\r\n if (item.value != \"\") {\r\n item.value = item.value == \"true\" ? true : item.value == \"false\" ? false : \"\";\r\n }\r\n }\r\n\r\n if (item.columnType == \"int\" || item.columnType == \"decimal\") {\r\n if (item.value != \"\") {\r\n if (webix.rules.isNumber(item.value)) {\r\n item.value = Number(item.value);\r\n } else {\r\n item.value = \"\";\r\n }\r\n }\r\n }\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n //console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"name\", columnType: \"character varying\", header: [_(\"TEN_MAU\"), { content: \"serverFilter\" }], width: 250 },\r\n {\r\n id: \"sl_invoice_type_id\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00008\",\r\n header: [_(\"LOAI_HOA_DON\"), { content: \"serverSelectFilter\" }],\r\n columnType: \"uuid\",\r\n tableAlias: \"sl_invoice_template\",\r\n width: 300,\r\n },\r\n {\r\n id: \"invoice_type\",\r\n view: \"combo\",\r\n options: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00009\",\r\n header: [_(\"HINH_THUC\"), { content: \"serverSelectFilter\" }],\r\n columnType: \"character varying\",\r\n width: 200,\r\n },\r\n { id: \"template_code\", columnType: \"character varying\", header: [_(\"MAU_SO\"), { content: \"serverFilter\" }], width: 150 },\r\n { id: \"invoice_series\", columnType: \"character varying\", header: [_(\"KY_HIEU\"), { content: \"serverFilter\" }], width: 150 },\r\n // { id: \"copy_number\", columnType: \"integer\", header: [_(\"SO_LIEN\"), { content: \"serverFilter\" }], width: 150 },\r\n { id: \"template_status\", columnType: \"character varying\", header: [_(\"TRANG_THAI_MAU\"), { content: \"serverFilter\" }], width: 150 },\r\n // {\r\n // id: \"signed\",\r\n // checkValue: true,\r\n // uncheckValue: false,\r\n // template: function (obj, common, value) {\r\n // if (value)\r\n // return \"
\";\r\n // else\r\n // return \"
\";\r\n // },\r\n // columnType: \"boolean\",\r\n // header: [_(\"DA_KY\"), { content: \"serverFilter\" }],\r\n // width: 100\r\n // }\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n view: \"toolbar\",\r\n cols: controls,\r\n borderless: true,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\n\r\ndefine('views/menus/notification',[\"app\"\r\n], function (app) {\r\n\r\n function initUI(item) {\r\n $$(\"lstUser\").select(item.id);\r\n $$(\"content\").setHTML(item.inv_content);\r\n $$(\"notification-win\").getHead().setHTML(\"Thông tin bản cập nhật: \" + item.version);\r\n }\r\n\r\n return {\r\n $ui: {\r\n view: \"window\", modal: true, id: \"notification-win\", position: \"center\", resize: true, move: true,\r\n head: \"Thông tin bản cập nhật\",\r\n body: {\r\n view: \"form\",\r\n id: \"notification-form\",\r\n height: 500,\r\n complexData: true,\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n view: \"list\",\r\n id: \"lstUser\",\r\n select: true,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n //webix.message(id, \"error\");\r\n $$(\"notification-win\").getHead().setHTML(\"Thông tin bản cập nhật: \" + item.version);\r\n $$(\"content\").setHTML(item.inv_content);\r\n }\r\n },\r\n url: app.config.host + \"/System/GetNotification\",\r\n // data: [\r\n // { id: 1, version: \"3.1.0.0\", update: \"Lorem ipsum dolor sit amet\", personId: 1 },\r\n // { id: 2, version: \"3.2.0.0\", update: \"Praesent luctus nulla enim, pellentesque condimentum \", personId: 2 },\r\n // { id: 3, version: \"3.3.0.0\", update: \"Lorem ipsum dolor sit amet\", personId: 2 },\r\n // { id: 4, version: \"3.4.0.0\", update: \"Morbi eget facilisis risus\", personId: 1 },\r\n // { id: 5, version: \"3.5.0.0\", update: \"Cras lacinia bibendum arcu\", personId: 1 }\r\n // ],\r\n template: \"- #version#\",\r\n //template: \" #User# \",\r\n width: 150\r\n },\r\n {\r\n width: 900,\r\n paddingX: 5,\r\n paddingX: 5,\r\n rows: [\r\n {\r\n view: \"template\", id: \"content\", scroll: \"xy\",\r\n // , gravity: 3\r\n type: { height: \"auto\" },\r\n // template: function (obj) {\r\n // return \"\" + obj.user + \" \" + obj.value;\r\n // }\r\n },\r\n {\r\n paddingY: 5,\r\n cols: [\r\n {},\r\n // {\r\n // view: \"button\", value: \"Cập nhật\", width: 100, type: \"danger\",\r\n // click: function () {\r\n\r\n // }\r\n // },\r\n {\r\n view: \"button\", type: \"danger\", label: \"Đóng (ESC)\", shortcut: \"esc\", align: \"center\", width: 100,\r\n on: {\r\n onClick: function () {\r\n webix.$$(\"notification-win\").close();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n\r\n ]\r\n }\r\n },\r\n initUI: initUI\r\n };\r\n\r\n});\ndefine('views/menus/sidebar',[\"app\"],function(app){\r\n\t\r\n\treturn {\r\n\t\t$ui:{\r\n\t\t\twidth: 220,\r\n\r\n\t\t\trows:[\r\n\t\t\t\t{\r\n\t\t\t\t\tview: \"tree\",\r\n\t\t\t\t\t//id: \"app:menu\",\r\n\t\t\t\t\ttype: \"menuTree2\",\r\n\t\t\t\t\tcss: \"menu\",\r\n\t\t\t\t\tactiveTitle: true,\r\n\t\t\t\t\tselect: true,\r\n\t\t\t\t\ttooltip: {\r\n\t\t\t\t\t\ttemplate: function(obj){\r\n\t\t\t\t\t\t\treturn obj.$count?\"\":obj.details;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\ton:{\r\n\t\t\t\t\t\tonBeforeSelect:function(id){\r\n\t\t\t\t\t\t\tif(this.getItem(id).$count){\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tonAfterSelect:function(id){\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar item = this.getItem(id);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tvar start = item.window_id!=null ? item.code + \":\" + item.window_id : item.code;\r\n\t\t\t\t\t\t\tthis.$scope.show(\"./\"+ start);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\twebix.$$(\"title\").parse({title: item.value, details: item.details});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\turl: app.config.host + \"/api/System/GetSideBar\"\r\n\t\t\t\t}\r\n\t\t\t]\r\n\t\t},\r\n\t\tgetApiHost: function(){\r\n\t\t\treturn app.config.host;\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\ndefine('views/modules/dashline',[\"app\"], function (app) {\r\n\r\n\treturn {\r\n\t\t$ui: {\r\n\t\t\theight: 136,\r\n\t\t\tcss: \"tiles\",\r\n\t\t\tborderless:true,\r\n\t\t\ttemplate: function (data) {\r\n\t\t\t\tvar t = null;\r\n\r\n\t\t\t\tif (data.items == undefined) return;\r\n\r\n\t\t\t\tvar items = data.items;\r\n\t\t\t\tvar html = '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae, nulla! Assumenda dignissimos harum, molestias iure repudiandae ratione praesentium. Illo facilis et velit ut quam omnis, porro molestiae magni, laboriosam ipsa.'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non, quaerat blanditiis. Eligendi quae tenetur ratione repellendus ut.
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quae, nulla! Assumenda dignissimos harum, molestias iure repudiandae ratione praesentium. Illo facilis et velit ut quam omnis, porro molestiae magni, laboriosam ipsa.'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\t\t+ '
'\r\n\t\t\t\tvar html = \"
\";\r\n\t\t\t\thtml += \"

Hóa đơn 32

\" ;\r\n\r\n\t\t\t\tfor (var i = 0; i < items.length; i++) {\r\n\t\t\t\t\tt = items[i];\r\n\r\n\t\t\t\t\tvar tien = webix.Number.format(t.tien, {\r\n\t\t\t\t\t\tgroupDelimiter: \",\",\r\n\t\t\t\t\t\tgroupSize: 3,\r\n\t\t\t\t\t\tdecimalDelimiter: \".\",\r\n\t\t\t\t\t\tdecimalSize: 0\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar code = \"duyethoadon\";\r\n\t\t\t\t\tvar params = \"0\" + t.p_id;\r\n\r\n\t\t\t\t\tif (t.p_id == \"04\") {\r\n\t\t\t\t\t\tcode = \"reportwindow\";\r\n\t\t\t\t\t\tparams = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\thtml += \"
\";\r\n\t\t\t\t\t// html += \"

\"+t.dien_giai+\"

\"\r\n\t\t\t\t\thtml += \"

\"+t.dien_giai+\"

\"\r\n\t\t\t\t\thtml += \"\"+tien+\"
\"\r\n\t\t\t\t\t// html += \"
\";\r\n\t\t\t\t\t// html += \"
\" + tien + \"
\" + t.dien_giai + \"
\";\r\n\t\t\t\t // html += \"\"+tien+\"
\";\r\n\t\t\t\t\thtml += \"
\";\r\n\t\t\t\t}\r\n\t\t\t\thtml += \"
\";\r\n\t\t\t\treturn html;\r\n\t\t\t},\r\n\t\t\turl: app.config.host + \"/Invoice/DashboardTiles\"\r\n\t\t}\r\n\r\n\t};\r\n\r\n});\ndefine('views/modules/dashline78',[\"app\"], function (app) {\r\n return {\r\n $ui: {\r\n height: 136,\r\n CSS: \"titles\",\r\n borderless: true,\r\n template: function (data) {\r\n var t = null;\r\n\r\n if (data.items == undefined) return;\r\n var items = data.items;\r\n var html = \"
\";\r\n html += \"

Hóa đơn 78

\";\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n t = items[i];\r\n\r\n var tien = webix.Number.format(t.tien, {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n\r\n var code = \"duyethoadon\";\r\n var params = \"0\" + t.p_id;\r\n\r\n if (t.p_id == \"04\") {\r\n code = \"reportwindow\";\r\n params = \"WIN00022:d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n }\r\n html += \"
\";\r\n html +=\r\n \"

\" +\r\n t.dien_giai +\r\n \"

\";\r\n html +=\r\n \"

\" +\r\n tien +\r\n \"

\";\r\n html += \"
\";\r\n }\r\n html += \"
\";\r\n return html;\r\n },\r\n url: app.config.host + \"/Invoice68/DashboardTiles78\",\r\n },\r\n };\r\n});\r\n\ndefine('views/modules/data_invoice',[\"app\"],function(app){\r\n\r\n\treturn {\r\n\t\t$ui:{\r\n\t\t\t\"type\": \"clean\",\r\n\t\t\t\"rows\":[\r\n\t\t\t\t{\r\n\t\t\t\t\t\"template\": \" Danh sách mẫu hóa đơn sử dụng\", \"css\": \"sub_title\", \"height\": 30\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n \"view\":\"datatable\",\r\n \"css\" : \"mcls_invoiceDashboard\",\r\n \"url\": app.config.host + \"/Invoice/DashboardInvoices\",\r\n \"columns\": [\r\n // {\r\n // id: \"trang_thai\",\r\n // header:\"Trạng thái\",\r\n // width:120,\r\n // template:\"#trang_thai#\"\r\n // },\r\n {\r\n id: \"mau_so\",\r\n header:\"Mẫu hóa đơn\",\r\n template: \"#mau_so#\",\r\n fillspace:1\r\n },\r\n {\r\n id: \"ky_hieu\",\r\n header:\"Ký hiệu\",\r\n fillspace:1\r\n },\r\n {\r\n id: \"ngay_bd_sd\",\r\n header:\"Ngày sử dụng\",\r\n fillspace:1,\r\n format: function(text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text); \r\n return format(text);\r\n }\r\n },\r\n {\r\n id: \"so_luong\",\r\n header:\"Số lượng\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"color\":\"blue\", \"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"sl_xuat\",\r\n header:\"Đã xuất\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"color\":\"red\",\"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"con_lai\",\r\n header:\"Còn lại\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"font-weight\": \"bold\",\"color\":\"green\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n },\r\n {\r\n id: \"trung_binh\",\r\n header:\"Trung bình 1 ngày\",\r\n width:120,\r\n css: {\"text-align\": \"right\",\"font-weight\": \"bold\"},\r\n format: webix.Number.numToStr({\r\n groupDelimiter:\",\",\r\n groupSize:3,\r\n decimalDelimiter:\".\",\r\n decimalSize:0\r\n })\r\n }\r\n ]\r\n }\r\n\t\t\t]\r\n\t\t}\r\n\t};\r\n\r\n});\ndefine('views/register_licence_branch',[\"app\",\r\n \"locale\",\r\n \"views/forms/register_licence_branch\"\r\n ],function(app,_,dmwindowform){\r\n\r\n var itemValue;\r\n\t\r\n function initUI(){\r\n\t\t\r\n // call API kiểm tra đơn vị này có được đăng ký không?\r\n var table = webix.$$(\"treewindowDataRegister\");\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var value = itemValue.code;\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/CheckBrandValidation?value=\" + value, function (res) {\r\n // res = true;\r\n if (res == \"false\") {\r\n webix.message({ type: \"error\", text: \"Đơn vị không thể đăng ký\" });\r\n webix.$$(\"dangkylicense-win\").close();\r\n }\r\n else {\r\n // call API get danh sách đã đăng ký của đơn vị\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post(url,\r\n {\r\n command:\"CM00098\",\r\n parameter:{\r\n branch_id: itemValue.id\r\n }\r\n }\r\n ,function(text){\r\n var json = JSON.parse(text);\r\n \r\n var data = listToTree(json, { idKey: \"id\", parentId: \"parent_id\" });\r\n \r\n var tblData = $$(\"treewindowDataRegister\");\r\n \r\n tblData.parse(data,\"json\");\r\n tblData.openAll();\r\n \r\n });\r\n }\r\n });\r\n }\r\n }\r\n table.define(\"url\", url);\r\n \r\n }\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefreshRegister\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // css: \"webix_secondary\",\r\n // width: 95,\r\n // on: {\r\n // onClick: function () {\r\n \r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnPlusRegister\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm mới\",\r\n css: \"webix_secondary\",\r\n width: 100,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function (item) {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"register_licence-form\");\r\n \r\n var branchCode = itemValue.code;\r\n\r\n dmwindowform.setEditMode(1);\r\n detailForm.show();\r\n\r\n var cb=$$(\"cbBranchCode\");\r\n cb.define(\"readonly\",true);\r\n cb.setValue(branchCode);\r\n cb.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnEditRegister\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: \"Cập nhật\",\r\n width: 100,\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"register_licence-form\");\r\n\r\n var table = webix.$$(\"treewindowDataRegister\");\r\n var item = table.getSelectedItem();\r\n item.createdondate = new Date(item.createdondate);\r\n form.setValues(item); \r\n dmwindowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n }, \r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n \r\n },\r\n \r\n {},\r\n ]\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"treewindowDataRegister\",\r\n view: \"treetable\",\r\n select: true,\r\n resizeColumn: true,\r\n scheme: {\r\n $change: function (item) {\r\n if (item.$count > 1980)\r\n item.$css = \"highlight\";\r\n },\r\n $init: function (obj) {\r\n\r\n },\r\n },\r\n \r\n \r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEditRegister = $$(\"btnEditRegister\");\r\n btnEditRegister.callEvent(\"onClick\");\r\n },\r\n },\r\n //url: app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno ,\r\n columns: [\r\n {\r\n id: \"stt\",\r\n header: \"STT\",\r\n sort: \"int\",\r\n width: 40,\r\n },\r\n {\r\n id: \"branch_name\",\r\n header: \"Tên khách hàng/ đơn vị\",\r\n width: 300,\r\n },\r\n {\r\n id: \"quantity\",\r\n header: \"Số lượng (hóa đơn)\",\r\n width: 200,\r\n },\r\n {\r\n id: \"createdondate\",\r\n header: \"Ngày đăng ký\",\r\n width: 200,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y %H:%i:%s\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n },\r\n ],\r\n data: [\r\n \r\n ],\r\n filterMode:{\r\n level:false,\r\n showSubItems:false\r\n }\r\n }\r\n ]\r\n }\r\n\r\n\treturn {\t\r\n // $ui: layout,\t\r\n\t\t$ui:{ \r\n\t\t\tview:\"window\", modal:true, id:\"dangkylicense-win\", position:\"center\",\r\n\t\t\thead:\"Đăng ký licence cho khách hàng\",\r\n\t\t\tfullscreen:true,\r\n\t\t\tbody:{\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n rows: [\r\n grid\r\n ]\r\n },\r\n { \r\n view:\"button\", shortcut:\"esc\", label:\"Hủy bỏ (ESC)\",type:\"danger\",align:\"center\",\r\n width:100,\r\n on:{\r\n onClick: function(){\r\n this.getTopParentView().close();\r\n }\r\n },\r\n click:function(){\r\n this.callEvent(\"onClick\");\r\n }\r\n }\r\n ]\r\n\t\t\t}\t\t\t\r\n\t\t\t\r\n\t\t},\t\r\n \r\n setItemValue: function (item) {\r\n\t\t\titemValue = item;\r\n initUI();\r\n\t\t}\r\n \r\n\t};\r\n\r\n});\ndefine('views/reportwindow',[\"app\", \"locale\", \"views/forms/loadDataReport\", \"views/forms/detailreport\", \"views/forms/window\", \"models/user\"], function (app, _, loadDataReport, detailreport, windowform, user) {\r\n \r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n if ($$(\"cbReport\").getValue() == null || $$(\"cbReport\").getValue() == \"\") {\r\n webix.message(\"Bạn chưa chọn báo cáo !\", \"error\");\r\n return;\r\n }\r\n\r\n var cbReport = webix.$$(\"cbReport\");\r\n var reportTable = webix.$$(\"reportTable\");\r\n\r\n webix.extend(reportTable, webix.ProgressBar);\r\n reportTable.disable();\r\n reportTable.showProgress();\r\n\r\n var list = cbReport.getList();\r\n\r\n var item = list.getItem(cbReport.getValue());\r\n\r\n loadDataReport.$ui.id = item.wb_infowindow_id;\r\n loadDataReport.$ui.report_id = cbReport.getValue();\r\n loadDataReport.$ui.load_event = \"loadReport\";\r\n\r\n if ($$(\"tblReport\").config.rpParameter != null) {\r\n loadDataReport.$ui.editmode = 1;\r\n loadDataReport.$ui.formvalues = $$(\"tblReport\").config.rpParameter.parameters;\r\n } else {\r\n loadDataReport.$ui.editmode = 0;\r\n loadDataReport.$ui.formvalues = null;\r\n }\r\n\r\n var wininfoparam = this.$scope.ui(loadDataReport.$ui);\r\n loadDataReport.initUI(item.wb_infowindow_id).then(function () {\r\n wininfoparam.show();\r\n reportTable.enable();\r\n reportTable.hideProgress();\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 130,\r\n label: ' ' + '' + _(\"PRINT\") + \" (PDF)\" + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReport\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để in!\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"PDF\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang in báo cáo ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"EXPORT_EXCEL\") + \"\",\r\n id: \"btnExport\",\r\n on: {\r\n onClick: function () {\r\n var table = $$(\"tblReport\");\r\n\r\n var rpParameter = table.config.rpParameter;\r\n if (rpParameter == undefined || rpParameter == null) {\r\n webix.message(\"Bạn chưa chọn báo cáo hoặc chưa tải dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var datafrmAll = table.serialize();\r\n\r\n if (datafrmAll.length == 0) {\r\n webix.message(\"Không có dữ liệu để xuất!\", \"error\");\r\n return;\r\n }\r\n\r\n rpParameter.type = \"xlsx\";\r\n\r\n if (rpParameter != null) {\r\n var box = webix.modalbox({\r\n title: \"Đang kết xuất Excel ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/System/CreateReport\",\r\n rpParameter,\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\r\n webix.modalbox.hide(box);\r\n var reportItem = $$(\"cbReport\").getList().getSelectedItem();\r\n\r\n if (reportItem != null) {\r\n var export_name = reportItem.export_name;\r\n webix.html.download(file, export_name + \".xlsx\");\r\n }\r\n\r\n },\r\n }\r\n );\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n {\r\n id: \"cbReport\",\r\n view: \"combo\",\r\n width: 450,\r\n label: \"Chọn báo cáo\",\r\n labelWidth: 90,\r\n suggest: {\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00016\",\r\n parameter: {\r\n window_id: windowno,\r\n username: user.getCurrentUser(),\r\n },\r\n };\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, parameters, callback);\r\n },\r\n },\r\n template: \"#name#\",\r\n body: {\r\n template: \"#name#\",\r\n },\r\n },\r\n on: {\r\n onChange: function () {\r\n var report_id = this.getValue();\r\n\r\n if (report_id == \"\") {\r\n return;\r\n }\r\n var name = $$(\"cbReport\").getText();\r\n webix.$$(\"title\").parse({ title: name, details: name });\r\n initTable(report_id);\r\n },\r\n },\r\n },\r\n ];\r\n\r\n var grid = {\r\n id: \"reportTable\",\r\n rows: [\r\n {\r\n id: \"tblReport\",\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n select: true,\r\n css: \"report\",\r\n columns: [],\r\n headermenu: {\r\n width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n },\r\n scheme: {\r\n $change: function (item) {\r\n if (item.BOLD == \"C\") item.$css = \"rowBold\";\r\n },\r\n },\r\n pager: \"pagerA\",\r\n on: {\r\n onBeforeContextMenu: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (item.DOC_ID != null && item.MA_CT != null) {\r\n var mn = $$(\"ctxMenu\");\r\n var menuitem = mn.getItem(\"SUACTGOC\");\r\n if (menuitem == null) {\r\n mn.add({ id: \"SUACTGOC\", value: \"Sửa chứng từ\" });\r\n }\r\n }\r\n\r\n webix.delay(function () {\r\n this.clearSelection();\r\n this.select(id.row, id.column);\r\n }, this);\r\n },\r\n },\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var contextmenu = webix.ui({\r\n view: \"contextmenu\",\r\n id: \"ctxMenu\",\r\n on: {\r\n onMenuItemClick: function (id) {\r\n var item = this.getItem(id);\r\n\r\n if (id == \"SUACTGOC\") {\r\n var table = $$(\"tblReport\");\r\n var row = table.getSelectedItem();\r\n\r\n var sql = \"SELECT TOP 1 a.* FROM VC_WINDOW a WHERE a.ma_ct='\" + row.MA_CT + \"'\";\r\n var url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + sql;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = json[0];\r\n\r\n var table = $$(\"tblReport\");\r\n var row = table.getSelectedItem();\r\n\r\n var a = webix.ajax(app.config.host + \"/api/System/GetDataById?window_id=\" + data.WINDOW_ID + \"&id=\" + row.DOC_ID);\r\n var b = webix.ajax(app.config.host + \"/api/System/GetAllByWindowNo?window_id=\" + data.WINDOW_ID);\r\n\r\n webix.promise.all([a, b]).then(function (results) {\r\n var a_result = results[0].json();\r\n var windowconfig = results[1].json();\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.WINDOW_ID;\r\n\r\n var table = $$(\"tblReport\");\r\n var detailForm = table.$scope.ui(windowform.$ui);\r\n\r\n var item = a_result.data[0];\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n });\r\n });\r\n } else {\r\n var ctx = this.getContext();\r\n\r\n detailreport.$ui.id = \"dtrp_\" + item.MENU_ID;\r\n detailreport.$ui.parentParameter = ctx.obj.config.rpParameter.parameters;\r\n detailreport.$ui.parentRow = ctx.obj.getSelectedItem();\r\n\r\n this.hide();\r\n\r\n var win = ctx.obj.$scope.ui(detailreport.$ui);\r\n detailreport.initUI(item);\r\n win.show();\r\n }\r\n },\r\n },\r\n });\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function initTable(report_id) {\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n var parameters = {\r\n command: \"CM00012\",\r\n parameter: {\r\n wb_report_id: report_id,\r\n },\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, parameters, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var table = webix.$$(\"tblReport\");\r\n\r\n table.clearAll();\r\n table.config.rpParameter = null;\r\n\r\n var cols = [];\r\n var isFooter = false;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var col = json[i];\r\n //console.log(col);\r\n\r\n var item = {\r\n id: col.value_field,\r\n header: \"
\" + _(col.header_title) + \"
\",\r\n width: col.width,\r\n hidden: col.hidden == \"C\" ? true : false,\r\n };\r\n\r\n // cột tổng dưới footer\r\n if (col.footer === \"\" || col.footer === null) {\r\n } else {\r\n var temp = JSON.parse(col.footer);\r\n item.footer = temp;\r\n\r\n isFooter = true;\r\n }\r\n\r\n //console.log(col.sum);\r\n if (col.header != null) {\r\n if (col.header != \"\") {\r\n var headers = JSON.parse(col.header);\r\n\r\n for (var j = 0; j < headers.length; j++) {\r\n var hd = headers[j];\r\n if (hd != null) {\r\n hd.text = \"
\" + _(hd.text) + \"
\";\r\n }\r\n }\r\n\r\n item.header = headers;\r\n }\r\n }\r\n\r\n if (col.data_type == \"datetime\" || col.data_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (col.data_type == \"decimal\" || col.data_type == \"int\" || col.data_type == \"integer\" || col.data_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 6,\r\n decimalOptional: true\r\n });\r\n }\r\n\r\n if (col.data_type == \"boolean\") {\r\n item.template = function (obj, common, value) {\r\n if (value) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (col.value_field == \"nlap\" && col.wb_report_id == \"7fdfab2b-9508-4471-98e0-96d36443ab08\") {\r\n\r\n item.template = function (obj, common) {\r\n if (obj.$level == 1) return common.treetable(obj, common) + \"\" + obj.value + \" ( \" + obj.$count + \" )\" + \"\";\r\n return obj.nlap;\r\n };\r\n }\r\n\r\n if (col.value_field == \"ord\") {\r\n\r\n item.sort = \"int\";\r\n }\r\n\r\n cols.push(item);\r\n }\r\n\r\n table.define(\"footer\", isFooter);\r\n\r\n table.config.columns = cols;\r\n table.config.report_id = json[0][\"wb_report_id\"];\r\n table.refreshColumns();\r\n });\r\n }\r\n var initComponents = function (_windowconfig) {\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n webix.$$(\"title\").parse({\r\n title: vc_window[\"name\"],\r\n details: vc_window[\"name\"],\r\n width: 1000,\r\n });\r\n\r\n $$(\"head-title\").show();\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n var windowno = app.path[1].params[0];\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n if (app_cache[windowno] != null) {\r\n var windowconfig = app_cache[windowno];\r\n\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n var windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n\r\n initComponents(windowconfig);\r\n });\r\n }\r\n\r\n if (app.path[1].params[1] != null) {\r\n var id = app.path[1].params[1];\r\n $$(\"cbReport\").setValue(id);\r\n\r\n var load_event = \"loadReport\";\r\n var report_id = \"d13001df-01fe-4d4f-ab65-cc98e7b41661\";\r\n var id = \"5accccd3-51bd-4370-b130-b01ab35d6c86\";\r\n\r\n var now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n var item = {\r\n ma_dvcs: user.getDvcsID(),\r\n tu_ngay: null,\r\n den_ngay: now,\r\n };\r\n\r\n var table = $$(\"tblReport\");\r\n table.report_id = report_id;\r\n\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: id,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n });\r\n }\r\n\r\n $scope.on(app, \"loadReport\", function (report_id, infoWindowId, item) {\r\n\r\n var table = $$(\"tblReport\");\r\n // webix.extend(table, webix.OverlayBox);\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n //table.showOverlay(\"

\");\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/CreateReport\", rpParameter, function (text) {\r\n webix.delay(\r\n function () {\r\n var data = JSON.parse(text);\r\n\r\n var table = $$(\"tblReport\");\r\n table.clearAll();\r\n table.parse(data, \"json\");\r\n },\r\n null,\r\n null,\r\n 1000\r\n );\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var data = JSON.parse(text);\r\n\r\n // var table = $$(\"tblReport\");\r\n // table.clearAll();\r\n // table.parse(data, \"json\");\r\n });\r\n }\r\n });\r\n\r\n $scope.on(app, \"loadDetailReport\", function (report_id, infoWindowId, item, menuitem) {\r\n var win = $$(\"dtrp_\" + menuitem.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n if (table.config.report_id == report_id) {\r\n var rpParameter = {\r\n parameters: item,\r\n infowindow_id: infoWindowId,\r\n type: \"json\",\r\n report_id: report_id,\r\n };\r\n\r\n table.config.rpParameter = rpParameter;\r\n\r\n var ajax = webix.ajax();\r\n ajax.master = menuitem;\r\n\r\n ajax.headers({ \"Content-type\": \"application/json\" }).post(app.config.host + \"/api/System/CreateReport\", rpParameter, function (text) {\r\n\r\n var win = $$(\"dtrp_\" + this.MENU_ID);\r\n var table = win.getChildViews()[1].getChildViews()[1];\r\n\r\n table.clearAll();\r\n var data = JSON.parse(text);\r\n table.parse(data, \"json\");\r\n table.refresh();\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n }\r\n });\r\n },\r\n initUI: function () {\r\n $$(\"head-title\").show();\r\n },\r\n };\r\n});\r\n\n/**\r\n * Created by Mads on 03-10-2015.\r\n */\r\ndefine('views/retrivepass',[\"models/user\", \"locale\", \"app\", \"helpers/locale\"], function (user, _, app, locale) {\r\n \r\n\r\n var values = webix.copy(\r\n {\r\n username: \"\",\r\n password: \"\",\r\n rememberme: false,\r\n language: \"vi\",\r\n ma_dvcs: \"VP\",\r\n },\r\n Cookies.getJSON(\"Crm\")\r\n );\r\n\r\n return {\r\n $ui: {\r\n cols: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n css: { \"background-color\": \"#cc0000\", color: \"white\", \"border-radius\": \"15px 15px 0px 0px\" },\r\n cols: [\r\n {\r\n view: \"template\",\r\n type: \"header\",\r\n template: \"Quên mật khẩu ?\",\r\n css: { \"background-color\": \"#cc0000\", color: \"white\", \"padding-bottom\": \"5px\" },\r\n borderless: true,\r\n //width:180\r\n },\r\n ],\r\n },\r\n {\r\n cols: [\r\n {\r\n view: \"form\",\r\n gravity: 1,\r\n id: \"loginForm\",\r\n width: 360,\r\n elementsConfig: {\r\n labelPosition: \"top\",\r\n },\r\n elements: [\r\n {\r\n view: \"template\",\r\n template: \"
\",\r\n height: 130,\r\n borderless: true,\r\n css: { padding: \"0px\" },\r\n },\r\n {\r\n height: 15,\r\n },\r\n {\r\n view: \"text\",\r\n //id: \"email\",\r\n name: \"email\",\r\n label: \"Nhập địa chỉ email để gửi mật khẩu mới\",\r\n icon: \"email\",\r\n required: true,\r\n invalidMessage: \"Bạn chưa nhập địa chỉ email hoặc email định dạng không đúng\",\r\n placeholder: \"Email\",\r\n validate: webix.rules.isEmail,\r\n },\r\n {\r\n view: \"button\",\r\n //type:\"danger\",\r\n id: \"login\",\r\n name: \"login\",\r\n label: \"Gửi yêu cầu tạo mật khẩu\",\r\n //hotkey: \"enter\",\r\n css: \"mcls_btnResetPass\",\r\n click: function () {\r\n if ($$(\"loginForm\").validate()) {\r\n var form = $$(\"loginForm\");\r\n\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Account/ResetPass\", $$(\"loginForm\").getValues(), function (text, xml, xhr) {\r\n var json = JSON.parse(text);\r\n\r\n var form = $$(\"loginForm\");\r\n form.enable();\r\n form.hideProgress();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: json.error,\r\n type: \"alert-error\",\r\n });\r\n } else {\r\n webix.alert({\r\n title: \"Thông báo\",\r\n ok: \"OK\",\r\n text: \"Đã gửi mật khẩu tới email.Bạn hãy kiểm tra lại.\",\r\n });\r\n }\r\n });\r\n } else {\r\n $$(\"loginForm\").focus();\r\n }\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại đăng nhập\",\r\n type: \"form\",\r\n icon: \"repeat\",\r\n click: function () {\r\n app.router(\"/login\");\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"version\",\r\n //borderless: true,\r\n css: { background: \"#e6f7ff !important\" },\r\n width: 200,\r\n view: \"template\",\r\n template:\r\n \"

Bước 1:


\" +\r\n \"

Bước 2:

\" +\r\n \"

Bước 3:

\",\r\n },\r\n ],\r\n },\r\n { gravity: 1, temlate: \"\" },\r\n ],\r\n },\r\n { gravity: 1, template: \"\" },\r\n ],\r\n },\r\n\r\n $oninit: function () {\r\n $$(\"loginForm\").focus();\r\n },\r\n };\r\n});\r\n\ndefine('views/searchinvoice',[\"app\", \"views/forms/searchinvoice\", \"locale\"], function (app, searchForm, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Tra cứu hóa đơn\", details: \"Hóa đơn đã lập\" });\r\n\r\n var controls = [\r\n {\r\n id: \"txtSearch\",\r\n view: \"search\",\r\n align: \"center\",\r\n placeholder: _(\"SEARCH\") + \"..\",\r\n width: 300,\r\n on: {\r\n onTimedKeyPress: function () {\r\n var table = $$(\"tblSearch\");\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \" fas fa-edit\",\r\n label: _(\"TIM_CHI_TIET\"),\r\n width: 100,\r\n on: {\r\n onClick: function () {\r\n var win = this.$scope.ui(searchForm.$ui);\r\n searchForm.setValues($$(\"tblSearch\").config.paramFilter);\r\n win.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPrint\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-print\",\r\n css: \"webix_secondary\",\r\n label: _(\"PRINT\"),\r\n width: 65,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"tblSearch\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\");\r\n return;\r\n }\r\n\r\n var url = app.config.host + \"/Invoice/Preview?id=\" + item.inv_InvoiceAuth_id;\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"tblSearch\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/Invoice/Search\";\r\n var item = {};\r\n\r\n var txtSearch = $$(\"txtSearch\");\r\n\r\n var filter = {};\r\n\r\n if (txtSearch !== undefined) {\r\n var typingFilter = txtSearch.getValue();\r\n\r\n if (typingFilter != \"\") {\r\n filter.typingFilter = typingFilter;\r\n }\r\n }\r\n\r\n if (view.config.paramFilter != null) {\r\n filter.paramFilter = view.config.paramFilter;\r\n }\r\n\r\n if (params == null) {\r\n item.start = 0;\r\n item.count = view.config.datafetch;\r\n item.continue = null;\r\n item.filter = filter;\r\n } else {\r\n item.start = params.start;\r\n item.count = params.count;\r\n item.continue = params.continue;\r\n item.filter = filter;\r\n }\r\n\r\n webix.ajax().bind(view).headers({ \"Content-Type\": \"application/json\" }).post(url, item, callback);\r\n },\r\n },\r\n columns: [\r\n { id: \"mau_hd\", header: _(\"MAU_HD\"), width: 150 },\r\n { id: \"inv_invoiceSeries\", header: _(\"KY_HIEU\"), width: 120 },\r\n { id: \"inv_invoiceNumber\", header: _(\"SO_HDON\"), width: 120 },\r\n { id: \"inv_invoiceIssuedDate\", header: _(\"NGAY_HDON\"), width: 150 },\r\n { id: \"ma_dt\", header: _(\"MA_DT\"), width: 150 },\r\n { id: \"inv_buyerLegalName\", header: _(\"TEN_DON_VI\"), width: 250 },\r\n { id: \"inv_buyerDisplayName\", header: _(\"TEN_NGUOI_MUA\"), width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $$(\"tblSearch\").config.paramFilter = {};\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"tblSearch\");\r\n table.config.paramFilter = item;\r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/templatewindow',[\r\n \"app\",\r\n \"views/forms/templatewindow\",\r\n \"views/forms/infowindow\",\r\n\t\"locale\"\r\n], function(app,windowform,infowindow,_) {\r\n \r\n\t\r\n\tvar layoutId = \"\";\r\n\tvar col = [];\r\n\tvar sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n\t//var windowno = \"\":\r\n\t\r\n\tvar initUI = function(){\r\n\t\tvar windowno = app.path[1].params[0];\r\n\t\t\r\n\t\tcol = [];\t\t\r\n sub_col = [];\r\n \r\n var query = \"SELECT TOP 1 * FROM WB_MENU WHERE WINDOW_ID='\"+ windowno +\"'\";\r\n\r\n var url = app.config.host + \"/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url,function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (json.length>0){\r\n webix.$$(\"title\").parse({title: json[0][\"name\"], details: json[0][\"details\"]});\r\n }\r\n });\r\n\r\n /* query = \"SELECT CODE as id,NAME as value FROM VC_MAUIN WHERE WINDOW_ID='\"+ windowno +\"'\";\r\n url = app.config.host + \"/api/System/ExecuteQuery?sql=\" + query;\r\n\r\n webix.ajax(url,function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (json.length>0){\r\n $$(\"cbMauIn\").define(\"options\",json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"btnPrint\").show(); \r\n }\r\n else {\r\n $$(\"cbMauIn\").define(\"options\",[]);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }); */\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post(url,\r\n { \r\n command : \"CM00002\", \r\n parameter: {\r\n window_id: windowno\r\n }\r\n },function(text){\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length>0){\r\n for(var i=0;i0){\r\n url = url + \"&filter=\" +JSON.stringify(array);\r\n }\r\n else {\r\n url = url + \"&filter=null\";\r\n }\r\n \r\n }\r\n else {\r\n url = url + \"&filter=null\";\r\n } \r\n }\r\n\r\n if (view.config.infoparam!=null){\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n }\r\n else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams!== undefined){\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for(var i=0;i< childViews.length;i++){\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue()\r\n };\r\n \r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n\r\n }\r\n else {\r\n url = url + \"&tlbparam=null\" ;\r\n }\r\n \r\n console.log(url);\r\n\r\n webix.ajax(url, callback, view);\r\n \r\n }\r\n };\r\n \r\n table.define(\"url\", url );\r\n\r\n if (vc_window.vc_infowindow_id!=null){\r\n if (vc_window.vc_infowindow_id!=\"\"){\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.vc_infowindow_id;\r\n }\r\n else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n }\r\n else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n \r\n \r\n\r\n\t\t\twebix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n\t\t\twebix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n\r\n\t\t});\r\n\t};\r\n\t\r\n\r\n var controls = [\r\n { \r\n id: \"btnPlus\",\r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"plus\", \r\n label: \"Thêm\" ,\r\n width:65,\r\n shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on:{\r\n onClick: function(){\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams!== undefined){\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for(var i=0;i< childViews.length;i++){\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue(); \r\n \r\n }\r\n\r\n params = item;\r\n\r\n }\r\n \r\n\r\n windowform.setValues(null,windowconfig,params);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new!=null){\r\n var fn = Function(\"app\",vc_window.after_new);\r\n fn(app);\r\n }\r\n }\r\n },\r\n click: function(){\r\n this.callEvent(\"onClick\"); \r\n }\r\n },\r\n { \r\n id: \"btnEdit\",\r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"edit\", \r\n label: \"Sửa\" ,\r\n width:55,\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function(){\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n \r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem(); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnDelete\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"trash-o\", \r\n label: \"Xóa\" ,\r\n width:55,\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData={};\r\n khData.windowid=windowconfig.data[0].window_id;\r\n khData.editmode=3;\r\n khData.data=[];\r\n khData.data.push(item);\r\n \r\n webix.confirm({\r\n text:\"Bạn có muốn xóa \", ok:\"Có\", cancel:\"Không\",\r\n callback:function(res){\r\n if(res){\r\n webix.ajax()\r\n .headers({'Content-type':'application/json'})\r\n .post( app.config.host + \"/System/Save\", khData , function(text){\r\n if (text.hasOwnProperty(\"error\")){\r\n webix.message(text.error);\r\n return;\r\n }\r\n \r\n table.remove(item.id);\r\n\r\n });\r\n \r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnCopy\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"files-o\", \r\n label: _(\"COPY\") ,\r\n width:85,\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null){\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.window_id;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui); \r\n \r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n windowform.copyValues(item,windowconfig);\r\n \r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new!=null){\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n\r\n \r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnSearch\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"search\", \r\n label: _(\"SEARCH\") ,\r\n width:85,\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n \r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\"; \r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n infowindow.initUI(table.config.infowindow_id); \r\n wininfoparam.show();\r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n { \r\n id: \"btnPrint\", \r\n view: \"button\", \r\n type: \"icon\", \r\n icon:\"print\", \r\n label: _(\"PRINT\") ,\r\n width:40,\r\n shortcut: \"F7\",\r\n on: {\r\n onClick: function(){\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n\r\n var rpParameter = {\r\n parameter : item,\r\n CODE: cbMauIn.getValue()\r\n };\r\n\r\n var url = app.config.host + \"/api/System/InChungTu\" ;\r\n\r\n webix.ajax()\r\n .response(\"arraybuffer\")\r\n .headers({'Content-type':'application/json'})\r\n .post(url, rpParameter, function(text, data){\r\n var file = new Blob([data], {type: 'application/pdf'});\r\n var fileURL = URL.createObjectURL(file);\r\n window.open(fileURL,'_blank');\r\n });\r\n \r\n }\r\n },\r\n click: function(){ \r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {},\r\n {\r\n view:\"richselect\",\r\n label:_(\"MAUIN\"),\r\n width:250,\r\n labelWidth:50,\r\n id:\"cbMauIn\"\r\n }\r\n ] \r\n \r\n var grid = {\r\n rows:[\r\n {\r\n id : \"windowData\",\r\n view: \"datatable\", \r\n select: true,\r\n datafetch: 50,\r\n columns: col ,\r\n on:{\r\n onSubViewCreate:function(view, item){\r\n var subView = view;\r\n\r\n if (subView!=null){\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\"+ windowno\r\n +\"&id=\"+item.id;\r\n \r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for(var i=0;i ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 150,\r\n label: ' ' + '' + \"Thêm mới \" + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != undefined && selectedItem != null) {\r\n var detailForm = this.$scope.ui(form_0405.$ui);\r\n form_0405.setEditMode(2);\r\n form_0405.setValuesEdit(selectedItem);\r\n if (selectedItem.trang_thai == 1) {\r\n var form = $$(\"huyhoadon\").elements;\r\n for (var key in form) {\r\n var $el = form[key];\r\n $el.define(\"readonly\", \"true\");\r\n $el.define(\"css\", \"mcls_readonly_text\");\r\n $el.refresh();\r\n }\r\n\r\n $$(\"danhsach_hoadonhuy\").define(\"editable\", \"false\");\r\n $$(\"danhsach_hoadonhuy\").refresh();\r\n $$(\"btnLuuTamHDDT\").destructor();\r\n $$(\"btnGhiSignHuyHDDT\").destructor();\r\n }\r\n detailForm.show();\r\n } else {\r\n webix.message(\"Chưa chọn thông báo nào!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"mau04_68\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem != undefined && selectedItem != null) {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (choose) {\r\n if (choose) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n selectedItem.signMode = 0;\r\n var data = [];\r\n data.push(selectedItem);\r\n var postData = {\r\n data: data,\r\n signMode: 0,\r\n editmode: 3,\r\n };\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n var json = JSON.parse(text);\r\n webix.message(json.error, \"error\");\r\n //webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.message(\"Chưa chọn thông báo nào!\");\r\n }\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Ký\") + \"\",\r\n id: \"btnSign\",\r\n on: {\r\n onClick: function () {\r\n var tableDK = webix.$$(\"mau04_68\");\r\n var selectedItem = tableDK.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn dòng ! \", \"error\");\r\n return;\r\n }\r\n if (selectedItem.trang_thai == 1) {\r\n webix.message(\"Mẫu đã ký, bạn không thể ký lại! \", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/GetSignType\", function (text) {\r\n var result = JSON.parse(text);\r\n var kytaptrung = \"\";\r\n for (var i = 0; i < result.length; i++) {\r\n var item = result[i];\r\n kytaptrung = item.value;\r\n }\r\n\r\n webix.ajax().get(app.config.host + \"/Invoice68/GetListCertificatesFile68\", function (text) {\r\n var listcerts = JSON.parse(text);\r\n if (listcerts.length > 0) {\r\n var box = webix.modalbox({\r\n title: \"Chọn chứng thư số\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblCerts\");\r\n var data = table.serialize();\r\n\r\n var cert = null;\r\n\r\n for (var i = 0; i < data.length; i++) {\r\n if (data[i].chon == true) {\r\n cert = data[i];\r\n break;\r\n }\r\n }\r\n\r\n if (cert == null) {\r\n webix.message(\"Bạn chưa chọn chứng thư số\");\r\n return;\r\n }\r\n\r\n var now = new Date();\r\n var begin = new Date(cert.begin_date);\r\n var end = new Date(cert.end_date);\r\n if (now < begin || now > end) {\r\n webix.message(\"Chứng thư số nằm ngoài thời gian hiệu lực\", \"error\");\r\n return;\r\n }\r\n\r\n var postData = { \r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n cer_serial: cert.cer_serial,\r\n id: selectedItem.id,\r\n notEditMode: 1,\r\n signMode: 1,\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n\r\n // return;\r\n }\r\n },\r\n });\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnCerts\",\r\n id: \"tblCerts\",\r\n view: \"datatable\",\r\n borderless: true,\r\n resizeColumn: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"cert_type\",\r\n header: _(\"Loại\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"cer_serial\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"subject_name\",\r\n header: _(\"SUBJECTNAME\"),\r\n width: 450,\r\n },\r\n {\r\n id: \"begin_date\",\r\n header: _(\"NGAY_BAT_DAU\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"end_date\",\r\n header: _(\"NGAY_KET_THUC\"),\r\n width: 200,\r\n },\r\n {\r\n id: \"issuer\",\r\n header: _(\"DONVI\"),\r\n width: 450,\r\n },\r\n ],\r\n url: app.config.host + \"/Invoice68/GetListCertificatesFile68\",\r\n });\r\n } else {\r\n var table = $$(\"mau04_68\");\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n // xem user có tích checkbox ký HSM không?\r\n var checkSigHSM = webix.ajax(app.config.host + \"/Account/GetInfoUserLogin\");\r\n webix.promise.all([checkSigHSM]).then(function (resultscheckSigHSM) {\r\n if (resultscheckSigHSM[0].json() == \"C\") {\r\n var postData = {\r\n branch_code: user.getDvcsID(),\r\n username: user.getCurrentUser(),\r\n id: selectedItem.id,\r\n notEditMode: 1,\r\n signMode: 1,\r\n check_HSM: \"1\",\r\n };\r\n\r\n webix.extend(tableDK, webix.ProgressBar);\r\n tableDK.disable();\r\n tableDK.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SavePhatHanhBienLai\", postData, {\r\n error: function (text, data, XmlHttpRequest) {\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n tableDK.enable();\r\n tableDK.hideProgress();\r\n if (!json.hasOwnProperty(\"error\")) {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n } else {\r\n var a = webix.ajax(app.config.host + \"/Invoice68/XmlPhatHanhBL?id=\" + selectedItem.id);\r\n var b = webix.ajax(app.config.host + \"/Invoice68/GetListCertificates\");\r\n\r\n webix.promise.all([a, b, selectedItem]).then(function (results) {\r\n // webix.extend(tblInvoice, webix.ProgressBar);\r\n // tblInvoice.disable();\r\n // tblInvoice.showProgress();\r\n var json = results[0].json();\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n }\r\n\r\n var listcerts = results[1].json();\r\n var item = results[2];\r\n\r\n if (listcerts.length == 0) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message({ type: \"error\", text: \"Bạn chưa được phân quyền chứng thư số\" });\r\n return;\r\n }\r\n\r\n require([\"views/modules/minvoiceplugin\"], function (plugin) {\r\n var hub = plugin.hub();\r\n var hubconnect = plugin.conn();\r\n if (hubconnect.state != 1) {\r\n table.enable();\r\n table.hideProgress();\r\n webix.message(\"Quý khách hàng chưa cài Plugin ký biên lai hoặc Plugin ký biên lai chưa được bật !\", \"error\");\r\n return;\r\n }\r\n hub.off(\"resCommand\");\r\n hub.on(\"resCommand\", function (result) {\r\n var json = JSON.parse(result);\r\n\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: json.error });\r\n } else {\r\n var parameters = {\r\n xml: json.xml,\r\n id: selectedItem.id,\r\n tthdon: 3,\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/Invoice68/SaveXmlPhatHanhBienLai\", parameters, function (text) {\r\n var result = JSON.parse(text);\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message(result.error, \"error\");\r\n } else {\r\n webix.message(\"Ký thành công !\", \"success\");\r\n // $$(\"huyhoadonForms\").close();\r\n app.callEvent(\"dataChangedMau0405\", [1, null]);\r\n }\r\n });\r\n }\r\n table.enable();\r\n table.hideProgress();\r\n });\r\n\r\n var _listcerts = [];\r\n\r\n for (var i = 0; i < listcerts.length; i++) {\r\n var _cert = listcerts[i];\r\n\r\n _listcerts.push({\r\n so_serial: _cert.cer_serial,\r\n ngaybatdau: _cert.begin_date,\r\n ngayketthuc: _cert.end_date,\r\n issuer: _cert.issuer,\r\n subjectname: _cert.subject_name,\r\n });\r\n }\r\n\r\n var arg = {\r\n idData: \"#data\",\r\n xml: json[\"xml\"],\r\n shdon: \"\",\r\n idSigner: \"seller\",\r\n tagSign: \"NNT\",\r\n dvky: json[\"dvky\"],\r\n dateKy: json[\"dateKy\"],\r\n listcerts: _listcerts,\r\n };\r\n\r\n hub.invoke(\"execCommand\", \"SignInvoice\", JSON.stringify(arg))\r\n .done(function () {\r\n console.log(\"Success !\");\r\n })\r\n .fail(function (error) {\r\n webix.message(error, \"error\");\r\n });\r\n });\r\n });\r\n // app.callEvent(\"dataChangedInvoie68\", [editmode, null]);\r\n\r\n // webix.message(\"Thành công !\", \"success\");\r\n // webix.$$(\"huyhoadonForms\").close();\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var table = {\r\n margin: 0,\r\n rows: [\r\n {\r\n id: \"mau04_68\",\r\n view: \"datatable\",\r\n select: true,\r\n resizeColumn: true,\r\n footer: false,\r\n editable: false,\r\n tooltip: true,\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n scrollX: true,\r\n cells: [\r\n {\r\n header: \"Chi tiết\",\r\n body: {\r\n view: \"datatable\",\r\n height: 200,\r\n resizeColumn: true,\r\n // scroll: true,\r\n id: \"mau04_68_chitiet\",\r\n headerRowHeight: 50,\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n },\r\n columns: [\r\n {\r\n view: \"text\",\r\n id: \"tbph_id\",\r\n name: \"tbph_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n id: \"tbph_chitiet_id\",\r\n name: \"tbph_chitiet_id\",\r\n hidden: true,\r\n },\r\n {\r\n view: \"text\",\r\n header: \"STT\",\r\n id: \"index\",\r\n name: \"index\",\r\n width: 80,\r\n },\r\n {\r\n header: \"Tên biên lai\",\r\n id: \"tenlbl\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Kí hiệu\",\r\n id: \"khieu\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Số lượng\",\r\n id: \"soluong\",\r\n width: 120,\r\n editor: \"autonumeric\",\r\n editable: true,\r\n css: { \"text-align\": \"right\" },\r\n format: webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 2,\r\n }),\r\n },\r\n {\r\n header: \"Từ số\",\r\n id: \"tuso\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n header: \"Đên số\",\r\n id: \"denso\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n header: \"Hợp đồng số\",\r\n id: \"hdso\",\r\n width: 120,\r\n },\r\n {\r\n header: \"Hợp đồng ngày\",\r\n id: \"hdngay\",\r\n width: 120,\r\n // template: function (obj) {\r\n // return obj.khieu.toString().substring(0, 1);\r\n // },\r\n },\r\n {\r\n id: \"ngay\",\r\n name: \"ngay\",\r\n header: \"Ngày lập\",\r\n width: 120,\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n },\r\n {\r\n id: \"ldo\",\r\n name: \"ldo\",\r\n header: \"Lý do\",\r\n width: 250,\r\n },\r\n ],\r\n data: [\r\n {\r\n index: 1,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000001\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai thông tin\",\r\n },\r\n {\r\n index: 2,\r\n khieu: \"1KT20YY\",\r\n shdon: \"0000002\",\r\n ngay: new Date(),\r\n ladhddt: \"1\",\r\n ldo: \"Sai tiền\",\r\n },\r\n ],\r\n // scrollX: false,\r\n // autoheight: true,\r\n },\r\n },\r\n ],\r\n },\r\n scheme: {\r\n $init: function () {\r\n // this.data.each(function (obj, i) {\r\n // obj.index = i + 1;\r\n // });\r\n },\r\n },\r\n onClick: {\r\n // ShowHistory: function (event, cell, target){\r\n // debugger\r\n // var table = webix.$$(\"mau04_68\");\r\n // var win = table.$scope.ui(hoadonHistory.$ui);\r\n // var hdon_id = cell.row;\r\n // hoadonHistory.setEditMode(hdon_id);\r\n // win.show();\r\n // },\r\n Dowload0405: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05.xml\" : \"Mau04.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportTBPHBienLai?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n Dowload0405Rep: function (event, cell, target) {\r\n var win = webix.$$(\"mau04_68\");\r\n var record = win.getItem(cell.row);\r\n\r\n if (record.loai_tbao != \"5\") {\r\n if (record.trang_thai != 1) {\r\n webix.message(\"Mẫu chưa được ký không thể tải !\", \"error\");\r\n return;\r\n }\r\n }\r\n webix.extend(win, webix.ProgressBar);\r\n win.disable();\r\n win.showProgress();\r\n var filename = record.loai_tbao == \"5\" ? \"Mau05Rep.xml\" : \"Mau04Rep.xml\";\r\n var url = app.config.host + \"/Invoice68/ExportXMLMau04Rep?id=\" + cell.row;\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .get(url, function (text, data) {\r\n win.enable();\r\n win.hideProgress();\r\n\r\n var file = new Blob([data], { type: \"application/xml\" });\r\n webix.html.download(file, filename);\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, \"_blank\");\r\n });\r\n // webix.message(\"Delete row: \" + cell.row);\r\n return false; // here it blocks the default behavior\r\n },\r\n InMau0405: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inTbph_bienlai?id=\" + item.id + \"&type=PDF&loai=\" + item.loai_tbao, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n InMau0405Rep: function (event, cell, target) {\r\n var table = webix.$$(\"mau04_68\");\r\n var item = table.getItem(cell.row);\r\n\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n // var box = webix.modalbox({\r\n // title: \"Đang in biên lai ....\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200,\r\n // });\r\n\r\n // var newWin = window.open();\r\n // var html =\r\n // \"biên lai điện tử MobiFone Invoice\" +\r\n // '' +\r\n // '' +\r\n // '
Đang tải dữ liệu ...

';\r\n // newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .sync()\r\n .get(app.config.host + \"/Invoice68/inMau04SS?id=\" + item.id, function (text) {\r\n var result = text.replace(new RegExp(\"\\\\\" + \"\\\\\", \"gi\"), \"\");\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n \"\" +\r\n '
' +\r\n result +\r\n \"
\" +\r\n \"\";\r\n newWin.document.write(html);\r\n });\r\n },\r\n },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"mau04_68_chitiet\");\r\n var url = app.config.host + \"/Invoice68/GetDataTBPHDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {},\r\n },\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n },\r\n {\r\n id: \"trang_thai\",\r\n\r\n header: [\r\n \"Trạng thái gửi\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n template: function (obj) {\r\n return obj.trang_thai == 1\r\n ? \" Đã ký\"\r\n : \" Chưa ký\";\r\n },\r\n },\r\n {\r\n id: \"Dowload0405\",\r\n header: [\"\", \"Tải về\"],\r\n css: { \"text-align\": \"center\" },\r\n width: 120,\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n },\r\n {\r\n id: \"btnInMau0405\",\r\n header: [\"\", \"In\"],\r\n css: { \"text-align\": \"center\" },\r\n template: function (obj) {\r\n if (obj.trang_thai == 1) {\r\n return \" \";\r\n } else return \" \";\r\n },\r\n width: 120,\r\n },\r\n {\r\n id: \"tnnt\",\r\n header: [\r\n \"Tên công ty\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 300,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"ddanh\",\r\n header: [\r\n \"Địa chỉ\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 500,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"sdthoai\",\r\n header: [\r\n \"Số điện thoại\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 150,\r\n css: {\r\n \"text-align\": \"center\",\r\n },\r\n },\r\n {\r\n id: \"tcqt\",\r\n header: [\r\n \"Cơ quan thuế nhận\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n width: 300,\r\n },\r\n {\r\n id: \"ntbao\",\r\n header: [\r\n \"Ngày thông báo\",\r\n {\r\n content: \"textFilter\",\r\n },\r\n ],\r\n format: function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n },\r\n width: 200,\r\n },\r\n ],\r\n // data: [\r\n // {\r\n // stt: 1,\r\n // loai_tb: \"4\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"001\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // },\r\n // {\r\n // stt: 2,\r\n // loai_tb: \"5\",\r\n // trang_thai: \"Chờ duyệt\",\r\n // mso: \"002\",\r\n // ntbao: new Date(),\r\n // nguoi_gui: \"ADMINNISTRATOR\"\r\n // }\r\n // ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n container: \"paging_here\",\r\n size: 50,\r\n group: 5,\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n // height: 40,\r\n cols: controls,\r\n },\r\n {\r\n rows: [table],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var table = webix.$$(\"mau04_68\");\r\n webix.$$(\"title\").parse({\r\n title: \"Quản lý thông báo phát hành\",\r\n details: \"Quản lý thông báo phát hành\",\r\n });\r\n $scope.on(app, \"dataChangedMau0405\", function (mode, item) {\r\n // if (mode == 1) {\r\n // table.add(item);\r\n // }\r\n // if (mode == 5) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n // }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/tinhhinhsudung',[\r\n \"app\",\r\n \"views/forms/dmwindow\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/tinhhinhsudung\"\r\n], function (app, dmwindowform, _, user, tinhhinhsudungform) {\r\n \r\n\r\n var op = [];\r\n webix.$$(\"title\").parse({ title: \"Tình hình sử dụng hóa đơn\", details: \"Báo cáo tình hình sử dụng hóa đơn (BC26/AC)\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Nhận (F10)\",\r\n width: 85,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var form = webix.$$(\"tinhhinhsudung\");\r\n var item = form.getValues();\r\n var donvi = $$(\"cbdonvi\").getValue();\r\n \r\n if (donvi.length > 0) {\r\n webix.$$('btnshow').callEvent(\"onClick\");\r\n } else {\r\n webix.extend(form, webix.ProgressBar);\r\n form.disable();\r\n form.showProgress();\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/Bcthsd/Check_xulyHD\", item, function (text) {\r\n var data = JSON.parse(text);\r\n\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.$$('btnshow').callEvent(\"onClick\");\r\n }\r\n else {\r\n webix.message(data.error, \"error\");\r\n }\r\n form.enable();\r\n form.hideProgress();\r\n });\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnshow\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"save\",\r\n label: \"Nhận\",\r\n hidden: true,\r\n width: 65,\r\n shortcut: \"F11\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"tinhhinhsudung\");\r\n var item = form.getValues();\r\n var win = this.$scope.ui(tinhhinhsudungform.$ui);\r\n\r\n tinhhinhsudungform.initUI(item);\r\n win.show();\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var thang = webix.Date.dateToStr(\"%n\");\r\n var thangcb = thang(new Date());\r\n var nam = webix.Date.dateToStr(\"%Y\");\r\n var cbnam = nam(new Date());\r\n\r\n var date = new Date();\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n view: \"form\",\r\n id: \"tinhhinhsudung\",\r\n paddingY: 10,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"multicombo\",\r\n label: _(\"DONVI\"),\r\n name: \"lst_branch_code\",\r\n id: \"cbdonvi\",\r\n labelWidth: 80,\r\n suggest: {\r\n selectAll: true,\r\n body: {\r\n url: app.config.host + \"/System/GetDataReferencesByRefId?refId=RF00198\"\r\n }\r\n }\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"tkThang\",\r\n name: \"tokhai_thang\",\r\n view: \"checkbox\",\r\n value: 1,\r\n label: \"Tờ khai tháng\",\r\n labelWidth: 100\r\n },\r\n {\r\n id: \"tkQuy\",\r\n name: \"tokhai_quy\",\r\n view: \"checkbox\",\r\n label: \"Tờ khai quý\",\r\n labelWidth: 100\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cbThang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: thangcb,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]\r\n },\r\n {\r\n id: \"cbNam\",\r\n name: \"nam\",\r\n view: \"text\",\r\n value: cbnam,\r\n label: \"Năm\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"cbTungay\",\r\n view: \"datepicker\",\r\n name: \"tu_ngay\",\r\n\r\n label: \"Từ ngày\"\r\n\r\n },\r\n {\r\n id: \"cbDenngay\",\r\n view: \"datepicker\",\r\n name: \"den_ngay\",\r\n\r\n label: \"Đến ngày\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Chọn phụ lục kê khai\",\r\n body: {\r\n rows: [\r\n {\r\n view: \"checkbox\",\r\n id: \"mau312\",\r\n name: \"mau_312\",\r\n label: \"Mẫu 3.12(Kỳ báo cáo cuối cùng)\",\r\n labelWidth: 200\r\n },\r\n {\r\n view: \"checkbox\",\r\n id: \"mau310\",\r\n name: \"mau_310\",\r\n label: \"Mẫu 3.10(Chuyển địa điểm)\",\r\n labelWidth: 200\r\n },\r\n ]\r\n }\r\n },\r\n {\r\n id: \"bcSoluong\",\r\n name: \"bc_soluong\",\r\n view: \"checkbox\",\r\n label: \"Báo cáo theo số lượng hóa đơn\",\r\n labelWidth: 210\r\n },\r\n // {\r\n // view: \"template\",\r\n // template: \"
\"\r\n // // type: \"section\"\r\n // },\r\n {\r\n margin: 10,\r\n cols: controls\r\n\r\n }\r\n\r\n ]\r\n },\r\n { gravity: 5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n function subview(config) {\r\n webix.ui(config, $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0]);\r\n }\r\n\r\n var d = new Date();\r\n var quarter = Math.floor((d.getMonth() / 3));\r\n var quarter1 = quarter + 1;\r\n var firstDate = new Date(d.getFullYear(), quarter * 3, 1);\r\n var lastDate = new Date(firstDate.getFullYear(), firstDate.getMonth() + 3, 0)\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);\r\n var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay);\r\n $$(\"cbDenngay\").setValue(lastDay);\r\n var tkQuy = $$(\"tkQuy\").getValue();\r\n\r\n $$(\"tkThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tkQuy\").setValue(0);\r\n $$(\"tkThang\").setValue(1);\r\n\r\n subview({\r\n id: \"cbThang\",\r\n name: \"thang\",\r\n view: \"combo\",\r\n label: \"Tháng\",\r\n value: thangcb,\r\n options: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"]\r\n });\r\n var ssk = $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0];\r\n ssk.define(\"id\", \"cbThang\");\r\n\r\n $$(\"cbThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n $$(\"cbNam\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year2 = $$(\"cbNam\").getValue();\r\n var month2 = $$(\"cbThang\").getValue();\r\n var date1 = month2 + \"/01\" + \"/\" + year2;\r\n\r\n var date2 = new Date(date1);\r\n var firstDay2 = new Date(date2.getFullYear(), date2.getMonth(), 1);\r\n\r\n var lastDay2 = new Date(date2.getFullYear(), date2.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay2);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay2);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n // webix.message(\"value cũ : \"+oldv+\" Mới: \"+newv);\r\n });\r\n\r\n $$(\"tkQuy\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"tkThang\").setValue(0);\r\n subview({\r\n id: \"cbQuy\",\r\n name: \"quy\",\r\n view: \"combo\",\r\n label: \"Quý\",\r\n value: quarter1,\r\n options: [\"1\", \"2\", \"3\", \"4\"]\r\n });\r\n var ssk = $$('tinhhinhsudung').getChildViews()[2].getChildViews()[0];\r\n ssk.define(\"id\", \"cbQuy\");\r\n\r\n $$(\"cbQuy\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var quy = $$(\"cbQuy\").getValue();\r\n //console.log(quy);\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n\r\n var quy = $$(\"cbQuy\").getValue();\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n\r\n }\r\n\r\n });\r\n\r\n $$(\"cbThang\").attachEvent(\"onChange\", function (newv, oldv) {\r\n var year = $$(\"cbNam\").getValue();\r\n var month = $$(\"cbThang\").getValue();\r\n var date1 = month + \"/01\" + \"/\" + year;\r\n\r\n var date = new Date(date1);\r\n var firstDay1 = new Date(date.getFullYear(), date.getMonth(), 1);\r\n\r\n var lastDay1 = new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay1);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay1);\r\n $$(\"cbDenngay\").refresh();\r\n });\r\n\r\n $$(\"cbNam\").attachEvent(\"onChange\", function (newv, oldv) {\r\n\r\n if ($$(\"tkThang\").getValue() == 1) {\r\n var year2 = $$(\"cbNam\").getValue();\r\n var month2 = $$(\"cbThang\").getValue();\r\n var date1 = month2 + \"/01\" + \"/\" + year2;\r\n\r\n var date2 = new Date(date1);\r\n var firstDay2 = new Date(date2.getFullYear(), date2.getMonth(), 1);\r\n\r\n var lastDay2 = new Date(date2.getFullYear(), date2.getMonth() + 1, 0);\r\n $$(\"cbTungay\").setValue(firstDay2);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDay2);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n if ($$(\"tkQuy\").getValue() == 1) {\r\n var quy = $$(\"cbQuy\").getValue();\r\n //console.log(quy);\r\n var nam = $$(\"cbNam\").getValue();\r\n var thang;\r\n if (quy == 1) {\r\n thang = 0;\r\n }\r\n if (quy == 2) {\r\n thang = 3;\r\n }\r\n if (quy == 3) {\r\n thang = 6\r\n }\r\n if (quy == 4) {\r\n thang = 9\r\n }\r\n var firstDate = new Date(nam, thang, 1);\r\n var lastDate = new Date(nam, thang + 3, 0);\r\n\r\n $$(\"cbTungay\").setValue(firstDate);\r\n $$(\"cbTungay\").refresh();\r\n $$(\"cbDenngay\").setValue(lastDate);\r\n $$(\"cbDenngay\").refresh();\r\n }\r\n });\r\n\r\n $$(\"mau312\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"mau310\").setValue(0);\r\n }\r\n\r\n });\r\n\r\n $$(\"mau310\").attachEvent(\"onChange\", function (newv, oldv) {\r\n if (newv == 1) {\r\n $$(\"mau312\").setValue(0);\r\n }\r\n\r\n });\r\n }\r\n };\r\n});\ndefine('views/token',[\"app\", \"views/forms/token\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký Token\", details: \"Danh sách Token\" });\r\n\r\n var controls = [\r\n // {\r\n // id: \"btnRefrescacash\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"refresh\",\r\n // label: _(\"Tải báo cáo\"),\r\n // width: 90,\r\n // // shortcut: \"F4\",\r\n // //css:\"button_raised\",\r\n // on: {\r\n // onClick: function () {\r\n // var box = webix.modalbox({\r\n // title: \"Đang tải xuống\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // //.headers({ 'Content-type': 'application/json' })\r\n // .get(app.config.host + \"/Invoice/Floder?filename=BC_CHITIET_ACB_201812151033.csv\", {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: 'text/csv' });\r\n // webix.html.download(file, \"baocao.csv\");\r\n\r\n // webix.modalbox.hide(box);\r\n // }\r\n // });\r\n // }\r\n // },\r\n // click: function () {\r\n // this.callEvent(\"onClick\");\r\n // }\r\n // },\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 90,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n css: \"webix_secondary\",\r\n width: 85,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var box = webix.modalbox({\r\n title: \"Chọn Token\",\r\n buttons: [\"Nhận\", \"Hủy bỏ\"],\r\n text: \"
\",\r\n top: 100,\r\n width: 750,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"1\":\r\n webix.modalbox.hide();\r\n break;\r\n case \"0\":\r\n var table = $$(\"tblToken\");\r\n\r\n var item = {\r\n tokens: table.serialize(),\r\n };\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/Token/SaveTokens\", item, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n var table = $$(\"dmwindowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n\r\n webix.modalbox.hide();\r\n } else {\r\n webix.message(json.error);\r\n }\r\n });\r\n\r\n break;\r\n }\r\n },\r\n });\r\n\r\n var popupText = document.getElementsByClassName(\"webix_popup_text\")[0];\r\n popupText.style.paddingTop = 0;\r\n\r\n var tblMatHang = webix.ui({\r\n container: \"ctnToken\",\r\n id: \"tblToken\",\r\n view: \"datatable\",\r\n borderless: true,\r\n height: 350,\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: _(\"CHON\"),\r\n width: 65,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n },\r\n {\r\n id: \"serialNumber\",\r\n header: _(\"SO_SERIAL\"),\r\n width: 150,\r\n },\r\n {\r\n id: \"tokenLabel\",\r\n header: _(\"TOKEN LABEL\"),\r\n width: 550,\r\n },\r\n ],\r\n //url: app.config.host + \"/Token/SelectTokens\"\r\n });\r\n\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00019\",\r\n parameter: {\r\n ma_dvcs: \"\",\r\n },\r\n },\r\n function (text) {\r\n var array = JSON.parse(text);\r\n\r\n var kytaptrung = \"\";\r\n var server_cert = \"\";\r\n\r\n for (var i = 0; i < array.length; i++) {\r\n var item = array[i];\r\n\r\n if (item.code == \"KYTAPTRUNG\") {\r\n kytaptrung = item.gia_tri;\r\n }\r\n\r\n if (item.code == \"SERVER_CERT\") {\r\n server_cert = item.gia_tri;\r\n }\r\n }\r\n\r\n webix.ajax(server_cert + \"/Token/SelectTokens\", function (text) {\r\n $$(\"tblToken\").clearAll();\r\n $$(\"tblToken\").parse(text, \"json\");\r\n });\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n css: \"webix_secondary\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"chukyso-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n /* var chon = item.chon;\r\n\r\n item.chon = chon == true ? \"true\" : \"false\"; */\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.serial_number,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo?window_id=\" + windowno;\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n if (array.length > 0) {\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n //console.log(url);\r\n webix.ajax(url, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"serial_number\", header: _(\"SO_SERIAL\"), width: 200 },\r\n { id: \"token_label\", header: \"TOKEN LABEL\", width: 350 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/tokenfile',[\"app\", \"views/forms/tokenfile\", \"locale\"], function (app, dmwindowform, _) {\r\n \r\n\r\n var op = [];\r\n\r\n webix.$$(\"title\").parse({ title: \"Đăng ký Token File mềm\", details: \"Danh sách Token File mềm\" });\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n width: 90,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n table.clearAll();\r\n //console.log(table);\r\n table.load(table.config.url);\r\n //table.refresh();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: _(\"THEM\") + \" (F4)\",\r\n width: 85,\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n // var chon = item.chon;\r\n\r\n // item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n dmwindowform.setEditMode(1);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n label: _(\"SUA\") + \" (F3)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n css: \"webix_secondary\",\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var detailForm = this.$scope.ui(dmwindowform.$ui);\r\n var form = webix.$$(\"tokenfile-form\");\r\n\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // var chon = item.chon;\r\n\r\n // item.chon = chon == true ? \"true\" : \"false\";\r\n\r\n form.setValues(item);\r\n\r\n dmwindowform.setEditMode(2);\r\n detailForm.show();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"XOA\") + \" (F8)\",\r\n width: 75,\r\n //css:\"button_raised\",\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"dmwindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n var khData = {};\r\n khData.windowid = app.path[1].params[0];\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \" + item.serialNumber,\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n if (text.hasOwnProperty(\"error\")) {\r\n webix.message(text.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"dmwindowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 100,\r\n resizeColumn: true,\r\n //loadahead: 15,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: tlbparam_s,\r\n };\r\n var url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.index = i + 1;\r\n });\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n },\r\n columns: [\r\n { id: \"index\", header: \"\", sort: \"int\", width: 40 },\r\n { id: \"file_path\", header: _(\"PATH\"), width: 350 },\r\n { id: \"serial_number\", header: \"Số serial\", sort: \"int\", width: 250 },\r\n { id: \"serial_label\", header: \"Serial token\", sort: \"int\", width: 250 },\r\n ],\r\n pager: \"pagerA\",\r\n },\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: \"{common.first()} {common.prev()} {common.pages()} {common.next()} {common.last()}\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n height: 35,\r\n view: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"dmwindowData\");\r\n\r\n if (mode == 1) {\r\n table.add(item);\r\n //table.select(item.iddmwindow,false);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n table.updateItem(selectedItem.id, item);\r\n }\r\n });\r\n },\r\n };\r\n});\r\n\ndefine('views/treewindow',[\r\n \"app\",\r\n \"views/forms/window\",\r\n \"locale\"\r\n], function (app, windowform, _) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n var dataParams = [];\r\n //var windowno = \"\": \r\n\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n\r\n var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n var url = app.config.host + \"/System/Query\";\r\n\r\n webix.ajax()\r\n .headers({\"Content-Type\":\"application/json\"})\r\n .post(url,{sql : query}, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"], url_help: json[0][\"url_help\"] == null || undefined ? \"http://huongdansudung.minvoice.com.vn/\" : json[0][\"url_help\"] });\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n \r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno\r\n }\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 5;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click\r\n });\r\n }\r\n }\r\n else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n id: item.name,\r\n label: _(item.caption),\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-\" + item.icon,\r\n width: item.width,\r\n click: fn\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt=stt+1;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n id: \"btnChucNang\",\r\n label: _(\"CHUC_NANG\"),\r\n view: \"button\",\r\n type: \"icon\",\r\n css: \"webix_secondary\",\r\n icon: \"fas fa-tasks\",\r\n width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n }\r\n }\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n\r\n\r\n });\r\n\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"treewindowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"treewindowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n webix.ajax(url, function (text, xml, xhr) {\r\n\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n var vc_window = windowconfig.data[0];\r\n\r\n var isPlusIcon = false;\r\n\r\n var k = Object.keys(rp['data'][0]['Tabs']).length;\r\n //console.log(k);\r\n for (var j = 0; j < (Object.keys(rp['data'][0]['Tabs'][k - 1]['Fields']).length); j++) {\r\n\r\n var field = rp['data'][0]['Tabs'][k - 1]['Fields'][j];\r\n //console.log(field);\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: rp['data'][0]['Tabs'][k - 1]['Fields'][j]['column_name'],\r\n header: _(String(rp['data'][0]['Tabs'][k - 1]['Fields'][j]['column_name'])),\r\n formatColumn: field.format\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }]\r\n }\r\n }\r\n\r\n if (isPlusIcon == false) {\r\n item.template = \"{common.space()} {common.icon()} #\" + item.id + \"#\";\r\n isPlusIcon = true;\r\n }\r\n\r\n if (field.FORMAT != null) {\r\n if (field.column_type == \"decimal\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0\r\n });\r\n }\r\n\r\n if (field.column_type == \"datetime\" || field.column_type == \"date\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.formatColumn);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n }\r\n else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"treewindowData\");\r\n table.clearAll();\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n\r\n //table.define(\"url\",app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno );\t\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n //console.log(json);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n //console.log(data);\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n \r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item1 = vc_window.WinParams[i];\r\n \r\n var comp = {\r\n id: webix.uid(),\r\n view: item1.type_editor,\r\n width: item1.width,\r\n label: _(item1.caption),\r\n value_field: item1.value_field,\r\n isDefault: item1.has_default,\r\n on: {},\r\n };\r\n \r\n if (comp.view == \"combo\") {\r\n if(comp.value_field) {\r\n dataParams.push({\r\n id: comp.id,\r\n value_field: comp.value_field\r\n })\r\n }\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item1.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item1.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n loadDataCustom(param);\r\n }\r\n }\r\n },\r\n },\r\n };\r\n \r\n comp.on.onChange = function (newv, oldv) {\r\n var param = {};\r\n param[comp.value_field] = newv;\r\n loadDataCustom(param);\r\n };\r\n }\r\n \r\n if (comp.view == \"treesuggest\") {\r\n var listColumns = JSON.parse(item1.list_column);\r\n \r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n \r\n comp.view = \"combo\";\r\n \r\n comp.options = {\r\n view: \"treesuggest\",\r\n textValue: item1.display_field,\r\n isDefault: item1.has_default,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n isDefault: item1.has_default,\r\n comboId: comp.id,\r\n columns: listColumns,\r\n refid: item1.wb_references_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n \r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n \r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n if (comp.view == \"label\") {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + item1.wb_references_id;\r\n var result = JSON.parse(webix.ajax().sync().get(url).response);\r\n comp.label = comp.label + \": \" + result[0][comp.value_field];\r\n // comp.label = webix.ajax(url, function (text) {\r\n // var result = JSON.parse(text);\r\n // var label = $$(id).data.label;\r\n // $$(id).setValue(label + \": \" + result[0][comp.value_field]);\r\n // $$(id).refresh();\r\n // }));\r\n }\r\n \r\n toolBarParams.cols.push(comp);\r\n }\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n }\r\n });\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"sohoadonconlai\",\r\n name: \"sohoadonconlai\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var controls = [\r\n {\r\n id: \"btnRefresh\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-refresh\",\r\n label: _(\"REFRESH\"),\r\n css: \"webix_secondary\",\r\n width: 95,\r\n // shortcut: \"F4\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var param = {};\r\n if(dataParams.length > 0) {\r\n var prCodeComp = dataParams.find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n dataParams.forEach(function(e) {\r\n param[e.value_field] = $$(e.id).getValue();\r\n });\r\n }\r\n loadDataCustom(param);\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnPlus\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-plus\",\r\n label: \"Thêm\",\r\n css: \"webix_secondary\",\r\n width: 65,\r\n //css:\"button_raised\",\r\n shortcut: \"F4\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n \r\n windowform.setValues(null, windowconfig);\r\n windowform.setEditMode(1);\r\n \r\n detailForm.show();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnEdit\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-edit\",\r\n css: \"webix_secondary\",\r\n label: \"Sửa\",\r\n width: 55,\r\n shortcut: \"F3\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n\r\n\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == \"\") {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa ! \", \"error\");\r\n return;\r\n }\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(2);\r\n windowform.setValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnDelete\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-trash-o\",\r\n css: \"webix_secondary\",\r\n label: \"Xóa\",\r\n width: 55,\r\n shortcut: \"F8\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item.$count > 0) {\r\n webix.message(\"Đã có nhóm con. Không thể xóa\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var json = JSON.parse(text);\r\n //console.log(json);\r\n if (json.hasOwnProperty(\"error\")) {\r\n webix.message(json.error);\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n\r\n });\r\n\r\n }\r\n }\r\n });\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n id: \"btnCopy\",\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-files-o\",\r\n css: \"webix_secondary\",\r\n label: _(\"COPY\"),\r\n width: 85,\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"treewindowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu !\", \"error\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.initUI(windowconfig);\r\n windowform.setEditMode(1);\r\n windowform.copyValues(item, windowconfig);\r\n\r\n detailForm.show();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"treewindowData\",\r\n view: \"treetable\",\r\n select: true,\r\n resizeColumn: true,\r\n scheme: {\r\n $change: function (item) {\r\n if (item.$count > 1980)\r\n item.$css = \"highlight\";\r\n }\r\n },\r\n on: {\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n }\r\n },\r\n //url: app.config.host + \"/api/System/GetDataByWindowNo?window_id=\"+windowno ,\r\n columns: col,\r\n filterMode:{\r\n level:false,\r\n showSubItems:false\r\n }\r\n }\r\n ]\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 35,\r\n type: \"toolbar\",\r\n cols: controls\r\n },\r\n {\r\n rows: [\r\n grid\r\n ]\r\n }\r\n\r\n\r\n\r\n ]\r\n\r\n };\r\n\r\n function loadData() {\r\n var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"treewindowData\");\r\n table.clearAll();\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n }, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n }\r\n\r\n function loadDataCustom(param) {\r\n var windowno = app.path[1].params[0];\r\n var table = webix.$$(\"treewindowData\");\r\n table.clearAll();\r\n var defaultBody = {\r\n window_id: windowno,\r\n start: 0,\r\n count: 999999999,\r\n continue: null,\r\n filter: [],\r\n infoparam: null,\r\n tlbparam: []\r\n };\r\n\r\n var body = mergeObject(defaultBody, param)\r\n\r\n webix.ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(app.config.host + \"/System/GetDataByWindowNo\",\r\n body, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json.data, { idKey: \"id\", parentId: \"parent_id\" });\r\n $$(\"treewindowData\").parse(data, \"json\");\r\n $$(\"treewindowData\").openAll();\r\n });\r\n }\r\n\r\n function mergeObject(obj1, obj2) {\r\n var mergedObj = {};\r\n\r\n // Sao chép thuộc tính từ obj1\r\n for (var key in obj1) {\r\n if (obj1.hasOwnProperty(key)) {\r\n mergedObj[key] = obj1[key];\r\n }\r\n }\r\n \r\n // Sao chép thuộc tính từ obj2, ghi đè thuộc tính trùng lặp\r\n for (var key in obj2) {\r\n if (obj2.hasOwnProperty(key)) {\r\n mergedObj[key] = obj2[key];\r\n }\r\n }\r\n \r\n return mergedObj;\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n var windowno = app.path[1].params[0];\r\n\r\n $scope.on(app, \"dataChangedLicense\", function (mode, item) {\r\n \r\n var table = webix.$$(\"treewindowDataRegister\");\r\n\r\n if (mode == 1) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n });\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"treewindowData\");\r\n var url = app.config.host + \"/System/GetDataById?window_id=\" + windowno + \"&id=\" + item.id;\r\n \r\n if(dataParams.length > 0) {\r\n var prCodeComp = dataParams.find(function(e) {\r\n return e.value_field == 'parent_code';\r\n })\r\n\r\n if(prCodeComp) {\r\n url = url + \"&parent_code=\" + $$(prCodeComp.id).getValue();\r\n }\r\n }\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (mode == 1) {\r\n table.data.add(json, 0, json.parent_id);\r\n table.select(json.id);\r\n }\r\n\r\n if (mode == 2) {\r\n var selectedItem = table.getSelectedItem();\r\n //console.log(json.data[0]);\r\n if (selectedItem.parent_id != json.parent_id) {\r\n\r\n var nodeId = table.getSelectedId();\r\n table.remove(nodeId);\r\n\r\n table.clearSelection();\r\n\r\n table.data.add(json, 0, json.parent_id);\r\n table.select(json.id);\r\n }\r\n else {\r\n table.updateItem(selectedItem.id, json);\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n }\r\n };\r\n});\ndefine('views/update',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/license\",\r\n], function (app, _, licenseForm) {\r\n \r\n\r\n webix.$$(\"title\").parse({ title: \"Cập nhật phần mềm\", details: \"Cập nhật phần mềm\" });\r\n\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnUpdate\",\r\n view: \"button\",\r\n type: \"danger\",\r\n //css: \"mcls_btn_save\", \r\n icon: \"save\",\r\n label: _(\"Cập nhật (F10)\"),\r\n // width: 100,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n\r\n var form = webix.$$(\"updateform\");\r\n\r\n if (form.validate()) {\r\n webix.confirm({\r\n title: \"Cập nhật phần mềm\",\r\n text: \"Bạn có muốn cập nhật phần mềm \", ok: \"Có\", cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n var box = webix.modalbox({\r\n title: \"Đang tải cập nhật\",\r\n buttons: [\"Hủy bỏ\"],\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n callback: function (result) {\r\n switch (result) {\r\n case \"0\":\r\n clearTimeout(interVal);\r\n webix.modalbox.hide(box);\r\n break;\r\n }\r\n }\r\n });\r\n var interVal = setTimeout(function () {\r\n\r\n webix.ajax()\r\n .headers({ 'Content-type': 'application/json' })\r\n .post(app.config.host + \"/System/UpdateVersion\", function (text) {\r\n var data = JSON.parse(text);\r\n if (!data.hasOwnProperty(\"error\")) {\r\n webix.modalbox.hide(box);\r\n clearTimeout(interVal);\r\n\r\n webix.message(\"Cập nhật thành công !\", \"debug\");\r\n }\r\n else {\r\n webix.modalbox.hide(box);\r\n clearTimeout(interVal);\r\n webix.message(data.error, \"error\");\r\n }\r\n });\r\n\r\n }, 3000);\r\n }\r\n }\r\n });\r\n }\r\n\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var layout = {\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n { gravity: 0.2, template: \"\" },\r\n {\r\n view: \"template\", template: \"
Thông tin cập nhật
\",\r\n css: { \"background-color\": \"white\", \"color\": \"red\", \"border-radius\": \"15px 15px 0px 0px\", \"font-size\": \"15px\", \"margin-top\":\"65px\" },\r\n type: \"header\"\r\n },\r\n {\r\n view: \"form\",\r\n id: \"updateform\",\r\n paddingY: 10,\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n elements: [\r\n {\r\n view: \"text\",\r\n name: \"old_ver\",\r\n label: \"Version hiện tại\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"text\",\r\n name: \"new_ver\",\r\n label: \"Version mới nhất\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n labelPosition: \"top\"\r\n },\r\n {\r\n view: \"fieldset\",\r\n label: \"Thông tin bản cập nhật\",\r\n height: 200,\r\n body: {\r\n rows: [\r\n {\r\n view: \"textarea\",\r\n name: \"info_update\",\r\n labelPosition: \"top\",\r\n css: \"mcls_readonly_text\",\r\n readonly: true,\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n margin: 15,\r\n cols: controls\r\n }\r\n ]\r\n\r\n },\r\n { gravity: 1, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n };\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n var url = app.config.host + \"/System/GetVersionUpdate\";\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"updateform\").setValues(json);\r\n\r\n });\r\n }\r\n\r\n };\r\n});\ndefine('views/updateToWeb',[\r\n \"app\",\r\n \"locale\",\r\n \"views/forms/updateToWeb\"\r\n], function (app, _, formUpdate) {\r\n \r\n\r\n //var windowno = app.path[1].params[0];\r\n var windowno = null;\r\n //webix.$$(\"title\").parse({ title: \"Nhận dữ liệu từ VACOMS\", details: \"Nhận dữ liệu từ VACOMS\" });\r\n var header = {\r\n //borderless: true,\r\n css: { \"box-shadow\": \"0 2px 10px rgba(0,0,0,0.2)\" },\r\n height: 135,\r\n cols: [\r\n // { gravity: 1, template: \"\", width: 150 },\r\n {\r\n view: \"label\",\r\n template: \"\",\r\n height: 115,\r\n borderless: true,\r\n css: { \"padding\": \"10px\" }\r\n },\r\n {\r\n id: \"version\",\r\n borderless: true,\r\n view: \"label\",\r\n template: \"
Hotline:
info@minvoice.vn
\",\r\n css: { \"padding\": \"40px\", \"padding-top\": \"50px\" }\r\n },\r\n {\r\n rows: [\r\n { gravity: 1, template: \"\" },\r\n {\r\n id: \"cbLanguage\",\r\n view: \"combo\",\r\n width: 125,\r\n options: [\r\n { id: \"vi\", value: \"Việt Nam\" },\r\n { id: \"en\", value: \"English\" },\r\n { id: \"ko\", value: \"Korea\" }\r\n ],\r\n // inputAlign: \"right\",\r\n //css: \"cbLanguage\",\r\n value: \"vi\",\r\n // on: {\r\n // onChange: function (newv, oldv) {\r\n // locale.setLang(newv, null);\r\n // }\r\n // }\r\n },\r\n { gravity: 1, template: \"\" }\r\n ]\r\n\r\n }\r\n // { gravity: 1, template: \"\", width: 150 }\r\n ]\r\n };\r\n var controls = [\r\n {},\r\n {\r\n id: \"btnSave\",\r\n view: \"button\",\r\n type: \"danger\",\r\n icon: \"save\",\r\n label: \"Thực hiện (F10)\",\r\n // width: 120,\r\n shortcut: \"F10\",\r\n on: {\r\n onClick: function () {\r\n var frm = this.$scope.ui(formUpdate.$ui);\r\n frm.show();\r\n // $$(\"formConfirm\").show();\r\n // $$(\"formConfirmValid\").bind($$(\"formInfo\"));\r\n }\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n }\r\n },\r\n {\r\n view: \"button\",\r\n label: \"Quay lại đăng nhập\",\r\n type: \"form\",\r\n icon: \"fas fa-repeat\",\r\n click: function () {\r\n app.router(\"/login\");\r\n }\r\n },\r\n {}\r\n ];\r\n\r\n var tabview = {\r\n id: \"my_tabview\",\r\n view: \"tabview\",\r\n cells: [\r\n {\r\n header: \"Bảng dữ liệu\",\r\n body: {\r\n id: \"tblDM\",\r\n view: \"datatable\",\r\n select: true,\r\n editable: false,\r\n disable: true,\r\n data: [\r\n { chon: true, MA: \"SYS\", TEN_DM: \"Bảng hệ thống\" },\r\n { chon: true, MA: \"BQ\", TEN_DM: \"Bản Quyền\" },\r\n { chon: true, MA: \"CKS\", TEN_DM: \"Chữ ký số\" },\r\n { chon: true, MA: \"TBH\", TEN_DM: \"Thông báo hủy\" },\r\n { chon: true, MA: \"QTC\", TEN_DM: \"Quyền truy cập\" },\r\n { chon: true, MA: \"LDC\", TEN_DM: \"Loại điều chỉnh\" }\r\n ],\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: { content: \"masterCheckbox\" },\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n value: true,\r\n width: 50,\r\n css: { 'text-align': 'right' }\r\n },\r\n {\r\n id: \"MA\",\r\n header: _(\"MA\"),\r\n width: 80\r\n },\r\n {\r\n id: \"TEN_DM\",\r\n header: _(\"Tên Bảng\"),\r\n width: 250\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n header: \"Stored Procedures\",\r\n body: {\r\n id: \"tblDMCT\",\r\n view: \"datatable\",\r\n select: true,\r\n editable: true,\r\n data: [\r\n { chon: true, MA_CT: \"MNU\", TEN_CT: \"Get Menu\" },\r\n { chon: true, MA_CT: \"DHB\", TEN_CT: \"Dashboard\" },\r\n { chon: true, MA_CT: \"CHA\", TEN_CT: \"Biểu đồ\" },\r\n { chon: true, MA_CT: \"PRI\", TEN_CT: \"Print Invoice\" },\r\n { chon: true, MA_CT: \"PRL\", TEN_CT: \"Print License\" },\r\n { chon: true, MA_CT: \"TEM\", TEN_CT: \"Temple Email\" },\r\n { chon: true, MA_CT: \"TSM\", TEN_CT: \"Temple SMS\" },\r\n { chon: true, MA_CT: \"SEI\", TEN_CT: \"Search Invoice\" },\r\n { chon: true, MA_CT: \"ATC\", TEN_CT: \"Auto Create CMD\" },\r\n { chon: true, MA_CT: \"ATF\", TEN_CT: \"Auto Create Field\" }\r\n ],\r\n columns: [\r\n {\r\n id: \"chon\",\r\n header: { content: \"masterCheckbox\" },\r\n template: \"{common.checkbox()}\",\r\n checkValue: true,\r\n uncheckValue: false,\r\n value: true,\r\n width: 50,\r\n css: { 'text-align': 'right' }\r\n },\r\n {\r\n id: \"MA_CT\",\r\n header: _(\"Mã\"),\r\n width: 80\r\n },\r\n {\r\n id: \"TEN_CT\",\r\n header: _(\"Tên Stored Procedures\"),\r\n width: 250\r\n }\r\n\r\n ]\r\n }\r\n }\r\n ]\r\n };\r\n\r\n\r\n var layout = {\r\n // paddingY: 60,\r\n // paddingX: 500,\r\n cols: [\r\n { gravity: 0.5, template: \"\" },\r\n {\r\n rows: [\r\n header,\r\n { gravity: 0.1, template: \"\" },\r\n {\r\n gravity: 0.1,\r\n template: \"
CẬP NHẬT PHẦN MỀM LÊN PHIÊN BẢN OLNINE (WEB)
\", css: { \"padding-top\": \"15px\" }\r\n },\r\n {\r\n view: \"form\",\r\n id: \"formInfo\",\r\n paddingY: 10,\r\n // width: 700,\r\n // height:300,\r\n position: \"center\",\r\n paddingX: 10,\r\n complexData: true,\r\n margin: 0,\r\n // elementsConfig: {\r\n // labelPosition: \"top\",\r\n // //validateEvent: \"key\"\r\n // },\r\n url: app.config.host + \"/System/GetAllDmDvcs\",\r\n elements: [\r\n {\r\n cols: [\r\n {\r\n id: \"ten_dvcs\",\r\n name: \"ten_dvcs\",\r\n view: \"text\",\r\n label: \"Tên đơn vị\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n },\r\n {\r\n id: \"ms_thue\",\r\n name: \"ms_thue\",\r\n view: \"text\",\r\n label: \"Mã số thuế\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n }\r\n ]\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"dia_chi\",\r\n view: \"text\",\r\n name: \"dia_chi\",\r\n label: \"Địa chỉ\",\r\n readonly: true,\r\n css: \"mcls_readonly_text\"\r\n },\r\n {\r\n id: \"tk\",\r\n name: \"gd\",\r\n view: \"checkbox\",\r\n value: 1,\r\n label: \"Ghi đè\"\r\n }\r\n ]\r\n },\r\n {\r\n view: \"template\",\r\n template: \"Lựa chọn Bảng/Stored Procedures Update\",\r\n type: \"section\"\r\n },\r\n tabview,\r\n {\r\n margin: 10,\r\n cols: controls\r\n }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n },\r\n { gravity: 0.5, template: \"\" }\r\n ]\r\n\r\n };\r\n\r\n return {\r\n $ui: layout\r\n };\r\n});\nwebix.protoUI({\r\n\tname: \"ckeditor\",\r\n\t$init: function (config) {\r\n\t\tthis.$view.className += \" webix_selectable\";\r\n\t\tthis._waitEditor = webix.promise.defer();\r\n\t},\r\n\tdefaults: {\r\n\t\tborderless: true,\r\n\t\tlanguage: \"vi\",\r\n\t\ttoolbar: [\r\n\t\t\t{ name: 'document', items: ['Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates'] },\r\n\t\t\t{ name: 'clipboard', items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo'] },\r\n\t\t\t{ name: 'editing', items: ['Find', 'Replace', '-', 'SelectAll', '-', 'Scayt'] },\r\n\t\t\t{ name: 'forms', items: ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'] },\r\n\t\t\t'/',\r\n\t\t\t{ name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'CopyFormatting', 'RemoveFormat'] },\r\n\t\t\t{ name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language'] },\r\n\t\t\t{ name: 'links', items: ['Link', 'Unlink', 'Anchor'] },\r\n\t\t\t{ name: 'insert', items: ['Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe'] },\r\n\t\t\t'/',\r\n\t\t\t{ name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },\r\n\t\t\t{ name: 'colors', items: ['TextColor', 'BGColor'] },\r\n\t\t\t{ name: 'tools', items: ['Maximize', 'ShowBlocks'] },\r\n\t\t\t{ name: 'about', items: ['About'] }\r\n\t\t]\r\n\t},\r\n\t_init_ckeditor_once: function () {\r\n\t\tvar tid = this.config.textAreaID = \"t\" + webix.uid();\r\n\t\tthis.$view.innerHTML = \"\";\r\n\r\n\t\tthis._3rd_editor = CKEDITOR.replace(this.config.textAreaID, {\r\n\t\t\ttoolbar: this.config.toolbar,\r\n\t\t\tlanguage: this.config.language,\r\n\t\t\twidth: this.$width - 2,\r\n\t\t\theight: this.$height - 140\r\n\t\t});\r\n\t\tthis._waitEditor.resolve(this._3rd_editor);\r\n\r\n\t\tthis._init_ckeditor_once = function () { };\r\n\t},\r\n\t_render_ckeditor: function () {\r\n\t\tvar initMethod = \"replace\";\r\n\t\tif (this.config.editorType === \"inline\") {\r\n\t\t\tCKEDITOR.disableAutoInline = true;\r\n\t\t\tinitMethod = \"inline\";\r\n\t\t}\r\n\r\n\t\tthis._3rd_editor = CKEDITOR[initMethod](this.config.textAreaID, {\r\n\t\t\ttoolbar: this.config.toolbar,\r\n\t\t\tlanguage: this.config.language,\r\n\t\t\twidth: this.$width - 2,\r\n\t\t\theight: this.$height - this.config.barHeight\r\n\r\n\r\n\t\t});\r\n\t\tconsole.log(this.config.barHeight);\r\n\t\tthis._waitEditor.resolve(this._3rd_editor);\r\n\t},\r\n\t_set_inner_size: function (x, y) {\r\n\t\t//alert(x+\"-\"+y);\r\n\t\tif (!this._3rd_editor || !this._3rd_editor.container || !this.$width || this.config.editorType === \"inline\") return;\r\n\t\tthis._3rd_editor.resize(x, y);\r\n\t},\r\n\t$setSize: function (x, y) {\r\n\t\t//alert(x+\"-\"+y);\r\n\t\tif (webix.ui.view.prototype.$setSize.call(this, x, y)) {\r\n\t\t\tthis._init_ckeditor_once();\r\n\t\t\tthis._set_inner_size(x, y);\r\n\t\t}\r\n\t},\r\n\tsetValue: function (value) {\r\n\t\tthis.config.value = value;\r\n\r\n\t\tif (this._3rd_editor && this._3rd_editor.status === \"ready\")\r\n\t\t\tthis._3rd_editor.setData(value);\r\n\t\telse webix.delay(function () {\r\n\t\t\tthis.setValue(value);\r\n\t\t}, this, [], 100);\r\n\t},\r\n\tgetValue: function () {\r\n\t\treturn this._3rd_editor ? this._3rd_editor.getData() : this.config.value;\r\n\t},\r\n\tfocus: function () {\r\n\t\tthis._focus_await = true;\r\n\t\tif (this._3rd_editor)\r\n\t\t\tthis._3rd_editor.focus();\r\n\t},\r\n\tgetEditor: function (waitEditor) {\r\n\t\treturn waitEditor ? this._waitEditor : this._3rd_editor;\r\n\t}\r\n}, webix.ui.view);\ndefine(\"views/webix/ckeditor\", function(){});\n\nwebix.protoUI({\r\n\tname:\"edittree\"\r\n}, webix.EditAbility, webix.ui.tree);\ndefine(\"views/webix/editable\", function(){});\n\nwebix.type(webix.ui.tree, {\r\n\tname:\"fileTree\",\r\n\tcss: \"file\",\r\n\theight: 40,\r\n\ttemplateCommon:webix.template(\"{common.icon()}
{common.folder()} #value#
\"),\r\n\tfolder:function(obj, common){\r\n\t\treturn \"\";\r\n\t}\r\n});\ndefine(\"views/webix/filetree\", function(){});\n\nwebix.type(webix.ui.dataview, {\r\n\tname:\"fileView\",\r\n\tcss: \"files\",\r\n\theight: 80,\r\n\twidth: 150,\r\n\r\n\ttemplate: function(obj){\r\n\t\tvar icon = (obj.icon||\"folder-o\");\r\n\t\treturn \"
\"+obj.value;\r\n\t}\r\n\r\n});\ndefine(\"views/webix/fileview\", function(){});\n\nwebix.protoUI({\r\n\tname:\"google-map\",\r\n\t$init:function(config){\r\n\t\tthis.$view.innerHTML = \"
\";\r\n\t\tthis._contentobj = this.$view.firstChild;\r\n\r\n\t\tthis.map = null;\r\n\t\tthis.$ready.push(this.render);\r\n\t},\r\n\trender:function(){\r\n if(typeof google==\"undefined\"||typeof google.maps==\"undefined\"){\r\n var name = \"webix_callback_\"+webix.uid();\r\n window[name] = webix.bind(function(){\r\n this._initMap.call(this,true);\r\n },this);\r\n\r\n var script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = \"//maps.google.com/maps/api/js?sensor=false&callback=\"+name;\r\n document.getElementsByTagName(\"head\")[0].appendChild(script);\r\n }\r\n else\r\n this._initMap();\r\n\t},\r\n _initMap:function(define){\r\n var c = this.config;\r\n\r\n this.map = new google.maps.Map(this._contentobj, {\r\n zoom: c.zoom,\r\n center: new google.maps.LatLng(c.center[0], c.center[1]),\r\n mapTypeId: google.maps.MapTypeId[c.mapType]\r\n });\r\n webix._ldGMap = null;\r\n },\r\n\tcenter_setter:function(config){\r\n\t\tif(this.map)\r\n this.map.setCenter(new google.maps.LatLng(config[0], config[1]));\r\n \r\n\t\treturn config;\r\n\t},\r\n\tmapType_setter:function(config){\r\n\t\t/*ROADMAP,SATELLITE,HYBRID,TERRAIN*/\r\n if(this.map)\r\n \tthis.map.setMapTypeId(google.maps.MapTypeId[config]);\r\n\r\n\t\treturn config;\r\n\t},\r\n\tzoom_setter:function(config){\r\n\t\tif(this.map)\r\n\t\t\t this.map.setZoom(config);\r\n\r\n\t\treturn config;\r\n\t},\r\n\tdefaults:{\r\n\t\tzoom: 5,\r\n\t\tcenter:[ 39.5, -98.5 ],\r\n\t\tmapType: \"ROADMAP\" \r\n\t},\r\n\t$setSize:function(){\r\n\t\twebix.ui.view.prototype.$setSize.apply(this, arguments);\r\n\t\tif(this.map)\r\n google.maps.event.trigger(this.map, \"resize\");\r\n\t}\r\n}, webix.ui.view);\r\n\ndefine(\"views/webix/googlemap\", function(){});\n\ndefine('views/window_custom',[\"app\", \"views/forms/window\", \"views/forms/infowindow\", \"locale\", \"models/user\", \"views/forms/printf\", \"views/forms/sendemail\", \"views/forms/lichsuemail\", \"views/commonHD\"], function (\r\n app,\r\n windowform,\r\n infowindow,\r\n _,\r\n user,\r\n printf,\r\n sendemail,\r\n his_email,\r\n commonHD\r\n) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n var dataParams = [];\r\n //var windowno = \"\":\r\n\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n //var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n // var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00004\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n $$(\"cbMauIn\").define(\"options\", json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"cbTypeIn\").show();\r\n $$(\"btnPrint\").show();\r\n } else {\r\n $$(\"cbMauIn\").define(\"options\", []);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"cbTypeIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 7;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n }\r\n );\r\n\r\n // lấy thông tin của window\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n // console.log(app_cache);\r\n //nếu có trong cache\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n\r\n var masterTab = tabs[0];\r\n //console.log(masterTab);\r\n\r\n $$(\"btnPlus\").show();\r\n $$(\"btnCopy\").show();\r\n $$(\"btnEdit\").show();\r\n $$(\"btnDelete\").show();\r\n\r\n for (var j = 0; j < masterTab.Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.define(\"windowno\", windowno);\r\n table.define(\"leftSplit\", vc_window.fix_left == null ? 0 : vc_window.fix_left);\r\n table.define(\"rightSplit\", vc_window.fix_right == null ? 0 : vc_window.fix_right);\r\n\r\n table.config.infoparam = null;\r\n table.config.columns = col;\r\n table.config.ma_ct = vc_window.ma_ct;\r\n\r\n table.refreshColumns();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n dataParams = [];\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n\r\n var comp = {\r\n id: webix.uid(),\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n if(comp.value_field) {\r\n dataParams.push({\r\n id: comp.id,\r\n value_field: comp.value_field\r\n })\r\n }\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n toolBarParams.cols.push(comp);\r\n }\r\n windowconfig['data_params'] = dataParams;\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n columnAlias: column.columnAlias,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n var checkValue = true;\r\n var parameters = [];\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n if ($$(id).getValue() == \"\") {\r\n checkValue = false;\r\n break;\r\n }\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n parameters.push(item);\r\n }\r\n } \r\n url = url + \"&tlbparam=null\";\r\n\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: [],\r\n };\r\n if(parameters != null && parameters.length > 0) {\r\n parameters.forEach(function(c) {\r\n item[c.columnName] = c.value;\r\n });\r\n } \r\n\r\n var url1 = null;\r\n if (checkValue == true) {\r\n url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n }\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n //}\r\n //else {\r\n // $('.webix_overlay').hide()\r\n //}\r\n // webix.ajax().headers({ 'Content-type': 'application/json' })\r\n // .bind(view)\r\n // .post(url, item, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // this.bind(json);\r\n // // this.refresh();\r\n // // table.parse(json.data, \"json\");\r\n // }\r\n // });\r\n\r\n // webix.ajax(url, callback, view);\r\n },\r\n };\r\n\r\n table.define(\"url\", url);\r\n\r\n if (vc_window.wb_infowindow_id != null) {\r\n if (vc_window.wb_infowindow_id != \"\") {\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.wb_infowindow_id;\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thêm\",\r\n { $template: \"Separator\" },\r\n \"Sửa\",\r\n { $template: \"Separator\" },\r\n \"Xóa\",\r\n { $template: \"Separator\" },\r\n \"Xem hóa đơn gốc\",\r\n { $template: \"Separator\" },\r\n \"Gửi hóa đơn qua email\",\r\n { $template: \"Separator\" },\r\n \"In hóa đơn\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xem hóa đơn gốc\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n //console.log(item);\r\n if (item.original_invoice_id != null && item.original_invoice_id != undefined) {\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n //var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.original_invoice_id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n //newWin.location = fileURL;\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, '_blank');\r\n // // webix.html.download(file, $$('tenfile').getValue());\r\n // });\r\n } else {\r\n webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n return;\r\n }\r\n }\r\n if (this.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"windowData\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.inv_invoiceauth_id);\r\n detailForm.show();\r\n }\r\n if (this.getItem(id).value == \"Gửi hóa đơn qua email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.status == \"Chờ ký\" || selectedItem.status == \"Chờ duyệt\") {\r\n webix.message(\"Hóa đơn chưa được ký\", \"error\");\r\n return;\r\n }\r\n\r\n var url = \"/Invoice/GetEmailTemplate?type=Gửi hóa đơn&id=\" + selectedItem.inv_invoiceauth_id;\r\n\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var win = webix.$$(\"windowData\").$scope.ui(sendemail.$ui);\r\n\r\n var item = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: selectedItem.inv_invoiceauth_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: selectedItem.buyer_email,\r\n his_email: json.his_email,\r\n };\r\n //console.log(sendemail);\r\n\r\n sendemail.setValues(item);\r\n win.show();\r\n });\r\n }\r\n if (this.getItem(id).value == \"In hóa đơn\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n\r\n // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // win.config.url = fileURL;\r\n // win.show();\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-plus\",\r\n // label: \"Thêm (F4)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n shortcut: \"F4\",\r\n css: \"btnThem\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n\r\n windowform.setValues(null, windowconfig, params);\r\n windowform.setEditMode(1);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-edit\",\r\n // label: \"Sửa (F3)\",\r\n // width: 90,\r\n shortcut: \"F3\",\r\n // css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n // console.log(vc_window);\r\n windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // không cho sửa hóa đơn điều chỉnh, thay thế đang fix cứng\r\n\r\n if (vc_window.code == \"WIN00187\" || vc_window.code == \"WIN00189\" || vc_window.code == \"WIN00192\" || vc_window.code == \"WIN00193\") {\r\n if (item.trang_thai_hd == 7 || item.trang_thai_hd == 13 || item.trang_thai_hd == 15 || item.trang_thai_hd == 17) {\r\n webix.message(\"Không thể sửa hóa đơn xóa bỏ. Bạn cần phải sử dụng chức năng tương ứng\", \"error\");\r\n return;\r\n }\r\n if (item.trang_thai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn đã ký, bạn không thể sửa !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn dòng cần sửa\" });\r\n return;\r\n }\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n if (item.dadung == true) {\r\n item.dadung = 1;\r\n }\r\n windowform.setValues(item, windowconfig);\r\n\r\n windowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", \"_\", vc_window.after_edit);\r\n fn(app, _);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash\",\r\n // label: \"Xóa (F8)\",\r\n // width: 80,\r\n shortcut: \"F8\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n console.log(btnRefresh);\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n deleteMultiChoice();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n const cloneItem = JSON.parse(JSON.stringify(item));\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n // windowform.setEditMode(4);\r\n windowform.copyValues(cloneItem, windowconfig);\r\n windowform.setEditMode(1);\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 110,\r\n label: ' ' + '' + _(\"SEARCH\") + \" (F2)\" + \"\",\r\n id: \"btnSearch\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-search\",\r\n // label: _(\"SEARCH\") + \" (F2)\",\r\n // width: 110,\r\n // css: \"webix_secondary\",\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\";\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n if (table.config.infoparam != undefined) {\r\n wininfoparam.config.editmode = 1;\r\n wininfoparam.config.formvalues = table.config.infoparam.parameter;\r\n } else {\r\n wininfoparam.config.editmode = 0;\r\n wininfoparam.config.formvalues = null;\r\n }\r\n\r\n infowindow.initUI(table.config.infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" (F7)\",\r\n // width: 70,\r\n shortcut: \"F7\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n if (cbTypeIn.getValue() == \"Rtf\") {\r\n mimetype = \"application/octet-stream\";\r\n }\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window;\r\n\r\n if (cbTypeIn.getValue() == \"PDF\") {\r\n newWin = window.open();\r\n }\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n webix.modalbox.hide(box);\r\n\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n if (cbTypeIn.getValue() == \"Excel\" || cbTypeIn.getValue() == \"Rtf\") {\r\n var suffix = cbTypeIn.getValue() == \"Excel\" ? \".xlsx\" : \".rtf\";\r\n\r\n var id = $$(\"cbMauIn\").getValue();\r\n var mauin = $$(\"cbMauIn\").getList().getItem(id);\r\n var export_name = mauin.export_name;\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n for (var key in item) {\r\n export_name = export_name.replace(new RegExp(\"#\" + key + \"#\", \"g\"), item[key]);\r\n }\r\n\r\n export_name = export_name.replace(new RegExp(\"/\", \"g\"), \"\");\r\n\r\n webix.html.download(file, export_name + suffix);\r\n return;\r\n }\r\n\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n // onClick: function () {\r\n // var table = webix.$$(\"windowData\");\r\n // var item = table.getSelectedItem();\r\n\r\n // if (item == null) {\r\n // webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var cbMauIn = $$(\"cbMauIn\");\r\n // var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n // var rpParameter = {\r\n // parameter: item,\r\n // wb_mauin_id: cbMauIn.getValue(),\r\n // type: cbTypeIn.getValue()\r\n // };\r\n\r\n // var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : (cbTypeIn.getValue() == \"Excel\" ? \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" : \"text/richtext\");\r\n\r\n // var url = app.config.host + \"/System/InChungTu\";\r\n\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, rpParameter, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: mimetype });\r\n\r\n // if (cbTypeIn.getValue() == \"Rtf\") {\r\n // webix.html.download(file, \"invoice.rtf\");\r\n // webix.modalbox.hide(box);\r\n // return;\r\n // }\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n\r\n // // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // // win.config.url = fileURL;\r\n // // win.show();\r\n\r\n // newWin.location = fileURL;\r\n\r\n // }\r\n // });\r\n\r\n // }\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {},\r\n {\r\n view: \"richselect\",\r\n label: _(\"MAUIN\"),\r\n width: 250,\r\n labelWidth: 50,\r\n id: \"cbMauIn\",\r\n },\r\n {\r\n view: \"richselect\",\r\n //label: _(\"MAUIN\"),\r\n width: 80,\r\n labelWidth: 50,\r\n css: \"cbTypePrint\",\r\n id: \"cbTypeIn\",\r\n value: \"PDF\",\r\n options: [\r\n { id: \"PDF\", value: \"PDF\" },\r\n // { \"id\": \"Excel\", \"value\": \"EXCEL\" },\r\n { id: \"Rtf\", value: \"Rtf\" },\r\n ],\r\n }\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"windowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n resizeColumn: true,\r\n columns: col,\r\n tooltip: true,\r\n leftSplit: 0,\r\n rightSplit: 0,\r\n headermenu: {\r\n //width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n autowidth: true,\r\n },\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n //css:\"webix_header_border webix_data_border\",\r\n hover: \"myhover\",\r\n // tooltip: function (obj, common) {\r\n // //obj - row object\r\n // console.log(obj);\r\n // console.log(common);\r\n // //common.column - configuration of related column\r\n // //return \"Rating: \" + obj[common.column.id] + \"
Votes: \" + obj[(common.column.id + 1)];\r\n // return \"\" + obj + \"\";\r\n // },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + item.id;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onSubViewOpen: function (id) {\r\n var table = this;\r\n var subView = table.getSubView(id);\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + id.row;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00187\" && windowno != \"WIN00189\" && windowno != \"WIN00193\" && windowno != \"WIN00192\" && windowno != \"WIN00194\") {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").sizeToContent();\r\n $$(\"cmenu\").hideItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").hideItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").hideItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n } else {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").showItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").showItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").showItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [],\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: function (data, common) {\r\n var size = 0;\r\n var start = data.page * data.size;\r\n var end = start + data.size;\r\n if (end > data.count) size = data.count - start;\r\n else size = data.size;\r\n var end = start + data.size;\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Số bản ghi:\" + size + \"/\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-th-list\",\r\n width: 35,\r\n on: {\r\n onClick: function () {\r\n changeMultiChoice();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function changeMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var columns = webix.toArray(table.config.columns);\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n columns.insertAt(\r\n {\r\n id: \"colMultiChoice\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n 0\r\n );\r\n } else {\r\n columns.removeAt(0);\r\n }\r\n\r\n table.refreshColumns();\r\n }\r\n\r\n function deleteMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var array = [];\r\n\r\n table.eachRow(function (row) {\r\n var record = table.getItem(row);\r\n\r\n if (record != undefined && record != null) {\r\n if (record.hasOwnProperty(\"colMultiChoice\")) {\r\n if (record.colMultiChoice == \"C\") {\r\n array.push(record.id);\r\n }\r\n }\r\n }\r\n }, true);\r\n\r\n if (array.length == 0) {\r\n webix.message({ type: \"error\", text: \"Không có bản ghi nào được chọn\" });\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = array;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/DeleteMultiChoice\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n $$(\"btnRefresh\").callEvent(\"onClick\");\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (mode == 1) {\r\n // table.add(item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"windowData\");\r\n\r\n /* if (item.hasOwnProperty(\"p_MA_CT\")){\r\n item[\"p_MA_CT\"] = table.config.ma_ct;\r\n } */\r\n\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/window',[\"app\", \"views/forms/window\", \"views/forms/infowindow\", \"locale\", \"models/user\", \"views/forms/printf\", \"views/forms/sendemail\", \"views/forms/lichsuemail\", \"views/commonHD\"], function (\r\n app,\r\n windowform,\r\n infowindow,\r\n _,\r\n user,\r\n printf,\r\n sendemail,\r\n his_email,\r\n commonHD\r\n) {\r\n \r\n\r\n var layoutId = \"\";\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var buttons = [];\r\n //var windowno = \"\":\r\n\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n data: [],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n\r\n col = [];\r\n sub_col = [];\r\n var query = {\r\n command: \"SYS002\",\r\n parameter: {\r\n windowno: windowno,\r\n },\r\n };\r\n //var query = \"SELECT * FROM #SCHEMA_NAME#.wb_menu WHERE window_code='\" + windowno + \"' LIMIT 1 OFFSET 0\";\r\n // var url = app.config.host + \"/System/Query\";\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-Type\": \"application/json\" })\r\n .post(url, query, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n if (webix.$$(\"title\") != undefined) {\r\n webix.$$(\"title\").parse({ title: json[0][\"name\"], details: json[0][\"details\"] });\r\n }\r\n }\r\n });\r\n\r\n url = app.config.host + \"/System/ExecuteCommand\";\r\n\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00004\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (json.length > 0) {\r\n $$(\"cbMauIn\").define(\"options\", json);\r\n $$(\"cbMauIn\").setValue(json[0].id);\r\n $$(\"cbMauIn\").show();\r\n $$(\"cbTypeIn\").show();\r\n $$(\"btnPrint\").show();\r\n } else {\r\n $$(\"cbMauIn\").define(\"options\", []);\r\n $$(\"cbMauIn\").hide();\r\n $$(\"cbTypeIn\").hide();\r\n $$(\"btnPrint\").hide();\r\n }\r\n\r\n $$(\"cbMauIn\").refresh();\r\n }\r\n );\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = 7;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n\r\n var index = $$(\"tlbMain\").index($$(\"cbMauIn\"));\r\n\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n\r\n $$(\"tlbMain\").addView(btnChucNang, index - 1);\r\n }\r\n }\r\n );\r\n\r\n // lấy thông tin của window\r\n url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n // console.log(app_cache);\r\n //nếu có trong cache\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n \r\n if (vc_window.code == \"WIN00103\" || vc_window.code == \"WIN00077\") {\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n }\r\n \r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n col.push({\r\n id: \"subRow\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n css: \"nampvsub\",\r\n width: 40,\r\n });\r\n }\r\n\r\n var masterTab = tabs[0];\r\n //console.log(masterTab);\r\n\r\n if (masterTab.insert_cmd == \"\" || masterTab.insert_cmd == null) {\r\n $$(\"btnPlus\").hide();\r\n $$(\"btnCopy\").hide();\r\n } else {\r\n $$(\"btnPlus\").show();\r\n $$(\"btnCopy\").show();\r\n }\r\n\r\n if (masterTab.update_cmd == \"\" || masterTab.update_cmd == null) {\r\n $$(\"btnEdit\").hide();\r\n } else {\r\n $$(\"btnEdit\").show();\r\n }\r\n\r\n if (masterTab.delete_cmd == \"\" || masterTab.delete_cmd == null) {\r\n $$(\"btnDelete\").hide();\r\n } else {\r\n $$(\"btnDelete\").show();\r\n }\r\n\r\n for (var j = 0; j < masterTab.Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n };\r\n\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_editor == \"gridcombo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"time\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%H:%i\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n }\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n\r\n if (vc_window.window_type == \"MasterDetail\") {\r\n var cells = [];\r\n\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n\r\n if (tab.tab_type == \"Master\") {\r\n continue;\r\n }\r\n\r\n var subCols = [];\r\n\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n subCols.push(subCol);\r\n }\r\n\r\n if (tab.tab_type == \"Detail\") {\r\n var item = {\r\n header: tab.name,\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n tab_table: tab.table_name,\r\n columns: subCols,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n };\r\n cells.push(item);\r\n }\r\n }\r\n\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: cells,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };\r\n\r\n table.define(\"subview\", subview);\r\n }\r\n\r\n table.define(\"windowno\", windowno);\r\n table.define(\"leftSplit\", vc_window.fix_left == null ? 0 : vc_window.fix_left);\r\n table.define(\"rightSplit\", vc_window.fix_right == null ? 0 : vc_window.fix_right);\r\n\r\n table.config.infoparam = null;\r\n table.config.columns = col;\r\n table.config.ma_ct = vc_window.ma_ct;\r\n\r\n table.refreshColumns();\r\n\r\n var parentToolBar = $$(\"tlbMain\").getParentView();\r\n\r\n parentToolBar.removeView(\"tlbParams\");\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"tlbParams\");\r\n // toolBar windown parram\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n var toolBarParams = {\r\n id: \"tlbParams\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n };\r\n\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n\r\n var comp = {\r\n id: webix.uid(),\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == \"treesuggest\") {\r\n var listColumns = JSON.parse(item.list_column);\r\n\r\n for (var v = 0; v < listColumns.length; v++) {\r\n listColumns[v].header = _(listColumns[v].id);\r\n }\r\n\r\n comp.view = \"combo\";\r\n\r\n comp.options = {\r\n view: \"treesuggest\",\r\n textValue: item.display_field,\r\n isDefault: item.has_default,\r\n url: {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var url = app.config.host + \"/System/GetDataByReferencesId?id=\" + view.config.refid;\r\n\r\n webix.ajax(url, function (text) {\r\n var json = JSON.parse(text);\r\n var data = listToTree(json);\r\n view.parse(data, \"json\");\r\n });\r\n },\r\n },\r\n body: {\r\n isDefault: item.has_default,\r\n comboId: comp.id,\r\n columns: listColumns,\r\n refid: item.wb_references_id,\r\n filterMode: {\r\n level: false,\r\n showSubItems: false,\r\n },\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"windowData\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n toolBarParams.cols.push(comp);\r\n }\r\n $$(\"head-title\").addView(toolBarParams, 1);\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n var url = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/GetDataByWindowNo\";\r\n var start = null;\r\n var count = null;\r\n var filter = [];\r\n var infoparam = null;\r\n var tlbparam_s = [];\r\n\r\n if (params == null) {\r\n url = url + \"&start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n start = 0;\r\n count = view.config.datafetch;\r\n } else {\r\n url = url + \"&start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n start = params.start;\r\n count = params.count;\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n if (column !== undefined) {\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n columnAlias: column.columnAlias,\r\n value: params.filter[property],\r\n };\r\n array.push(item);\r\n }\r\n }\r\n\r\n if (array.length > 0) {\r\n filter = array;\r\n url = url + \"&filter=\" + JSON.stringify(array);\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n } else {\r\n url = url + \"&filter=null\";\r\n }\r\n }\r\n\r\n if (view.config.infoparam != null) {\r\n infoparam = view.config.infoparam;\r\n url = url + \"&infoparam=\" + JSON.stringify(view.config.infoparam);\r\n } else {\r\n url = url + \"&infoparam=null\";\r\n }\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n var checkValue = true;\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n if ($$(id).getValue() == \"\") {\r\n checkValue = false;\r\n break;\r\n }\r\n\r\n var item = {\r\n columnName: value_field,\r\n value: $$(id).getValue(),\r\n };\r\n\r\n parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n //if (checkValue == false) {\r\n // $('.webix_overlay').hide();\r\n // webix.message(\"Không tồn tại ký hiệu!\", \"error\");\r\n // return false;\r\n //}\r\n var item = {\r\n window_id: windowno,\r\n start: start,\r\n count: count,\r\n filter: filter,\r\n infoparam: infoparam,\r\n tlbparam: tlbparam_s,\r\n };\r\n var url1 = null;\r\n if (checkValue == true) {\r\n url1 = app.config.host + \"/System/GetDataByWindowNo\";\r\n }\r\n webix.ajax().headers({ \"Content-type\": \"application/json\" }).bind(view).post(url1, item, callback, view);\r\n //}\r\n //else {\r\n // $('.webix_overlay').hide()\r\n //}\r\n // webix.ajax().headers({ 'Content-type': 'application/json' })\r\n // .bind(view)\r\n // .post(url, item, function (text) {\r\n // var json = JSON.parse(text);\r\n\r\n // this.clearAll();\r\n\r\n // if (!json.hasOwnProperty(\"error\")) {\r\n // this.bind(json);\r\n // // this.refresh();\r\n // // table.parse(json.data, \"json\");\r\n // }\r\n // });\r\n\r\n // webix.ajax(url, callback, view);\r\n },\r\n };\r\n\r\n table.define(\"url\", url);\r\n\r\n if (vc_window.wb_infowindow_id != null) {\r\n if (vc_window.wb_infowindow_id != \"\") {\r\n $$(\"btnSearch\").show();\r\n table.config.infowindow_id = vc_window.wb_infowindow_id;\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n } else {\r\n $$(\"btnSearch\").hide();\r\n table.config.infowindow_id = null;\r\n }\r\n\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().enable();\r\n webix.$$(\"windowData\").getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thêm\",\r\n { $template: \"Separator\" },\r\n \"Sửa\",\r\n { $template: \"Separator\" },\r\n \"Xóa\",\r\n { $template: \"Separator\" },\r\n \"Xem hóa đơn gốc\",\r\n { $template: \"Separator\" },\r\n \"Gửi hóa đơn qua email\",\r\n { $template: \"Separator\" },\r\n \"In hóa đơn\",\r\n { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n if (this.getItem(id).value == \"Thêm\") {\r\n $$(\"btnPlus\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Sửa\") {\r\n $$(\"btnEdit\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xóa\") {\r\n $$(\"btnDelete\").callEvent(\"onClick\");\r\n }\r\n if (this.getItem(id).value == \"Xem hóa đơn gốc\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n //console.log(item);\r\n if (item.original_invoice_id != null && item.original_invoice_id != undefined) {\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n //var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.original_invoice_id + \"&type=PDF\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n //newWin.location = fileURL;\r\n window.open(fileURL, \"_blank\");\r\n },\r\n });\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .get(app.config.host + \"/Invoice/PrintInvoice?id=\" + item.inv_originalId + \"&type=PDF\", function (text, data) {\r\n // var file = new Blob([data], { type: 'application/pdf' });\r\n // var fileURL = URL.createObjectURL(file);\r\n // window.open(fileURL, '_blank');\r\n // // webix.html.download(file, $$('tenfile').getValue());\r\n // });\r\n } else {\r\n webix.message(\"Không tồn tại hóa đơn gốc !\", \"error\");\r\n return;\r\n }\r\n }\r\n if (this.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"windowData\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.inv_invoiceauth_id);\r\n detailForm.show();\r\n }\r\n if (this.getItem(id).value == \"Gửi hóa đơn qua email\") {\r\n var table = webix.$$(\"windowData\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n\r\n if (selectedItem.status == \"Chờ ký\" || selectedItem.status == \"Chờ duyệt\") {\r\n webix.message(\"Hóa đơn chưa được ký\", \"error\");\r\n return;\r\n }\r\n\r\n var url = \"/Invoice/GetEmailTemplate?type=Gửi hóa đơn&id=\" + selectedItem.inv_invoiceauth_id;\r\n\r\n webix.ajax(app.config.host + url, function (text) {\r\n var json = JSON.parse(text);\r\n\r\n var win = webix.$$(\"windowData\").$scope.ui(sendemail.$ui);\r\n\r\n var item = {\r\n nguoi_gui: json.sender,\r\n tieude: json.subject,\r\n noidung: json.body,\r\n mat_khau: json.pass,\r\n inv_invoiceauth_id: selectedItem.inv_invoiceauth_id,\r\n type: \"Gửi hóa đơn\",\r\n nguoinhan: selectedItem.buyer_email,\r\n his_email: json.his_email,\r\n };\r\n //console.log(sendemail);\r\n\r\n sendemail.setValues(item);\r\n win.show();\r\n });\r\n }\r\n if (this.getItem(id).value == \"In hóa đơn\") {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n webix.modalbox.hide(box);\r\n\r\n // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // win.config.url = fileURL;\r\n // win.show();\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnRefresh\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-refresh\",\r\n // label: _(\"REFRESH\"),\r\n // width: 95,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n table.clearAll();\r\n\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"THEM\") + \" (F4)\" + \"\",\r\n id: \"btnPlus\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-plus\",\r\n // label: \"Thêm (F4)\",\r\n // css: \"webix_secondary\",\r\n // width: 90,\r\n shortcut: \"F4\",\r\n css: \"btnThem\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n var params = null;\r\n\r\n var tlbParams = $$(\"tlbParams\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var item = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n\r\n var id = child.config.id;\r\n var value_field = child.config.value_field;\r\n\r\n item[value_field] = $$(id).getValue();\r\n }\r\n\r\n params = item;\r\n }\r\n\r\n windowform.setValues(null, windowconfig, params);\r\n windowform.setEditMode(1);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"SUA\") + \" (F3)\" + \"\",\r\n id: \"btnEdit\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-edit\",\r\n // label: \"Sửa (F3)\",\r\n // width: 90,\r\n shortcut: \"F3\",\r\n // css: \"webix_secondary\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n // console.log(vc_window);\r\n windowform.$ui.id = vc_window.code;\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n // không cho sửa hóa đơn điều chỉnh, thay thế đang fix cứng\r\n\r\n if (vc_window.code == \"WIN00187\" || vc_window.code == \"WIN00189\" || vc_window.code == \"WIN00192\" || vc_window.code == \"WIN00193\") {\r\n if (item.trang_thai_hd == 7 || item.trang_thai_hd == 13 || item.trang_thai_hd == 15 || item.trang_thai_hd == 17) {\r\n webix.message(\"Không thể sửa hóa đơn xóa bỏ. Bạn cần phải sử dụng chức năng tương ứng\", \"error\");\r\n return;\r\n }\r\n if (item.trang_thai == \"Đã ký\") {\r\n webix.message(\"Hóa đơn đã ký, bạn không thể sửa !\", \"error\");\r\n return;\r\n }\r\n }\r\n\r\n if (item == null) {\r\n webix.message({ type: \"error\", text: \"Bạn chưa chọn dòng cần sửa\" });\r\n return;\r\n }\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n\r\n if (item.dadung == true) {\r\n item.dadung = 1;\r\n }\r\n windowform.setValues(item, windowconfig);\r\n\r\n windowform.setEditMode(2);\r\n\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_edit != null) {\r\n var fn = Function(\"app\", \"_\", vc_window.after_edit);\r\n fn(app, _);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"XOA\") + \" (F8)\" + \"\",\r\n id: \"btnDelete\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-trash\",\r\n // label: \"Xóa (F8)\",\r\n // width: 80,\r\n shortcut: \"F8\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần xóa !\", \"error\");\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = [];\r\n khData.data.push(item);\r\n\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/Save\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n table.remove(item.id);\r\n var btnRefresh = $$(\"btnRefresh\");\r\n console.log(btnRefresh);\r\n btnRefresh.callEvent(\"onClick\");\r\n });\r\n }\r\n },\r\n });\r\n } else {\r\n webix.confirm({\r\n text: \"Bạn có muốn xóa \",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n deleteMultiChoice();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\");\r\n return;\r\n }\r\n\r\n var vc_window = windowconfig[\"data\"][0];\r\n windowform.$ui.id = vc_window.code;\r\n\r\n var detailForm = this.$scope.ui(windowform.$ui);\r\n\r\n const cloneItem = JSON.parse(JSON.stringify(item));\r\n\r\n windowform.setEditMode(0);\r\n windowform.initUI(windowconfig);\r\n // windowform.setEditMode(4);\r\n windowform.copyValues(cloneItem, windowconfig);\r\n windowform.setEditMode(1);\r\n detailForm.show();\r\n windowform.focusFirstElement();\r\n\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 110,\r\n label: ' ' + '' + _(\"SEARCH\") + \" (F2)\" + \"\",\r\n id: \"btnSearch\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-search\",\r\n // label: _(\"SEARCH\") + \" (F2)\",\r\n // width: 110,\r\n // css: \"webix_secondary\",\r\n shortcut: \"F2\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n\r\n infowindow.$ui.id = table.config.infowindow_id;\r\n infowindow.$ui.load_event = \"filterTable\";\r\n\r\n var wininfoparam = this.$scope.ui(infowindow.$ui);\r\n\r\n if (table.config.infoparam != undefined) {\r\n wininfoparam.config.editmode = 1;\r\n wininfoparam.config.formvalues = table.config.infoparam.parameter;\r\n } else {\r\n wininfoparam.config.editmode = 0;\r\n wininfoparam.config.formvalues = null;\r\n }\r\n\r\n infowindow.initUI(table.config.infowindow_id);\r\n wininfoparam.show();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \" (F7)\" + \"\",\r\n id: \"btnPrint\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"fas fa-print\",\r\n // label: _(\"PRINT\") + \" (F7)\",\r\n // width: 70,\r\n shortcut: \"F7\",\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n return;\r\n }\r\n\r\n var cbMauIn = $$(\"cbMauIn\");\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n var rpParameter = {\r\n parameter: item,\r\n wb_mauin_id: cbMauIn.getValue(),\r\n type: cbTypeIn.getValue(),\r\n };\r\n\r\n var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\r\n\r\n if (cbTypeIn.getValue() == \"Rtf\") {\r\n mimetype = \"application/octet-stream\";\r\n }\r\n\r\n var url = app.config.host + \"/System/InChungTu\";\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window;\r\n\r\n if (cbTypeIn.getValue() == \"PDF\") {\r\n newWin = window.open();\r\n }\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, rpParameter, {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n alert(text);\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: mimetype });\r\n webix.modalbox.hide(box);\r\n\r\n var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n if (cbTypeIn.getValue() == \"Excel\" || cbTypeIn.getValue() == \"Rtf\") {\r\n var suffix = cbTypeIn.getValue() == \"Excel\" ? \".xlsx\" : \".rtf\";\r\n\r\n var id = $$(\"cbMauIn\").getValue();\r\n var mauin = $$(\"cbMauIn\").getList().getItem(id);\r\n var export_name = mauin.export_name;\r\n\r\n var table = webix.$$(\"windowData\");\r\n var item = table.getSelectedItem();\r\n\r\n for (var key in item) {\r\n export_name = export_name.replace(new RegExp(\"#\" + key + \"#\", \"g\"), item[key]);\r\n }\r\n\r\n export_name = export_name.replace(new RegExp(\"/\", \"g\"), \"\");\r\n\r\n webix.html.download(file, export_name + suffix);\r\n return;\r\n }\r\n\r\n var fileURL = URL.createObjectURL(file);\r\n\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n\r\n // onClick: function () {\r\n // var table = webix.$$(\"windowData\");\r\n // var item = table.getSelectedItem();\r\n\r\n // if (item == null) {\r\n // webix.message(\"Bạn chưa chọn dữ liệu cần in\", \"error\");\r\n // return;\r\n // }\r\n\r\n // var cbMauIn = $$(\"cbMauIn\");\r\n // var cbTypeIn = $$(\"cbTypeIn\");\r\n\r\n // var rpParameter = {\r\n // parameter: item,\r\n // wb_mauin_id: cbMauIn.getValue(),\r\n // type: cbTypeIn.getValue()\r\n // };\r\n\r\n // var mimetype = cbTypeIn.getValue() == \"PDF\" ? \"application/pdf\" : (cbTypeIn.getValue() == \"Excel\" ? \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" : \"text/richtext\");\r\n\r\n // var url = app.config.host + \"/System/InChungTu\";\r\n\r\n // var box = webix.modalbox({\r\n // title: \"Đang in chứng từ\",\r\n // text: \"

\",\r\n // width: 350,\r\n // height: 200\r\n // });\r\n\r\n // var newWin = window.open();\r\n\r\n // webix.ajax()\r\n // .response(\"arraybuffer\")\r\n // .headers({ 'Content-type': 'application/json' })\r\n // .post(url, rpParameter, {\r\n // error: function (text, data, XmlHttpRequest) {\r\n // webix.modalbox.hide(box);\r\n // alert(text);\r\n // },\r\n // success: function (text, data, XmlHttpRequest) {\r\n // var file = new Blob([data], { type: mimetype });\r\n\r\n // if (cbTypeIn.getValue() == \"Rtf\") {\r\n // webix.html.download(file, \"invoice.rtf\");\r\n // webix.modalbox.hide(box);\r\n // return;\r\n // }\r\n // var fileURL = URL.createObjectURL(file);\r\n\r\n // webix.modalbox.hide(box);\r\n\r\n // // var win = $$(\"windowData\").$scope.ui(printf.$ui);\r\n // // win.config.url = fileURL;\r\n // // win.show();\r\n\r\n // newWin.location = fileURL;\r\n\r\n // }\r\n // });\r\n\r\n // }\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHDTT32(self);\r\n },\r\n },\r\n {},\r\n {\r\n view: \"richselect\",\r\n label: _(\"MAUIN\"),\r\n width: 250,\r\n labelWidth: 50,\r\n id: \"cbMauIn\",\r\n },\r\n {\r\n view: \"richselect\",\r\n //label: _(\"MAUIN\"),\r\n width: 80,\r\n labelWidth: 50,\r\n css: \"cbTypePrint\",\r\n id: \"cbTypeIn\",\r\n value: \"PDF\",\r\n options: [\r\n { id: \"PDF\", value: \"PDF\" },\r\n // { \"id\": \"Excel\", \"value\": \"EXCEL\" },\r\n { id: \"Rtf\", value: \"Rtf\" },\r\n ],\r\n },\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n id: \"windowData\",\r\n view: \"datatable\",\r\n select: true,\r\n datafetch: 50,\r\n resizeColumn: true,\r\n columns: col,\r\n tooltip: true,\r\n leftSplit: 0,\r\n rightSplit: 0,\r\n headermenu: {\r\n //width: 200,\r\n autoheight: false,\r\n scroll: true,\r\n autowidth: true,\r\n },\r\n multiview: { keepViews: true },\r\n keepViews: true,\r\n //css:\"webix_header_border webix_data_border\",\r\n hover: \"myhover\",\r\n // tooltip: function (obj, common) {\r\n // //obj - row object\r\n // console.log(obj);\r\n // console.log(common);\r\n // //common.column - configuration of related column\r\n // //return \"Rating: \" + obj[common.column.id] + \"
Votes: \" + obj[(common.column.id + 1)];\r\n // return \"\" + obj + \"\";\r\n // },\r\n on: {\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + item.id;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onSubViewOpen: function (id) {\r\n var table = this;\r\n var subView = table.getSubView(id);\r\n\r\n if (subView != null) {\r\n var windowno = app.path[1].params[0];\r\n\r\n var url = app.config.host + \"/System/GetDataDetailsByTabTable?window_id=\" + windowno + \"&id=\" + id.row;\r\n\r\n var detailTables = subView.getChildViews()[1].getChildViews();\r\n\r\n for (var i = 0; i < detailTables.length; i++) {\r\n var dt = detailTables[i];\r\n dt.clearAll();\r\n dt.load(url + \"&tab_table=\" + dt.config.tab_table);\r\n }\r\n }\r\n },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onBeforeLoad: function () {\r\n this.showOverlay(\"

\");\r\n },\r\n onAfterLoad: function (id) {\r\n this.hideOverlay();\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00187\" && windowno != \"WIN00189\" && windowno != \"WIN00193\" && windowno != \"WIN00192\" && windowno != \"WIN00194\") {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").sizeToContent();\r\n $$(\"cmenu\").hideItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").hideItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").hideItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n } else {\r\n $$(\"cmenu\").refresh();\r\n $$(\"cmenu\").showItem(\"Xem hóa đơn gốc\");\r\n $$(\"cmenu\").showItem(\"Gửi hóa đơn qua email\");\r\n $$(\"cmenu\").showItem(\"In hóa đơn\");\r\n $$(\"cmenu\").attachTo($$(\"windowData\"));\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n tabbar: {\r\n width: 200,\r\n },\r\n cells: [],\r\n },\r\n pager: \"pagerA\",\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n template: function (data, common) {\r\n var size = 0;\r\n var start = data.page * data.size;\r\n var end = start + data.size;\r\n if (end > data.count) size = data.count - start;\r\n else size = data.size;\r\n var end = start + data.size;\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Số bản ghi:\" + size + \"/\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {},\r\n {\r\n view: \"button\",\r\n type: \"icon\",\r\n icon: \"fas fa-th-list\",\r\n width: 35,\r\n on: {\r\n onClick: function () {\r\n changeMultiChoice();\r\n },\r\n },\r\n click: function () {\r\n this.callEvent(\"onClick\");\r\n },\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n rows: [\r\n {\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n type: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n cols: controls,\r\n borderless: true,\r\n },\r\n ],\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n function changeMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var columns = webix.toArray(table.config.columns);\r\n\r\n if (table.getColumnConfig(\"colMultiChoice\") == undefined) {\r\n columns.insertAt(\r\n {\r\n id: \"colMultiChoice\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 50,\r\n checkValue: \"C\",\r\n uncheckValue: \"K\",\r\n template: \"{common.checkbox()}\",\r\n },\r\n 0\r\n );\r\n } else {\r\n columns.removeAt(0);\r\n }\r\n\r\n table.refreshColumns();\r\n }\r\n\r\n function deleteMultiChoice() {\r\n var table = $$(\"windowData\");\r\n var array = [];\r\n\r\n table.eachRow(function (row) {\r\n var record = table.getItem(row);\r\n\r\n if (record != undefined && record != null) {\r\n if (record.hasOwnProperty(\"colMultiChoice\")) {\r\n if (record.colMultiChoice == \"C\") {\r\n array.push(record.id);\r\n }\r\n }\r\n }\r\n }, true);\r\n\r\n if (array.length == 0) {\r\n webix.message({ type: \"error\", text: \"Không có bản ghi nào được chọn\" });\r\n return;\r\n }\r\n\r\n var khData = {};\r\n khData.windowid = windowconfig.data[0].code;\r\n khData.editmode = 3;\r\n khData.data = array;\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(app.config.host + \"/System/DeleteMultiChoice\", khData, function (text) {\r\n var response = JSON.parse(text);\r\n\r\n if (response.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: response.error });\r\n return;\r\n }\r\n\r\n $$(\"btnRefresh\").callEvent(\"onClick\");\r\n });\r\n }\r\n\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n\r\n $scope.on(app, \"dataChanged\", function (mode, item) {\r\n var table = webix.$$(\"windowData\");\r\n\r\n if (mode == 1) {\r\n // table.add(item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n\r\n if (mode == 2) {\r\n // var selectedItem = table.getSelectedItem();\r\n // table.updateItem(selectedItem.id, item);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n webix.UIManager.setFocus($$(table.config.id));\r\n }\r\n });\r\n\r\n $scope.on(app, \"filterTable\", function (report_id, infoWindowId, item) {\r\n var table = $$(\"windowData\");\r\n\r\n /* if (item.hasOwnProperty(\"p_MA_CT\")){\r\n item[\"p_MA_CT\"] = table.config.ma_ct;\r\n } */\r\n\r\n var infoparam = {\r\n infowindow_id: infoWindowId,\r\n parameter: item,\r\n };\r\n\r\n table.config.infoparam = infoparam;\r\n table.clearAll();\r\n table.load(table.config.url);\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78bienlai',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78bienlai\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail_bienlai\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \".\",\r\n groupSize: 3,\r\n decimalDelimiter: \",\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn biên lai chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Biên lai đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn biên lai chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Biên lai chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Biên lai chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Biên lai đã ký, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: biên lai điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetBienLaiChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa biên lai đã ký !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các biên lai xóa phải có số biên lai liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA biên lai\",\r\n text: \"Bạn có muốn xóa biên lai số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintCD\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn biên lai cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in biên lai ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"biên lai thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Hủy\", { $template: \"Separator\" }, { $template: \"Separator\" }, \"Lịch sử gửi Email\"],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteHUyInvoicebienlai();\r\n }\r\n if (self.getItem(id).value == \"Lập biên bản xóa bỏ\") {\r\n commonHD.ExcuteCancellingInvoicebienlai();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn biên lai\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập biên lai ->\" + vc_window[\"name\"], width: 1000 });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption).replace(/(\\[)([0-9]{2})(])/, \"\");\r\n }\r\n if (field.column_type == \"character varying\") {\r\n item.columnType = \"nvarchar\";\r\n }\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết biên lai\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n /*webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });*/\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadon78tncn',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadon78tncn\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemailtncn\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in chừng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n //webix.$$(\"title\").parse({ title: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\", details: \"Lập hóa đơn -> Hóa đơn giá trị gia tăng\" });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\"Hủy\", { $template: \"Separator\" }, \"Lịch sử gửi Email\"],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoicetncn();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn chứng từ\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(\"app\", vc_window.after_new);\r\n fn(app);\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Chứng từ đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Chứng từ điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa chứng từ đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các chứng từ xóa phải có số chứng từ liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA CHỨNG TỪ\",\r\n text: \"Bạn có muốn xóa chứng từ số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var vc_window = windowconfig[\"data\"][0];\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n if (vc_window.after_new != null) {\r\n var fn = Function(vc_window.after_new);\r\n fn();\r\n }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*{\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },*/\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn chứng từ cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in chứng từ ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Chứng từ thuế thu nhập cá nhân MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n /*onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n tableDetail.load(url);\r\n }\r\n },*/\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n if (newv * 1 != $$(\"pagerA\").config.size) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n }\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"khongMa\",\r\n name: \"khongMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"khongMaError\",\r\n name: \"khongMaError\",\r\n css: \"\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhthunocode\",\r\n name: \"doanhthunocode\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập Chứng từ ->\" + vc_window[\"name\"], width: 1000 });\r\n var tabs = vc_window.Tabs;\r\n\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption).replace(/(\\[)([0-9]{2})(])/, \"\");\r\n }\r\n if (field.column_type == \"character varying\") {\r\n item.columnType = \"nvarchar\";\r\n }\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n subCol.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết chứng từ\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n var child = childViews[i];\r\n // console.log(child);\r\n var id = child.config.id;\r\n //var value_field = child.config.value_field;\r\n var item = {\r\n columnName: \"cctbao_id\",\r\n value: $$(id).getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n } else {\r\n return;\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n\r\n /*webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n $$(\"khongMa\").setValue(\"Số hóa đơn đã gửi CQT: \" + json[\"khongma\"]);\r\n $$(\"khongMaError\").setValue(\"Số hóa đơn CQT thông báo lỗi: \" + json[\"khongmaerror\"]);\r\n $$(\"doanhthunocode\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthunocode\"]) ? fm(json[\"doanhthunocode\"]) : 0));\r\n });*/\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n $onDestruct: function (ui, name, url, scope) {\r\n $$(\"tlbParams\").Clear();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadoncode78_mtt',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadoncode78_mtt\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n // \"Hủy\",\r\n // { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n\r\n var subBienBan = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"AddBienBan\",\r\n value: \"Thêm biên bản\",\r\n },\r\n {\r\n id: \"EditBienBan\",\r\n value: \"Sửa biên bản\",\r\n },\r\n {\r\n id: \"InBienBan\",\r\n value: \"In biên bản\",\r\n },\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"AddBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // } \r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (hasBienBan) {\r\n webix.message(\"Hoá đơn đã có biên bản không thể thêm mới!\", \"error\");\r\n return;\r\n }\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setEditMode(1);\r\n bienbanForm.setHideBtnDelete();\r\n component.show();\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"EditBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice_BienBan?id=\" + item.id;\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(url, function (text) {\r\n var data = (JSON.parse(text))[0];\r\n\r\n if (!data) {\r\n webix.message(\"Hoá đơn không có biên bản không thể sửa!\", \"error\");\r\n return;\r\n }\r\n\r\n data.nvban = removeTimeZoneT(data.nvban);\r\n\r\n var component = table.$scope.ui(bienbanForm.$ui);\r\n bienbanForm.setValuesBienBan(data, null);\r\n bienbanForm.setEditMode(2);\r\n\r\n component.show();\r\n\r\n });\r\n }\r\n\r\n if (record.id == \"InBienBan\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthdon != 19 && item.tthdon != 21 && item.tthdon != 23 && item.tthdon != 5 && item.tthdon != 2 && item.tthdon != 3) {\r\n webix.message(\"Vui lòng chọn hóa đơn ở trạng thái điều chỉnh, thay thế, hoặc hủy\", \"error\");\r\n return;\r\n }\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/CheckBienBan?id=\" + item.id, {\r\n error: function (text) {\r\n webix.message(text, \"error\");\r\n return;\r\n },\r\n success: function (text) {\r\n var hasBienBan = JSON.parse(text);\r\n if (!hasBienBan) {\r\n webix.message(\"Hoá đơn chưa có biên bản không thể in!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in biên bản ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inBienBan?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBienBan=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n if (item.mccqthue != undefined && item.mccqthue != null && item.mccqthue != '') {\r\n webix.message(\"Hóa đơn đã có mã, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"Sinh MTT\" + \"\",\r\n id: \"btnCreatMa\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần tạo mã !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/SinhMTT?hdon_id=\" + item[\"hdon_id\"], {\r\n error: function (text, data, XmlHttpRequest) {\r\n\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var json = JSON.parse(text);\r\n\r\n table.enable();\r\n table.hideProgress();\r\n\r\n if (!json.hasOwnProperty(\"error\")) {\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(json.error, \"error\");\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n scroll: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n var urlget = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + item[\"dvtte\"];\r\n webix\r\n .ajax()\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlget, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n maximumValue: Number(\"999999999999.\" + decimal_place),\r\n minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n\r\n tableDetail.load(url);\r\n\r\n var data = tableDetail.serialize();\r\n console.log(data);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.getColumnConfig;\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n //console.log(_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập hóa đơn ->\" + vc_window[\"name\"], width: 500 });\r\n var tabs = vc_window.Tabs;\r\n var codewindow = app.path[1].params[0];\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n });\r\n for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {},\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n\r\n $$(\"paramKH\").removeView(item.value_field);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n if (codewindow == \"WIN00788C\") {\r\n $$(\"btnBangKeOption\").hide();\r\n $$(\"btnPrintConvert\").hide();\r\n $$(\"btnPrint\").hide();\r\n $$(\"btnPrintVe\").hide();\r\n } else {\r\n $$(\"btnPrintVe\").hide();\r\n }\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n // Lấy giá trị thông tin các trường đã có mã, không có mã, doanh thu\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00788C\") {\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthu\"]) ? fm(json[\"doanhthu\"]) : 0));\r\n }\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n }\r\n\r\n // load lai table\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('views/windowhoadoncode78',[\r\n \"app\",\r\n \"locale\",\r\n \"models/user\",\r\n \"views/forms/formhoadoncode78\",\r\n \"views/forms/68_huyhoadon\",\r\n \"views/forms/68_huyhoadon_1\",\r\n \"views/forms/68_hoadon_history\",\r\n \"views/forms/lichsuemail\",\r\n \"views/commonHD\",\r\n \"views/Util\",\r\n \"views/forms/bienbanForm\",\r\n \"views/forms/68_hoadon_history_lienquan\",\r\n \"views/DataStorage/DataHoaDon78\"\r\n], function (app, _, user, invoiceForms, huyhoadon, huyhoadon_1, hoadonHistory, his_email, commonHD, Util, bienbanForm, hoadonlq, dataFormHd78) {\r\n \r\n var fm = function (number) {\r\n var k = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: 0,\r\n });\r\n return k(number);\r\n };\r\n var arrayString = [\r\n \"tgtcthue\",\r\n \"tgtcthue10\",\r\n \"tgtcthue5\",\r\n \"tgtcthue0\",\r\n \"tgtcthuek\",\r\n \"tgtcthuekct\",\r\n \"tgtcthuekkk\",\r\n \"ttcktmai\",\r\n \"ttcktmai10\",\r\n \"ttcktmai5\",\r\n \"ttcktmai0\",\r\n \"ttcktmaik\",\r\n \"ttcktmaikct\",\r\n \"ttcktmaikkk\",\r\n \"tgtthue\",\r\n \"tgtthue10\",\r\n \"tgtthue5\",\r\n \"tgtthue0\",\r\n \"tgtthuek\",\r\n \"tgtthuekct\",\r\n \"tgtthuekkk\",\r\n \"tgtttbso\",\r\n \"tgtttbso10\",\r\n \"tgtttbso5\",\r\n \"tgtttbso0\",\r\n \"tgtttbsok\",\r\n \"tgtttbsokct\",\r\n \"tgtttbsokkk\",\r\n \"tkcktmn\",\r\n \"tgtphi\",\r\n \"tgtttbso_last\",\r\n ];\r\n var subChucNang = webix.ui({\r\n view: \"submenu\",\r\n width: 300,\r\n padding: 0,\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var item = this.getItem(id);\r\n\r\n this.hide();\r\n\r\n var fn = Function(\"_\", \"user\", item.on_click);\r\n fn(_, user);\r\n },\r\n },\r\n });\r\n\r\n var subBangKe = webix.ui({\r\n view: \"submenu\",\r\n width: 150,\r\n padding: 0,\r\n data: [\r\n {\r\n id: \"addBangKeHoaDon\",\r\n value: \"Thêm bảng kê\",\r\n },\r\n {\r\n id: \"EditBangKeHoaDon\",\r\n value: \"Sửa bảng kê\",\r\n },\r\n {\r\n id: \"InBangKeHoaDon\",\r\n value: \"In bảng kê\",\r\n },\r\n {\r\n id: \"ImportBangKeHoaDon\",\r\n value: \"Nhận Excel chi tiết\",\r\n }\r\n ],\r\n on: {\r\n onItemClick: function (id, e, node) {\r\n var record = this.getItem(id);\r\n\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (record.id == \"addBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke != null) {\r\n webix.message(\"Hoá đơn đã có bảng kê không thể thêm !\", \"error\");\r\n return;\r\n }\r\n\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n item.shdon = null;\r\n\r\n item.nlap = new Date(item.nlap);\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n invoiceForms.setEditMode(4); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n //$$(\"phi_tab\").hide();\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n //webix.$$(\"infohdon\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"EditBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n // ẩn tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = true;\r\n }\r\n\r\n //set số bảng kê cho form sửa bảng kê\r\n item.shdon = item.checksobangke;\r\n\r\n item.nlap = new Date(item.nlap);\r\n var detailForm = table.$scope.ui(invoiceForms.$ui);\r\n invoiceForms.setEditMode(5); // editmode = 4(add bang ke chi tiet) // edit mode =5 (sửa bảng kê chi tiết)\r\n invoiceForms.initUI(windowconfig);\r\n\r\n $$(\"head-formInvoice\").define(\"template\", \"Bảng kê chi tiết hoá đơn\");\r\n $$(\"head-formInvoice\").refresh();\r\n //set lại title số bảng kê\r\n webix.$$(\"shdon\").config.label = \"Số bảng kê\";\r\n\r\n webix.$$(\"infohdon\").disable();\r\n webix.$$(\"infokhang\").disable();\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValuesBangKe(item, null);\r\n detailForm.show();\r\n webix.$$(\"btnBangKeSave\").show();\r\n webix.$$(\"btnBangKeDelete\").show();\r\n webix.$$(\"btnHoadonSave\").destructor();\r\n webix.$$(\"btnHoadonCQT\").destructor();\r\n }\r\n\r\n if (record.id == \"InBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n // if (item.tthai != \"Chờ ký\") {\r\n // webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n // return;\r\n // }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false&checkBangKe=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n }\r\n\r\n if (record.id == \"ImportBangKeHoaDon\") {\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Vui lòng chọn hoá đơn chờ ký !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.checksobangke == null) {\r\n webix.message(\"Hoá đơn chưa có bảng kê!\", \"error\");\r\n return;\r\n }\r\n\r\n var windowno = app.path[1].params[0];\r\n var excel_id_param = \"\";\r\n\r\n if (windowno != undefined && windowno == \"WIN00781C\") {\r\n excel_id_param = \"EX00018\";\r\n }\r\n else if (windowno != undefined && windowno == \"WIN00782C\") {\r\n excel_id_param = \"EX00019\";\r\n }\r\n else {\r\n webix.message(\"Chức năng nhận Excel chi tiết chưa có mẫu excel phù hợp!\", \"error\");\r\n return;\r\n }\r\n\r\n require([\"views/forms/uploadexcel\"], function (uploadForm) {\r\n uploadForm.$ui.tableId = table.config.id;\r\n var win = table.$scope.ui(uploadForm.$ui);\r\n win.show();\r\n webix.$$(\"uploader\").define(\"formData\", { excel_id: excel_id_param, filename: \"MobiFone Invoice_nhan chi tiet mot bang ke.xlsx\", hdon_id: item.hdon_id });\r\n webix.$$(\"uploader\").hide();\r\n });\r\n }\r\n },\r\n },\r\n });\r\n\r\n webix.ui({\r\n view: \"contextmenu\",\r\n id: \"cmenu78\",\r\n autowidth: true,\r\n //css: { \"background\": \"#ccc !important\" },\r\n data: [\r\n \"Thay thế\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh tăng\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh giảm\",\r\n { $template: \"Separator\" },\r\n \"Điều chỉnh thông tin\",\r\n { $template: \"Separator\" },\r\n // \"Hủy\",\r\n // { $template: \"Separator\" },\r\n \"Lịch sử gửi Email\",\r\n ],\r\n on: {\r\n onItemClick: function (id) {\r\n var self = this;\r\n setTimeout(function () {\r\n var kyHieuHoaDon = {\r\n cctbao_id: $$(\"kyhieu_id\").getValue(),\r\n khieu: $$(\"kyhieu_id\").data.text,\r\n };\r\n\r\n if (self.getItem(id).value == \"Thay thế\") {\r\n commonHD.ExcuteReplaceInvoice(kyHieuHoaDon);\r\n }\r\n if (self.getItem(id).value == \"Điều chỉnh tăng\") {\r\n commonHD.ExcuteIncreaseChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh giảm\") {\r\n commonHD.ExcuteReduceChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Điều chỉnh thông tin\") {\r\n commonHD.ExcuteInfoChangeInvoice(kyHieuHoaDon);\r\n }\r\n\r\n if (self.getItem(id).value == \"Hủy\") {\r\n commonHD.ExcuteCancellingInvoice();\r\n }\r\n\r\n if (self.getItem(id).value == \"Lịch sử gửi Email\") {\r\n var table = webix.$$(\"invoiceViews\");\r\n var selectedItem = table.getSelectedItem();\r\n if (selectedItem == null) {\r\n webix.message(\"Bạn chưa chọn hóa đơn\", \"error\");\r\n return;\r\n }\r\n var detailForm = webix.$$(\"invoiceViews\").$scope.ui(his_email.$ui);\r\n his_email.initUI(selectedItem.id);\r\n detailForm.show();\r\n }\r\n }, 100);\r\n },\r\n },\r\n });\r\n var controls = [\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"REFRESH\") + \"\",\r\n id: \"btnReload\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Thêm (F4)\") + \"\",\r\n id: \"btnPlus\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var cctbao_id = $$(\"kyhieu_id\").getValue();\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.initUINew(cctbao_id);\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.setNewInvoice();\r\n detailForm.show();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(\"app\", vc_window.after_new);\r\n // fn(app);\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Sửa (F3)\") + \"\",\r\n id: \"btnEdit\",\r\n shortcut: \"F3\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n webix.callEvent(\"onLoadError\");\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n //var detailForm = this.$scope.ui(webix.$$(\"main\"));\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn dòng cần sửa !\", \"error\");\r\n return;\r\n }\r\n\r\n if (item.tthai != \"Chờ ký\" && item.tthai != \"Chờ duyệt\" && item.tthai != \"Chờ sinh số\") {\r\n webix.message(\"Hóa đơn đã ký hoặc đã gửi lên cơ quan thuế, không thể sửa !\", \"error\");\r\n return;\r\n }\r\n // main.setEditMode(0);\r\n // main.initUI(windowconfig);\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n item.nlap = new Date(item.nlap);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.setEditMode(2);\r\n if (item.tthdon === 21) {\r\n var ghichu = webix.$$(\"textGhiChu\");\r\n ghichu.setValue(\"Lưu ý: Hóa đơn điều chỉnh giảm thì GHI DẤU ÂM (-) đối với chỉ tiêu bị điều chỉnh giảm (Ví dụ: số lượng, đơn giá..)\");\r\n ghichu.show();\r\n item.note = \"reduce_change_invoice\";\r\n }\r\n invoiceForms.setValues(item, null);\r\n\r\n detailForm.show();\r\n //main.focusFirstElement();\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Xóa (F8)\") + \"\",\r\n id: \"btnDelete\",\r\n shortcut: \"F8\",\r\n //css:\"button_raised\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var lstDataChoose = commonHD.GetHoaDonChon();\r\n var lstDataChooseSort = lstDataChoose.sort(function (a, b) {\r\n return Number(a.shdon) - Number(b.shdon);\r\n });\r\n if (lstDataChooseSort.length === 0) return;\r\n var strHoaDonSelect = \" \";\r\n for (var i = 0; i < lstDataChooseSort.length; i++) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].tthai) &&\r\n lstDataChooseSort[i].tthai != \"Chờ ký\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ sinh số\" &&\r\n lstDataChooseSort[i].tthai != \"Chờ duyệt\"\r\n ) {\r\n webix.message(\"Không thể xóa hóa đơn đã ký,đã gửi !\", \"error\");\r\n return;\r\n }\r\n if (i < lstDataChooseSort.length - 1) {\r\n if (\r\n commonHD.CheckKhacNull(lstDataChooseSort[i].shdon) &&\r\n commonHD.CheckKhacNull(lstDataChooseSort[i + 1].shdon) &&\r\n Number(lstDataChooseSort[i + 1].shdon) - Number(lstDataChooseSort[i].shdon) >= 2\r\n ) {\r\n webix.message(\"Các hóa đơn xóa phải có số hóa đơn liên tiếp nhau\", \"error\");\r\n return;\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon + \",\";\r\n }\r\n } else {\r\n strHoaDonSelect += lstDataChooseSort[i].shdon;\r\n }\r\n }\r\n var url = app.config.host + \"/Invoice68/hoadonXoaNhieu\";\r\n var data_post = { data: lstDataChooseSort };\r\n webix.confirm({\r\n title: \"XÓA HÓA ĐƠN\",\r\n text: \"Bạn có muốn xóa hóa đơn số: \" + strHoaDonSelect + \"\",\r\n ok: \"Có\",\r\n cancel: \"Không\",\r\n callback: function (res) {\r\n if (res) {\r\n webix.extend(table, webix.ProgressBar);\r\n table.disable();\r\n table.showProgress();\r\n\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(url, data_post, {\r\n error: function (text, data, XmlHttpRequest) {\r\n table.enable();\r\n table.hideProgress();\r\n // var json = JSON.parse(text);\r\n // webix.message(json.ExceptionMessage, \"error\");\r\n webix.message(text + XmlHttpRequest, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var result = JSON.parse(text);\r\n\r\n if (result.hasOwnProperty(\"error\")) {\r\n webix.message({ type: \"error\", text: result.error });\r\n table.enable();\r\n table.hideProgress();\r\n return;\r\n } else {\r\n table.enable();\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.hideProgress();\r\n }\r\n },\r\n });\r\n }\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"COPY\") + \"\",\r\n id: \"btnCopy\",\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // icon: \"far fa-files-o\",\r\n // label: _(\"COPY\"),\r\n // width: 85,\r\n // css: \"webix_secondary\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n\r\n if (item == null) {\r\n webix.message(\"Bạn chưa chọn dòng dữ liệu\", \"error\");\r\n return;\r\n }\r\n // var vc_window = windowconfig[\"data\"][0];\r\n // windowform.$ui.id = vc_window.code;\r\n\r\n // hiện tab_phi\r\n if (windowconfig[\"data\"][0].Tabs[2] != undefined) {\r\n windowconfig[\"data\"][0].Tabs[2].hidden = false;\r\n }\r\n\r\n var detailForm = this.$scope.ui(invoiceForms.$ui);\r\n item.mccqthue = \"\";\r\n item.shdon = null;\r\n invoiceForms.setEditMode(1);\r\n invoiceForms.initUI(windowconfig);\r\n invoiceForms.copyValues(item);\r\n detailForm.show();\r\n\r\n // windowform.focusFirstElement();\r\n // if (vc_window.after_new != null) {\r\n // var fn = Function(vc_window.after_new);\r\n // fn();\r\n // }\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"Bảng kê\") + \"\",\r\n id: \"btnBangKeOption\",\r\n click: function () {\r\n subBangKe.show(webix.$$(\"btnBangKeOption\").$view);\r\n },\r\n },\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + _(\"PRINT\") + \"\",\r\n id: \"btnPrint\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=false\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n /*\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 100,\r\n label: ' ' + '' + \"In vé\" + \"\",\r\n id: \"btnPrintVe\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n \r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n app.config.host + \"/Invoice68/inMauVe\",\r\n {\r\n id: item.id,\r\n type: \"0\",\r\n },\r\n {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"image/jpeg\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n }\r\n );\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n */\r\n {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"In chuyển đổi\") + \"\",\r\n id: \"btnPrintConvert\",\r\n on: {\r\n onClick: function () {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n if (item == null || item == undefined) {\r\n webix.message(\"Bạn chưa chọn hóa đơn cần in !\", \"error\");\r\n return;\r\n }\r\n //webix.message(\"Chưa có mẫu in ...\", \"error\");\r\n // var rpParameter = null;\r\n var box = webix.modalbox({\r\n title: \"Đang in hóa đơn ....\",\r\n text: \"

\",\r\n width: 350,\r\n height: 200,\r\n });\r\n\r\n var newWin = window.open();\r\n var html =\r\n \"Hóa đơn điện tử MobiFone Invoice\" +\r\n '' +\r\n '' +\r\n '
Đang tải dữ liệu ...

';\r\n newWin.document.write(html);\r\n\r\n webix\r\n .ajax()\r\n .response(\"arraybuffer\")\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(app.config.host + \"/Invoice68/inHoadon?id=\" + item.id + \"&type=PDF&inchuyendoi=true\", {\r\n error: function (text, data, XmlHttpRequest) {\r\n webix.modalbox.hide(box);\r\n webix.message(XmlHttpRequest.statusText, \"error\");\r\n },\r\n success: function (text, data, XmlHttpRequest) {\r\n var file = new Blob([data], { type: \"application/pdf\" });\r\n var fileURL = URL.createObjectURL(file);\r\n //window.open(fileURL, '_blank');\r\n webix.modalbox.hide(box);\r\n newWin.location = fileURL;\r\n },\r\n });\r\n },\r\n },\r\n click: function () {\r\n var self = this;\r\n commonHD.CommonOnclickTaskOfHD(self);\r\n },\r\n },\r\n {},\r\n {},\r\n {},\r\n {},\r\n {},\r\n ];\r\n\r\n var grid = {\r\n rows: [\r\n {\r\n view: \"datatable\",\r\n id: \"invoiceViews\",\r\n select: true,\r\n resizeColumn: true,\r\n fixedRowHeight: false,\r\n // leftSplit: 8,\r\n // rightSplit: 1,\r\n rowLineHeight: 25,\r\n rowHeight: 25,\r\n tooltip: true,\r\n scrollX: true,\r\n scroll: true,\r\n //autowidth: true,\r\n onClick: {\r\n ShowHistory: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonHistory.$ui);\r\n var hdon_id = cell.row;\r\n hoadonHistory.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n ShowHistory2: function (event, cell, target) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var win = table.$scope.ui(hoadonlq.$ui);\r\n var hdon_id = cell.row;\r\n hoadonlq.setEditMode(hdon_id);\r\n win.show();\r\n },\r\n },\r\n on: {\r\n \"data->onStoreUpdated\": function () {\r\n this.data.each(function (obj, i) {\r\n obj.stt = i + 1;\r\n });\r\n },\r\n onItemClick: function (id) {\r\n var table = webix.$$(\"invoiceViews\");\r\n var item = table.getSelectedItem();\r\n item.chon = !item.chon;\r\n table.updateItem(id.row, item);\r\n },\r\n // onClick: function (e) {\r\n // // var view = $$(e);\r\n // // if (!view || !view.getFormView || view.getFormView() != $$(\"invoiceDate\"))\r\n // // webix.confirm(\"The changes was not saved\");\r\n // },\r\n onItemDblClick: function (id, e, node) {\r\n var btnEdit = $$(\"btnEdit\");\r\n btnEdit.callEvent(\"onClick\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n $$(\"cmenu78\").refresh();\r\n $$(\"cmenu78\").sizeToContent();\r\n $$(\"cmenu78\").attachTo($$(\"invoiceViews\"));\r\n },\r\n onColumnResize: function () {\r\n // this.adjustRowHeight(\"ten_loai\", true);\r\n // this.render();\r\n },\r\n onSubViewCreate: function (view, item) {\r\n var subView = view;\r\n\r\n if (subView != null) {\r\n var tableDetail = webix.$$(\"hoadon68_chitiet_view\");\r\n var url = app.config.host + \"/Invoice68/GetDataInvoiceDetail?id=\" + item.id;\r\n tableDetail.clearAll();\r\n var urlget = app.config.host + \"/Invoice68/GetDecimalPlace?ma_nt=\" + item[\"dvtte\"];\r\n webix\r\n .ajax()\r\n .sync()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .get(urlget, function (text) {\r\n var arr = JSON.parse(text);\r\n var arrayString_chitiet = [\"sluong\", \"dgia\", \"thtien\", \"stckhau\", \"tthue\", \"tgtien\", \"tienphi\"];\r\n for (var i = 0; i < arrayString_chitiet.length; i++) {\r\n var field_name = \"\";\r\n switch (arrayString_chitiet[i]) {\r\n case \"sluong\":\r\n field_name = \"quantity_decimal\";\r\n break;\r\n case \"dgia\":\r\n field_name = \"price_decimal\";\r\n break;\r\n case \"thtien\":\r\n field_name = \"amount_without_vat_decimal\";\r\n break;\r\n case \"stckhau\":\r\n field_name = \"price_discount\";\r\n break;\r\n case \"tthue\":\r\n field_name = \"tax_price\";\r\n break;\r\n case \"tgtien\":\r\n field_name = \"total_amount_decimal\";\r\n break;\r\n case \"tienphi\":\r\n field_name = \"fee_price\";\r\n break;\r\n }\r\n var decimal_place = Array(Number(arr[0][field_name]) + 1).join(\"9\");\r\n var decimal_format = Number(arr[0][field_name]);\r\n var format_numeric = {\r\n //maximumValue: Number(\"999999999999.\" + decimal_place),\r\n //minValue: Number(\"-999999999999.\" + decimal_place),\r\n decimalPlaces: Number(decimal_format),\r\n };\r\n var formatSoDefault = {\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: decimal_format,\r\n };\r\n var formatSo = webix.Number.numToStr(formatSoDefault);\r\n\r\n var format_config = tableDetail.getColumnConfig(arrayString_chitiet[i]);\r\n\r\n format_config.format = formatSo;\r\n format_config.numericConfig = format_numeric;\r\n }\r\n });\r\n\r\n tableDetail.load(url);\r\n\r\n var data = tableDetail.serialize();\r\n console.log(data);\r\n }\r\n },\r\n },\r\n subview: {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: [],\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n columns: col,\r\n pager: \"pagerA\",\r\n type: {\r\n rcheckbox: function (obj, common, value, config) {\r\n var checked = value == config.checkValue ? 'checked=\"true\"' : \"\";\r\n return \"\";\r\n },\r\n },\r\n },\r\n {\r\n cols: [\r\n {\r\n id: \"pagerA\",\r\n view: \"pager\",\r\n size: 50,\r\n group: 5,\r\n width: 400,\r\n template: function (data, common) {\r\n var html = \" Trang:\" + (data.page + 1) + \"/\" + data.limit + \" \";\r\n var htmlSoBanGhi = \" Tổng số bản ghi:\" + data.count + \" \";\r\n return common.first() + common.prev() + html + common.next() + common.last() + htmlSoBanGhi;\r\n },\r\n },\r\n {\r\n view: \"combo\",\r\n label: \"Số lượng item/1 page: \",\r\n labelWidth: 150,\r\n value: \"50\",\r\n options: [\"50\", \"100\", \"200\", \"300\", \"500\", \"1000\"],\r\n width: 400,\r\n on: {\r\n onChange: function (newv, oldv) {\r\n webix.message(\"change page size to \" + newv);\r\n $$(\"pagerA\").config.size = newv * 1;\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"datafetch\", newv);\r\n table.clearAll();\r\n table.load(table.config.url);\r\n table.getColumnConfig;\r\n },\r\n },\r\n },\r\n {},\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n var mini_dashboard = {\r\n type: \"clean\",\r\n borderless: true,\r\n cols: [\r\n {\r\n id: \"choCapMa\",\r\n name: \"choCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"choCapMaError\",\r\n name: \"choCapMaError\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"duocCapMa\",\r\n name: \"duocCapMa\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"chuaGui\",\r\n name: \"chuaGui\",\r\n view: \"label\",\r\n },\r\n {\r\n id: \"doanhThu\",\r\n name: \"doanhThu\",\r\n view: \"label\",\r\n },\r\n ],\r\n };\r\n\r\n var layout = {\r\n id: \"main\",\r\n css: \"frmView\",\r\n rows: [\r\n {\r\n rows: [mini_dashboard],\r\n },\r\n {\r\n id: \"tlbMain\",\r\n height: 39,\r\n css: \"btnControl\",\r\n margin: 0,\r\n borderless: true,\r\n type: \"toolbar\",\r\n cols: controls,\r\n },\r\n {\r\n rows: [grid],\r\n },\r\n ],\r\n };\r\n\r\n var col = [];\r\n var sub_col = [];\r\n var windowconfig = null;\r\n var kihieuRefId = null;\r\n\r\n var initComponents = function (_windowconfig) {\r\n // console.log('window_config',_windowconfig);\r\n var k = Object.keys(_windowconfig[\"data\"][0][\"Tabs\"]).length;\r\n //console.log(k);\r\n var vc_window = _windowconfig[\"data\"][0];\r\n webix.$$(\"title\").parse({ title: vc_window[\"name\"], details: \"Lập hóa đơn ->\" + vc_window[\"name\"], width: 500 });\r\n var tabs = vc_window.Tabs;\r\n var codewindow = app.path[1].params[0];\r\n var windowno = vc_window.window_id;\r\n kihieuRefId = \"RF00054\";\r\n col = [];\r\n sub_col = [];\r\n col.push({\r\n id: \"chon\",\r\n header: [{ text: \"\", content: \"masterCheckbox\" }],\r\n width: 30,\r\n checkValue: true,\r\n uncheckValue: false,\r\n template: \"{common.checkbox()}\",\r\n });\r\n col.push({\r\n id: \"subRowMain\",\r\n header: \" \",\r\n template: \"{common.subrow()}\",\r\n width: 40,\r\n // height: 25\r\n }); for (var i = 0; i < tabs.length; i++) {\r\n var tab = tabs[i];\r\n if (tab.tab_type === \"Master\") {\r\n var masterTab = tabs[i];\r\n for (var j = 0; j < tabs[i].Fields.length; j++) {\r\n var field = masterTab.Fields[j];\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n var item = {\r\n id: field.column_name,\r\n header: _(field.column_name),\r\n columnType: field.column_type,\r\n columnAlias: field.column_alias,\r\n template: field.template,\r\n columnFormat: field.format,\r\n //adjust: true,\r\n };\r\n if (item.template !== undefined && item.template !== null && item.template.includes(\"function\")) item.template = Util.StringToFunc(item.template);\r\n //if(item.format!== undefined && item.format!== null && item.format.includes(\"function\")) item.template = Util.StringToFunc(item.format);\r\n if (field.caption != null) {\r\n item.header = _(field.caption);\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n item.css = { \"text-align\": \"right\" };\r\n item.format = webix.Number.numToStr({\r\n groupDelimiter: \",\",\r\n groupSize: 3,\r\n decimalDelimiter: \".\",\r\n decimalSize: field.data_decimal,\r\n });\r\n }\r\n\r\n if (field.type_filter != null) {\r\n if (field.type_filter != \"\") {\r\n item.header = [_(item.header), { content: field.type_filter }];\r\n }\r\n }\r\n\r\n if (field.type_editor == \"combo\") {\r\n item.editor = field.type_editor;\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.ref_id;\r\n }\r\n\r\n if (field.type_filter == \"serverMultiSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n if (field.type_filter == \"serverSelectFilter\") {\r\n item.options = app.config.host + \"/System/GetDataByReferencesId?id=\" + field.value_filter;\r\n }\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n item.format = function (text) {\r\n var format = webix.Date.dateToStr(this.columnFormat);\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.type_editor == \"checkbox\") {\r\n if (field.column_type == \"boolean\") {\r\n item.checkValue = true;\r\n item.uncheckValue = false;\r\n }\r\n\r\n item.template = function (obj, common, value) {\r\n if (value == true || value == 1) return \"
\";\r\n else return \"
\";\r\n };\r\n }\r\n\r\n if (field.column_width == null) {\r\n //item.fillspace = true;\r\n } else {\r\n item.width = field.column_width;\r\n }\r\n\r\n col.push(item);\r\n }\r\n }\r\n if (tab.tab_type == \"Detail\") {\r\n for (var j = 0; j < tab.Fields.length; j++) {\r\n var field = tab.Fields[j];\r\n\r\n if (field.hide_in_grid == true) {\r\n continue;\r\n }\r\n\r\n var subCol = {\r\n id: field.column_name,\r\n header: field.caption == null ? _(field.column_name) : _(field.caption),\r\n hidden: field.hide_in_grid,\r\n };\r\n\r\n if (field.column_type == \"date\" || field.column_type == \"datetime\") {\r\n subCol.format = function (text) {\r\n var format = webix.Date.dateToStr(\"%d/%m/%Y\");\r\n text = removeTimeZoneT(text);\r\n return format(text);\r\n };\r\n }\r\n\r\n if (field.column_type == \"numeric\") {\r\n subCol.css = { \"text-align\": \"right\" };\r\n }\r\n\r\n if (field.column_width == null) {\r\n subCol.fillspace = true;\r\n } else {\r\n subCol.width = field.column_width;\r\n }\r\n\r\n sub_col.push(subCol);\r\n }\r\n }\r\n }\r\n var table = webix.$$(\"invoiceViews\");\r\n table.clearAll();\r\n var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 255,\r\n css: \"subInvoice\",\r\n scrollX: true,\r\n // tabbar: {\r\n // width: 200\r\n // },\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n cells: [\r\n {\r\n header: \"Chi tiết hóa đơn\",\r\n select: \"cell\",\r\n body: {\r\n view: \"datatable\",\r\n resizeColumn: true,\r\n margin: 10,\r\n id: \"hoadon68_chitiet_view\",\r\n height: 200,\r\n columns: sub_col,\r\n on: {\r\n onBeforeLoad: function () {\r\n this.showOverlay(_(\"LOADING\") + \"...\");\r\n },\r\n onAfterLoad: function () {\r\n this.hideOverlay();\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n /*var subview = {\r\n borderless: true,\r\n view: \"tabview\",\r\n height: 200,\r\n scrollX: true,\r\n cells: sub_col,\r\n multiview: {\r\n fitBiggest: true,\r\n },\r\n };*/\r\n table.define(\"subview\", subview);\r\n $$(\"head-title\").show();\r\n $$(\"head-title\").removeView(\"paramKH\");\r\n $$(\"head-title\").addView(\r\n {\r\n id: \"paramKH\",\r\n view: \"toolbar\",\r\n css: { \"background-color\": \"#f5f5f5 !important\" },\r\n borderless: true,\r\n height: 35,\r\n cols: [],\r\n },\r\n 1\r\n );\r\n if (vc_window.WinParams != undefined && vc_window.WinParams != null) {\r\n for (var i = 0; i < vc_window.WinParams.length; i++) {\r\n var item = vc_window.WinParams[i];\r\n var comp = {\r\n id: item.value_field,\r\n view: item.type_editor,\r\n width: item.width,\r\n label: _(item.caption),\r\n value_field: item.value_field,\r\n isDefault: item.has_default,\r\n on: {\r\n },\r\n };\r\n\r\n if (comp.view == \"combo\") {\r\n comp.options = {\r\n body: {\r\n comboId: comp.id,\r\n isDefault: item.has_default,\r\n url: app.config.host + \"/System/GetDataByReferencesId?id=\" + item.wb_references_id,\r\n ready: function () {\r\n if (this.config.isDefault == \"C\") {\r\n var count = this.count();\r\n if (count > 0) {\r\n var combo = webix.$$(this.config.comboId);\r\n combo.setValue(this.getFirstId());\r\n }\r\n }\r\n },\r\n },\r\n };\r\n\r\n comp.on.onChange = function (newv, oldv) {\r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n };\r\n }\r\n\r\n if (comp.view == 'search') {\r\n // Tạm thời fix code cho riêng trường th số hoá đơn này, cơ chế đặt view id này cần xem lại\r\n if(item.value_field == 'shdon') {\r\n comp.id = 'tlbparams_shdon';\r\n comp.placeholder = \"VD: 1-10,21-30,41-50\";\r\n }\r\n var validateFunc = function() {\r\n var value = $$(comp.id).getValue();\r\n if(item.value_field == 'shdon' && value && value != \"\") {\r\n var regex = /^\\d+(-\\d+)?(,\\d+(-\\d+)?)*$/;\r\n return regex.test(value);\r\n }\r\n return true;\r\n }\r\n comp.on.onSearchIconClick = function () {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n comp.on.onEnter = function (code, e) {\r\n if(validateFunc()) { \r\n var table = $$(\"invoiceViews\");\r\n table.clearAll();\r\n table.load(table.config.url);\r\n } else {\r\n webix.message(\"Không đúng định dạng: x,x hoặc x-x,x-x (x là số)\", \"error\");\r\n }\r\n };\r\n }\r\n\r\n $$(\"paramKH\").removeView(comp.id);\r\n $$(\"paramKH\").addView(comp);\r\n }\r\n\r\n\r\n // parentToolBar.addView(toolBarParams);\r\n }\r\n\r\n table.config.columns = col;\r\n table.refreshColumns();\r\n table.define(\"url\", loadUrl);\r\n table.getParentView().getParentView().getParentView().enable();\r\n table.getParentView().getParentView().getParentView().hideProgress();\r\n };\r\n\r\n var loadUrl = {\r\n $proxy: true,\r\n load: function (view, callback, params) {\r\n var tlbparam_s = [];\r\n //get count list combo ký hiệu\r\n var url = app.config.host + \"/Invoice68/GetDataInvoice\";\r\n if (params == null) {\r\n commonHD.clear_filter(view);\r\n var table = $$(\"invoiceViews\");\r\n table.config.params = null;\r\n url = url + \"?start=0&count=\" + view.config.datafetch + \"&continue=null&filter=null\";\r\n } else {\r\n var table = $$(\"invoiceViews\");\r\n table.define(\"params\", params);\r\n webix.storage.local.put(\"currentFilter\", params.filter);\r\n url = url + \"?start=\" + params.start + \"&count=\" + params.count + \"&continue=\" + params.continue;\r\n\r\n if (params.filter != null) {\r\n var array = [];\r\n for (var property in params.filter) {\r\n var column = view.getColumnConfig(property);\r\n var item = {\r\n columnName: property,\r\n columnType: column.columnType,\r\n value: params.filter[property],\r\n filterType: column.header[1].content,\r\n };\r\n\r\n /*if (item.filterType == \"serverDateRangeFilter\") {\r\n var startDate = item.value.start;\r\n if (startDate !== null && startDate !== undefined) {\r\n var hoursDiff = startDate.getHours() - startDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (startDate.getHours() - startDate.getTimezoneOffset()) % 60;\r\n startDate.setHours(hoursDiff);\r\n startDate.setMinutes(minutesDiff);\r\n item.value.start = startDate;\r\n }\r\n\r\n var endDate = item.value.end;\r\n if (endDate !== null && endDate !== undefined) {\r\n var hoursDiff = endDate.getHours() - endDate.getTimezoneOffset() / 60;\r\n var minutesDiff = (endDate.getHours() - endDate.getTimezoneOffset()) % 60;\r\n endDate.setHours(hoursDiff);\r\n endDate.setMinutes(minutesDiff);\r\n item.value.end = endDate;\r\n }\r\n }*/\r\n\r\n if (params.filter[property] != null && params.filter[property] != \"\") {\r\n array.push(item);\r\n }\r\n }\r\n\r\n //console.log(JSON.stringify(array));\r\n url = url + \"&filter=\" + encodeURIComponent(JSON.stringify(array));\r\n }\r\n url = url + \"&filter=null\";\r\n }\r\n var tlbParams = $$(\"paramKH\");\r\n\r\n if (tlbParams !== undefined) {\r\n var childViews = tlbParams.getChildViews();\r\n\r\n var parameters = [];\r\n\r\n for (var i = 0; i < childViews.length; i++) {\r\n // Xử lý field name \r\n var child = childViews[i];\r\n var valueField = child.config.value_field;\r\n if(valueField == \"kyhieu_id\") {\r\n valueField = \"cctbao_id\"\r\n\r\n if(!child.getValue() || child.getValue() == \"\") {\r\n return;\r\n }\r\n }\r\n\r\n var item = {\r\n columnName: valueField,\r\n value: child.getValue(),\r\n };\r\n if (item.value !== \"\") {\r\n parameters.push(item);\r\n }\r\n //parameters.push(item);\r\n }\r\n tlbparam_s = parameters;\r\n url = url + \"&tlbparam=\" + JSON.stringify(parameters);\r\n } else {\r\n url = url + \"&tlbparam=null\";\r\n }\r\n\r\n // Lấy giá trị thông tin các trường đã có mã, không có mã, doanh thu\r\n var urlMiniDashBoard = url.replace(\"GetDataInvoice\", \"GetDataInvoiceThongTin\");\r\n webix.ajax().get(urlMiniDashBoard, function (text) {\r\n var json = JSON.parse(text);\r\n var windowno = app.path[1].params[0];\r\n if (windowno != \"WIN00788C\") {\r\n $$(\"choCapMa\").setValue(\"Số hóa đơn chờ cấp mã: \" + json[\"chocapma\"]);\r\n $$(\"choCapMaError\").setValue(\"Số hóa đơn CQT không cấp mã: \" + json[\"chocapmaerror\"]);\r\n $$(\"duocCapMa\").setValue(\"Số hóa đơn được cấp mã: \" + json[\"duoccapma\"]);\r\n $$(\"chuaGui\").setValue(\"Số hóa đơn chưa ký gửi CQT: \" + json[\"chuagui\"]);\r\n $$(\"doanhThu\").setValue(\"Doanh thu xuất hóa đơn: \" + (fm(json[\"doanhthu\"]) ? fm(json[\"doanhthu\"]) : 0));\r\n }\r\n });\r\n\r\n webix.ajax(url, callback, view);\r\n },\r\n };\r\n var buttons = [];\r\n var initUI = function () {\r\n var windowno = app.path[1].params[0];\r\n var url = app.config.host + \"/System/ExecuteCommand\";\r\n webix\r\n .ajax()\r\n .headers({ \"Content-type\": \"application/json\" })\r\n .post(\r\n url,\r\n {\r\n command: \"CM00002\",\r\n parameter: {\r\n window_id: windowno,\r\n },\r\n },\r\n function (text) {\r\n var json = JSON.parse(text);\r\n\r\n if (buttons.length > 0) {\r\n for (var i = 0; i < buttons.length; i++) {\r\n var item = buttons[i];\r\n $$(\"tlbMain\").removeView(item.id);\r\n }\r\n }\r\n\r\n buttons = [];\r\n var menus = [];\r\n\r\n var stt = controls.filter(function (x) {\r\n return x.id !== undefined;\r\n }).length;\r\n\r\n for (var i = 0; i < json.length; i++) {\r\n var item = json[i];\r\n\r\n if (item.is_group_function == \"C\") {\r\n if (item.hidden != 1) {\r\n menus.push({\r\n id: item.name,\r\n value: _(item.caption),\r\n on_click: item.on_click,\r\n });\r\n }\r\n } else {\r\n if (item.hidden != 1) {\r\n var fn = new Function(item.on_click);\r\n\r\n var button = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: item.width,\r\n label: ' ' + '' + _(item.caption) + \"\",\r\n id: item.name,\r\n // label: _(item.caption),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-\" + item.icon,\r\n // width: item.width,\r\n click: fn,\r\n };\r\n\r\n buttons.push(button);\r\n $$(\"tlbMain\").addView(button, stt);\r\n\r\n stt = stt + 1;\r\n }\r\n }\r\n }\r\n $$(\"tlbMain\").removeView(\"btnChucNang\");\r\n if (menus.length > 0) {\r\n subChucNang.clearAll();\r\n subChucNang.parse(menus, \"json\");\r\n var btnChucNang = {\r\n view: \"button\",\r\n type: \"htmlbutton\",\r\n width: 120,\r\n label: ' ' + '' + _(\"CHUC_NANG\") + \"\",\r\n id: \"btnChucNang\",\r\n // label: _(\"CHUC_NANG\"),\r\n // view: \"button\",\r\n // type: \"icon\",\r\n // css: \"webix_secondary\",\r\n // icon: \"fas fa-tasks\",\r\n // width: 100,\r\n click: function () {\r\n subChucNang.show(webix.$$(\"btnChucNang\").$view);\r\n },\r\n };\r\n $$(\"tlbMain\").addView(btnChucNang, stt);\r\n }\r\n }\r\n );\r\n col = [];\r\n sub_col = [];\r\n\r\n var url = app.config.host + \"/System/GetConfigWinByNo?id=\" + windowno;\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().disable();\r\n webix.$$(\"invoiceViews\").getParentView().getParentView().getParentView().showProgress();\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n\r\n if (app_cache[windowno] != null) {\r\n windowconfig = app_cache[windowno];\r\n initComponents(windowconfig);\r\n } //không có cache\r\n else {\r\n webix.ajax(url, function (text, xml, xhr) {\r\n var rp = JSON.parse(text);\r\n windowconfig = rp;\r\n\r\n var app_cache = webix.storage.local.get(\"APP_CACHE\");\r\n app_cache[windowno] = windowconfig;\r\n\r\n webix.storage.local.put(\"APP_CACHE\", app_cache);\r\n initComponents(windowconfig);\r\n });\r\n }\r\n };\r\n return {\r\n $ui: layout,\r\n $oninit: function (view, $scope) {\r\n webix.extend(view, webix.ProgressBar);\r\n $scope.on(app, \"dataChangedInvoie68\", function (editmode, item) {\r\n var table = webix.$$(\"invoiceViews\");\r\n if(dataFormHd78) {\r\n var khID = dataFormHd78.GetData(\"KHID\");\r\n if(khID) {\r\n webix.$$(\"kyhieu_id\").setValue(khID);\r\n dataFormHd78.ClearData(\"KHID\");\r\n } \r\n } \r\n\r\n table.clearAll();\r\n table.load(table.config.url);\r\n //if (editmode == 1) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n\r\n //if (editmode == 2) {\r\n // table.clearAll();\r\n // table.load(table.config.url);\r\n //}\r\n });\r\n },\r\n $onurlchange: function (ui, name, url, scope) {\r\n initUI();\r\n },\r\n };\r\n});\r\n\ndefine('locales/en',[], function () {\r\n return {\r\n \"TUCHOI\":\"Reject\",\r\n \"them\": \"Add\",\r\n \"sua\": \"Edit\",\r\n \"dangnhap\": \"Login\",\r\n \"DONVI\": \"Company\",\r\n \"DANGKY\": \"Register\",\r\n \"QUENMK\": \"Forgot password\",\r\n \"USERNAME\": \"User name\",\r\n \"PASSWORD\": \"Pass word\",\r\n \"REMEMBERME\": \"Rememberme\",\r\n \"DANGNHAP\": \"Login\",\r\n \"DANGNHAPSSO\": \"SSO\"\r\n };\r\n});\ndefine('locales/ko',[], function () {\r\n return {\r\n \"DONVI\": \"회사\",\r\n \"DANGKY\": \"등록\",\r\n \"QUENMK\": \"비밀 번호 잊어 버려\",\r\n \"THEM\": \"더하다\",\r\n \"SUA\": \"편집하다\",\r\n \"XOA\": \"지우다\",\r\n \"COPY\": \"부\",\r\n \"USERNAME\": \"사용자 이름\",\r\n \"PASSWORD\": \"암호\",\r\n \"REMEMBERME\": \"생각해 내다\",\r\n \"DANGNHAP\": \"로그인\",\r\n \"DANGNHAPSSO\": \"SSO\",\r\n \"MAU_HD\": \"Mẫu hóa đơn\",\r\n \"KY_HIEU\": \"Ký hiệu\",\r\n \"MAUIN\": \"Mẫu in\",\r\n \"SO_HDON\": \"Số hóa đơn\",\r\n \"NGAY_HDON\": \"Ngày hóa đơn\",\r\n \"TEN_DON_VI\": \"Tên đơn vị\",\r\n \"TEN_NGUOI_MUA\": \"Tên người mua\",\r\n \"SO_DH\": \"Số đơn hàng\",\r\n \"MA_DT\": \"Mã đối tượng\",\r\n \"MS_THUE\": \"Mã số thuế\",\r\n \"DIA_CHI\": \"Địa chỉ\",\r\n \"TK_BEN_MUA\": \"TK Bên Mua\",\r\n \"NGAN_HANG_BEN_MUA\": \"NH Bên Mua\",\r\n \"TK_BEN_BAN\": \"TK Bên Bán\",\r\n \"NGAN_HANG_BEN_BAN\": \"NH Bên Bán\",\r\n \"HT_TT\": \"HT thanh toán\",\r\n \"PRINT\": \"Xem/In\",\r\n \"MA_HV\": \"Mã hàng\",\r\n \"TEN_HV\": \"Tên hàng\",\r\n \"DVT\": \"ĐVT\",\r\n \"SO_LUONG\": \"Số lượng\",\r\n \"GIA\": \"Giá\",\r\n \"TIEN\": \"Tiền\",\r\n \"PT_CK\": \"% CK\",\r\n \"TIEN_CK\": \"Tiền CK\",\r\n \"MA_THUE\": \"Mã thuế\",\r\n \"TIEN_THUE\": \"Tiền thuế\",\r\n \"THANH_TIEN\": \"Thành tiền\",\r\n \"MA\": \"Mã\",\r\n \"TEN\": \"Tên\",\r\n \"DUYET\": \"Duyệt\",\r\n \"PHAN_QUYEN\": \"Phân quyền\",\r\n \"CHUC_NANG\": \"Chức năng\",\r\n \"BAO_CAO\": \"Báo cáo\",\r\n \"TEN_CHUC_NANG\": \"Tên chức năng\",\r\n \"TEN_MAU\": \"Tên mẫu\",\r\n \"LOAI_HOA_DON\": \"Loại hóa đơn\",\r\n \"HINH_THUC\": \"Hình thức\",\r\n \"MAU_SO\": \"Mẫu số\",\r\n \"SO_LIEN\": \"Số liên\",\r\n \"DA_KY\": \"Đã ký\",\r\n \"TRANG_THAI_MAU\": \"Trạng thái mẫu\",\r\n \"NGAY_TB\": \"Ngày thông báo\",\r\n \"NGUOI_DAI_DIEN_PL\": \"Người đại diện pháp luật\",\r\n \"DON_VI_CHU_QUAN\": \"Đơn vị chủ quản\",\r\n \"CO_QUAN_THUE_NHAN_TB\": \"Cơ quan thuế nhận thông báo\",\r\n \"TRANG_THAI\": \"Trạng thái\",\r\n \"MA_LOAI\": \"Mã loại\",\r\n \"TEN_LOAI\": \"Tên loại\",\r\n \"TU_SO\": \"Từ số\",\r\n \"DEN_SO\": \"Đến số\",\r\n \"NGAY_BD_SD\": \"Ngày bắt đầu sử dụng\",\r\n \"DN_IN\": \"Doanh nghiệp In/Cung cấp phần mềm\",\r\n \"MAU_HDON\": \"Mẫu hóa đơn\",\r\n \"TEN_DT\": \"Tên đối tượng\",\r\n \"CHUC_VU\": \"Chức vụ\",\r\n \"DIEN_THOAI\": \"Điện thoại\",\r\n \"DAI_DIEN\": \"Đại diện\",\r\n \"SU_DUNG\": \"Sử dụng\",\r\n \"EXPORT_XML\": \"Kết xuất XML\",\r\n \"NGUOI_KY\": \"Người ký\",\r\n \"SO_SERIAL\": \"Số serial\",\r\n \"MA_DVT\": \"Mã ĐVT\",\r\n \"TEN_DVT\": \"Tên ĐVT\",\r\n \"CHU_KY_SO\": \"Chữ ký số\",\r\n \"CHON\": \"Chọn\",\r\n \"TINH_THANH\": \"Tỉnh thành\",\r\n \"NGAY_BD_NAM_TC\": \"Ngày bắt đầu năm tài chính\",\r\n \"TAI_KHOAN\": \"Tài khoản\",\r\n \"TAI_NH\": \"Tại ngân hàng\",\r\n \"EMAIL\": \"Email\",\r\n \"SUBJECTNAME\": \"Chủ thể\",\r\n \"SIGN\": \"Ký\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"DC_DINH_DANH\": \"Điều chỉnh định danh\",\r\n \"SOVB\": \"Số văn bản\",\r\n \"NGAYVB\": \"Ngày văn bản\",\r\n \"DIEN_GIAI\": \"Diễn giải\",\r\n \"SEARCH\": \"Tìm kiếm\",\r\n \"TIM_CHI_TIET\": \"Tìm chi tiết\",\r\n \"NGUOI_LAP\": \"Người lập\",\r\n \"TRANG_THAI_HDON\": \"Trạng thái hóa đơn\",\r\n \"TU_NGAY\": \"Từ ngày\",\r\n \"DEN_NGAY\": \"Đến ngày\",\r\n \"NGUOI_NHAN\": \"Người nhận\",\r\n \"TIEU_DE\": \"Tiêu đề\",\r\n \"NOI_DUNG\": \"Nội dung\",\r\n \"SEND_EMAIL_INVOICE\": \"Gửi hóa đơn qua email\",\r\n \"KHUYEN_MAI\": \"Khuyến mãi\",\r\n \"TIEU_THUC\": \"Tiêu thức\",\r\n \"DC_TANG\": \"Điều chỉnh tăng\",\r\n \"DC_GIAM\": \"Điều chỉnh giảm\",\r\n \"HDON_THAY_THE\": \"Hóa đơn thay thế\",\r\n \"REFRESH\": \"Tải dữ liệu\",\r\n \"EXPORT\": \"Kết xuất\",\r\n \"EXPORT_EXCEL\": \"Kết xuất Excel\",\r\n \"XOA_BO\": \"Xóa bỏ\",\r\n \"MST_BEN_BAN\": \"MST Bên bán\",\r\n \"MST_BEN_MUA\": \"MST Bên mua\",\r\n \"HDON_CT_BRA\": \"Hóa đơn chứng từ bán ra\",\r\n \"TIEN_TRUOC_THUE\": \"Tiền trước thuế\",\r\n \"TIEN_THUE_10\": \"10%\",\r\n \"TIEN_THUE_05\": \"5%\",\r\n \"TIEN_THUE_00\": \"0%\",\r\n \"KHONG_CHIU_THUE\": \"Không chịu thuế\",\r\n \"KHONG_KK\": \"Không kê khai\",\r\n \"GHI_CHU\": \"Ghi chú\",\r\n \"IMPORT_EXCEL\": \"Nhận Excel\",\r\n \"NGUOI_GUI\": \"Người gửi\",\r\n \"KY_HOA_DON_CHO_KY\": \"Ký hóa đơn chờ ký\",\r\n \"SMTP_SERVER\": \"SMTP Server\",\r\n \"SMTP_PORT\": \"SMTP Port\",\r\n \"enableSSL\": \"Enable SSL\",\r\n \"LOAI\": \"Loại\",\r\n \"SEND_EMAIL_CONFIRM\": \"Email yêu cầu ký xác nhận\",\r\n \"NHOM\": \"Nhóm\",\r\n \"GIA_BAN\": \"Giá bán\",\r\n \"DANG_KY\": \"Đăng ký\",\r\n \"SL_HD_DK\": \"Số lượng hóa đơn đã đăng ký\",\r\n \"KEY_LICENSE\": \"Key bản quyền\",\r\n \"SL_HD_THEM\": \"Số lượng hóa đơn đăng ký thêm\",\r\n \"GIA_TRI\": \"Giá trị\",\r\n \"NGAY_BAT_DAU\": \"Ngày bắt đầu\",\r\n \"NGAY_KET_THUC\": \"Ngày kết thúc\",\r\n \"TOKEN_SERIAL\": \"TOKEN SERIAL\",\r\n \"CHUYEN_DOI\": \"Chuyển đổi\",\r\n \"SO_TK\": \"Số tài khoản\"\r\n };\r\n});\ndefine('locales/vi',[], function () {\r\n return {\r\n \"from_number\": \"Từ số\",\r\n \"to_number\": \"Đến số\",\r\n \"TUCHOI\": \"Từ chối\",\r\n \"amount_to_word\": \"Thành tiền bằng chữ\",\r\n \"INVOICE_STATUS\": \"Trạng thái hóa đơn\",\r\n \"status\": \"Trạng thái\",\r\n \"invoice_issued_date\": \"Ngày hóa đơn\",\r\n \"invoice_number\": \"Số hóa đơn\",\r\n \"buyer_taxcode\": \"Mã số thuế\",\r\n \"buyer_legal_name\": \"Tên đơn vị\",\r\n \"total_amount_without_vat\": \"Tiền trước thuế\",\r\n \"discount_amount\": \"Tiền chiết khấu\",\r\n \"vat_amount\": \"Tiền thuế\",\r\n \"total_amount\": \"Tổng tiền\",\r\n \"template_code\": \"Mẫu số\",\r\n \"invoice_series\": \"Ký hiệu\",\r\n \"buyer_bank_account\": \"TK Bên mua\",\r\n \"buyer_bank_name\": \"NH Bên mua \",\r\n \"buyer_address_line\": \"Địa chỉ\",\r\n \"customer_code\": \"Mã khách hàng\",\r\n \"item_name\": \"Tên hàng\",\r\n \"item_code\": \"Mã hàng\",\r\n \"unit_code\": \"ĐVT\",\r\n \"quantity\": \"Số lượng\",\r\n \"unit_price\": \"Đơn giá\",\r\n \"discount_percentage\": \"% Chiết khấu\",\r\n \"tax_type\": \"Mã thuế\",\r\n \"promotion\": \"Khuyến mại\",\r\n \"buyer_display_name\": \"Tên người mua\",\r\n \"buyer_email\": \"Email\",\r\n \"payment_method_name\": \"Hình thức thanh toán\",\r\n \"CODE\": \"Mã\",\r\n \"NAME\": \"Tên\",\r\n \"PL_CUSTOMER_GROUP_ID\": \"Nhóm khách hàng\",\r\n \"TAX_CODE\": \"Mã số thuế\",\r\n \"BUYER_NAME\": \"Tên người mua\",\r\n \"TEL\": \"Số điện thoại\",\r\n \"MOBILE\": \"Di động\",\r\n \"ADDRESS\": \"Địa chỉ\",\r\n \"PL_GOODS_GROUP_ID\": \"Nhóm hàng hóa\",\r\n \"UNIT_CODE\": \"Đơn vị tính\",\r\n \"VAT_TYPE\": \"% Thuế\",\r\n \"UNIT_PRICE\": \"Đơn giá\",\r\n \"VAT_PERCENTAGE\": \"% Thuế\",\r\n \"BANK_ACCOUNT\": \"Tài khoản ngân hàng\",\r\n \"BANK_NAME\": \"Tên ngân hàng\",\r\n \"VAT_PERCENTAGE\": \"% Thuế\",\r\n \"COMPANY_NAME\": \"Tên công ty\",\r\n \"NOTIFICATION_DATE\": \"Ngày thông báo\",\r\n \"TAXCODE\": \"Mã số thuế\",\r\n \"INVOICE_TYPE\": \"Hình thức\",\r\n \"QUANTITY\": \"Số lượng\",\r\n \"INVOICE_SERIES\": \"Ký hiệu\",\r\n \"FROM_NUMBER\": \"Từ số\",\r\n \"TO_NUMBER\": \"Đến số\",\r\n \"TEMPLATE_CODE\": \"Mẫu số\",\r\n \"QUANTITY_DECIMAL\": \"Số chữ số thập phân số lượng\",\r\n \"PRICE_DECIMAL\": \"Số chữ số thập phân đơn giá\",\r\n\r\n \"BEGIN_DATE\": \"Ngày bắt đầu\",\r\n \"MST\": \"Mã số thuế\",\r\n \"TEN_NCC\": \"Tên nhà cung cấp\",\r\n \"THUONG_HIEU\": \"Thương hiệu\",\r\n \"LINK_TRACUU\": \"Link Tra cứu\",\r\n \"Bạn chưa chọn hóa đơn\": \"Not select Invoie\",\r\n \"IMPORT_EXCEL_CT\": \"Nhận Excel chi tiết\",\r\n \"ma_dt\": \"Mã đối tượng\",\r\n \"ten_dt\": \"Tên đối tượng\",\r\n \"THEM\": \"Thêm\",\r\n \"SUA\": \"Sửa\",\r\n \"XOA\": \"Xóa\",\r\n \"COPY\": \"Sao chép\",\r\n \"USERNAME\": \"Tên truy cập\",\r\n \"PASSWORD\": \"Mật khẩu\",\r\n \"REMEMBERME\": \"Ghi nhớ tài khoản\",\r\n \"DANGNHAP\": \"Đăng nhập\",\r\n \"DANGNHAPSSO\": \"SSO\",\r\n \"DANGKY\": \"Đăng ký\",\r\n \"QUENMK\": \"Quên mật khẩu\",\r\n \"MAU_HD\": \"Mẫu hóa đơn\",\r\n \"KY_HIEU\": \"Ký hiệu\",\r\n \"BRANCH_CODE\": \"Đơn vị\",\r\n \"MAUIN\": \"Mẫu in\",\r\n \"SO_HDON\": \"Số hóa đơn\",\r\n \"NGAY_HDON\": \"Ngày hóa đơn\",\r\n \"TEN_DON_VI\": \"Tên đơn vị\",\r\n \"TEN_NGUOI_MUA\": \"Tên người mua\",\r\n \"SO_DH\": \"Số đơn hàng\",\r\n \"MA_DT\": \"Mã đối tượng\",\r\n \"MS_THUE\": \"Mã số thuế\",\r\n \"DIA_CHI\": \"Địa chỉ\",\r\n \"TK_BEN_MUA\": \"TK Bên Mua\",\r\n \"NGAN_HANG_BEN_MUA\": \"NH Bên Mua\",\r\n \"TK_BEN_BAN\": \"TK Bên Bán\",\r\n \"NGAN_HANG_BEN_BAN\": \"NH Bên Bán\",\r\n \"HT_TT\": \"HT thanh toán\",\r\n \"PRINT\": \"Xem/In\",\r\n \"MA_HV\": \"Mã hàng\",\r\n \"TEN_HV\": \"Tên hàng\",\r\n \"DVT\": \"ĐVT\",\r\n \"SO_LUONG\": \"Số lượng\",\r\n \"GIA\": \"Giá\",\r\n \"TIEN\": \"Tiền\",\r\n \"PT_CK\": \"% CK\",\r\n \"TIEN_CK\": \"Tiền CK\",\r\n \"MA_THUE\": \"Mã thuế\",\r\n \"TIEN_THUE\": \"Tiền thuế\",\r\n \"THANH_TIEN\": \"Thành tiền\",\r\n \"MA\": \"Mã\",\r\n \"TEN\": \"Tên\",\r\n \"DUYET\": \"Duyệt\",\r\n \"PHAN_QUYEN\": \"Phân quyền\",\r\n \"CHUC_NANG\": \"Chức năng\",\r\n \"BAO_CAO\": \"Báo cáo\",\r\n \"TEN_CHUC_NANG\": \"Tên chức năng\",\r\n \"TEN_MAU\": \"Tên mẫu\",\r\n \"LOAI_HOA_DON\": \"Loại hóa đơn\",\r\n \"HINH_THUC\": \"Hình thức\",\r\n \"MAU_SO\": \"Mẫu số\",\r\n \"SO_LIEN\": \"Số liên\",\r\n \"DA_KY\": \"Đã ký\",\r\n \"TRANG_THAI_MAU\": \"Trạng thái mẫu\",\r\n \"NGAY_TB\": \"Ngày thông báo\",\r\n \"NGUOI_DAI_DIEN_PL\": \"Người đại diện pháp luật\",\r\n \"DON_VI_CHU_QUAN\": \"Đơn vị chủ quản\",\r\n \"CO_QUAN_THUE_NHAN_TB\": \"Cơ quan thuế nhận thông báo\",\r\n \"TRANG_THAI\": \"Trạng thái\",\r\n \"MA_LOAI\": \"Mã loại\",\r\n \"TEN_LOAI\": \"Tên loại\",\r\n \"TU_SO\": \"Từ số\",\r\n \"DEN_SO\": \"Đến số\",\r\n \"NGAY_BD_SD\": \"Ngày bắt đầu sử dụng\",\r\n \"DN_IN\": \"Doanh nghiệp In/Cung cấp phần mềm\",\r\n \"MAU_HDON\": \"Mẫu hóa đơn\",\r\n \"TEN_DT\": \"Tên đối tượng\",\r\n \"CHUC_VU\": \"Chức vụ\",\r\n \"DIEN_THOAI\": \"Điện thoại\",\r\n \"DAI_DIEN\": \"Đại diện\",\r\n \"SU_DUNG\": \"Sử dụng\",\r\n \"EXPORT_XML\": \"Kết xuất XML\",\r\n \"NGUOI_KY\": \"Người ký\",\r\n \"SO_SERIAL\": \"Ký hiệu\",\r\n \"MA_DVT\": \"Mã ĐVT\",\r\n \"TEN_DVT\": \"Tên ĐVT\",\r\n \"CHU_KY_SO\": \"Chữ ký số\",\r\n \"CHON\": \"Chọn\",\r\n \"DONVI\": \"Đơn vị\",\r\n \"TINH_THANH\": \"Tỉnh thành\",\r\n \"NGAY_BD_NAM_TC\": \"Ngày bắt đầu năm tài chính\",\r\n \"TAI_KHOAN\": \"Tài khoản\",\r\n \"TAI_NH\": \"Tại ngân hàng\",\r\n \"EMAIL\": \"Email\",\r\n \"SUBJECTNAME\": \"Chủ thể\",\r\n \"SIGN\": \"Ký hóa đơn\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"DC_DINH_DANH\": \"Điều chỉnh định danh\",\r\n \"SOVB\": \"Số văn bản\",\r\n \"NGAYVB\": \"Ngày văn bản\",\r\n \"DIEN_GIAI\": \"Diễn giải\",\r\n \"SEARCH\": \"Tìm kiếm\",\r\n \"TIM_CHI_TIET\": \"Tìm chi tiết\",\r\n \"NGUOI_LAP\": \"Người lập\",\r\n \"TRANG_THAI_HDON\": \"Trạng thái hóa đơn\",\r\n \"TU_NGAY\": \"Từ ngày\",\r\n \"DEN_NGAY\": \"Đến ngày\",\r\n \"NGUOI_NHAN\": \"Người nhận\",\r\n \"TIEU_DE\": \"Tiêu đề\",\r\n \"NOI_DUNG\": \"Nội dung\",\r\n \"SEND_EMAIL_INVOICE\": \"Gửi hóa đơn qua email\",\r\n \"KHUYEN_MAI\": \"Khuyến mãi\",\r\n \"TIEU_THUC\": \"Tiêu thức\",\r\n \"DC_TANG\": \"Điều chỉnh tăng\",\r\n \"DC_GIAM\": \"Điều chỉnh giảm\",\r\n \"HDON_THAY_THE\": \"Hóa đơn thay thế\",\r\n \"REFRESH\": \"Tải dữ liệu\",\r\n \"EXPORT\": \"Kết xuất\",\r\n \"EXPORT_EXCEL\": \"Kết xuất Excel\",\r\n \"XOA_BO\": \"Xóa bỏ\",\r\n \"MST_BEN_BAN\": \"MST Bên bán\",\r\n \"MST_BEN_MUA\": \"MST Bên mua\",\r\n \"HDON_CT_BRA\": \"Hóa đơn chứng từ bán ra\",\r\n \"TIEN_TRUOC_THUE\": \"Tiền trước thuế\",\r\n \"TIEN_THUE_10\": \"10%\",\r\n \"TIEN_THUE_05\": \"5%\",\r\n \"TIEN_THUE_00\": \"0%\",\r\n \"KHONG_CHIU_THUE\": \"Không chịu thuế\",\r\n \"KHONG_KK\": \"Không kê khai\",\r\n \"GHI_CHU\": \"Ghi chú\",\r\n \"IMPORT_EXCEL\": \"Nhận Excel\",\r\n \"REGISTER_LICENCE\" : \"Đăng ký Licence\",\r\n \"NGUOI_GUI\": \"Người gửi\",\r\n \"KY_HOA_DON_CHO_KY\": \"Ký nhiều hóa đơn\",\r\n \"SMTP_SERVER\": \"SMTP Server\",\r\n \"SMTP_PORT\": \"SMTP Port\",\r\n \"enableSSL\": \"Enable SSL\",\r\n \"LOAI\": \"Loại\",\r\n \"SEND_EMAIL_CONFIRM\": \"Email yêu cầu ký xác nhận\",\r\n \"NHOM\": \"Nhóm\",\r\n \"GIA_BAN\": \"Giá bán\",\r\n \"DANG_KY\": \"Đăng ký\",\r\n \"SL_HD_DK\": \"Số lượng hóa đơn đã đăng ký\",\r\n \"KEY_LICENSE\": \"Key bản quyền\",\r\n \"SL_HD_THEM\": \"Số lượng hóa đơn đăng ký thêm\",\r\n \"GIA_TRI\": \"Giá trị\",\r\n \"NGAY_BAT_DAU\": \"Ngày bắt đầu\",\r\n \"NGAY_KET_THUC\": \"Ngày kết thúc\",\r\n \"TOKEN_SERIAL\": \"Token serial\",\r\n \"CHUYEN_DOI\": \"Chuyển đổi\",\r\n \"SO_TK\": \"Số tài khoản\",\r\n \"NGAY_HET_HAN\": \"Ngày hết hạn\",\r\n \"CHON_BOCHON\": \"Chọn/Bỏ chọn\",\r\n \"QUYEN_TRUY_CAP_HD\": \"Quyền truy cập hóa đơn\",\r\n \"IS_VIEW_USER\": \"Xem chứng từ của NSD khác\",\r\n \"IS_EDIT_USER\": \"Sửa chứng từ của NSD khác\",\r\n \"IS_DEL_USER\": \"Xóa chứng từ của NSD khác\",\r\n \"IS_NEW_USER\": \"Thêm chứng từ\",\r\n \"KY_HOA_DON\": \"Ký hóa đơn\",\r\n \"KY_HOA_DON_HSM\": \"Ký hóa đơn HSM\",\r\n \"DANG_KY_LAN_DAU\": \"Đăng ký lần đầu\",\r\n \"DANG_KY_THEM\": \"Đăng ký thêm\",\r\n \"THONG_BAO\": \"Thông báo\",\r\n \"TAI_FILE_MAU\": \"Tải file mẫu\",\r\n \"MA_NT\": \"Mã ngoại tệ\",\r\n \"TEN_NT\": \"Tên ngoại tệ\",\r\n \"TY_GIA\": \"Tỷ giá\",\r\n \"TEN_NH\": \"Tên ngân hàng\",\r\n \"IN_CHUYEN_DOI\": \"In chuyển đổi\",\r\n \"NGUOI_IN_CDOI\": \"Người in chuyển đổi\",\r\n \"NGAY_IN_CDOI\": \"Ngày in chuyển đổi\",\r\n \"PHAN_CACH_HANG_NGHIN\": \"Phân cách hàng nghìn\",\r\n \"PHAN_CACH_THAP_PHAN\": \"Phân cách thập phân\",\r\n \"PRINT_INVOICE_HTML\": \"Xem hóa đơn (Html)\",\r\n \"DEL_CACHE\": \"Xóa cache\",\r\n \"LOGOUT\": \"Đăng xuất\",\r\n \"CHANGE_PASS\": \"Đổi mật khẩu\",\r\n \"CHANGE_PASS_SSO\": \"Đổi mật khẩu SSO\",\r\n \"SO_BANG_KE\": \"Số bảng kê\",\r\n \"TAO_HD\": \"Tạo hóa đơn từ bảng kê\",\r\n \"LIST_DATE\": \"Ngày bảng kê\",\r\n \"LIST_NUMBER\": \"Số bảng kê\",\r\n \"MA_CHUNGTU\": \"Mã chứng từ\",\r\n \"NGAY_CHUNGTU\": \"Ngày chứng từ\",\r\n \"SO_CHUNGTU\": \"Số chứng từ\",\r\n \"PT_THUE\": \"% thuế\",\r\n \"TEN_DV\": \"Tên đơn vị\",\r\n \"TONG_TIEN\": \"Tổng tiền\",\r\n \"MA_DVCS\": \"Mã đơn vị\",\r\n \"TEN_NHV\": \"Tên nhóm\",\r\n \"USER_TRACUU\": \"Tạo user tra cứu\",\r\n \"MA_HANG\": \"Mã hàng hóa\",\r\n \"TEN_HANG\": \"Tên hàng\",\r\n \"DON_GIA\": \"Đơn giá\",\r\n \"DOANH_THU\": \"Doanh thu\",\r\n \"THUE_SUAT\": \"Thuế suất\",\r\n \"GIO_TB\": \"Ngày, giờ thông báo hủy hóa đơn như sau:\",\r\n \"NGAY_TB\": \"Ngày\",\r\n \"PHUONG_PHAP_HUY\": \"Phương pháp hủy hóa đơn:\",\r\n \"NGAY_LAP_TB\": \"Ngày lập thông báo:\",\r\n \"NGUOI_LAP_BIEU\": \"Người lập\",\r\n \"PATH\": \"Đường dẫn file ký\",\r\n \"KET_XUAT_EXCEL\": \"Kết xuất Excel\",\r\n \"HIDDEN\": \"Ẩn/hiện\",\r\n \"PARENT_ID\": \"Nhóm mẹ\",\r\n \"name\": \"Tên\",\r\n \"code\": \"Mã\",\r\n \"id\": \"Mã\",\r\n \"CURRENT_NUMBER\": \"Số hiện tại\",\r\n \"is_main\": \"Chính\",\r\n \"LINK_SSO\":\"Liên kết tài khoản SSO\"\r\n };\r\n});\nrequire([\"app\"]);\n"]}