Commit df4a49f76c938e9fed8e03343da230b0855f71c5

Authored by Mauricio Sanchez
1 parent c1c9b23894
Exists in master

15092020 1607

Showing 73 changed files with 3098 additions and 2618 deletions   Show diff stats
.idea/codeStyles/Project.xml
1 <component name="ProjectCodeStyleConfiguration"> 1 <component name="ProjectCodeStyleConfiguration">
2 <code_scheme name="Project" version="173"> 2 <code_scheme name="Project" version="173">
3 <DBN-PSQL>
4 <case-options enabled="true">
5 <option name="KEYWORD_CASE" value="lower" />
6 <option name="FUNCTION_CASE" value="lower" />
7 <option name="PARAMETER_CASE" value="lower" />
8 <option name="DATATYPE_CASE" value="lower" />
9 <option name="OBJECT_CASE" value="preserve" />
10 </case-options>
11 <formatting-settings enabled="false" />
12 </DBN-PSQL>
13 <DBN-SQL>
14 <case-options enabled="true">
15 <option name="KEYWORD_CASE" value="lower" />
16 <option name="FUNCTION_CASE" value="lower" />
17 <option name="PARAMETER_CASE" value="lower" />
18 <option name="DATATYPE_CASE" value="lower" />
19 <option name="OBJECT_CASE" value="preserve" />
20 </case-options>
21 <formatting-settings enabled="false">
22 <option name="STATEMENT_SPACING" value="one_line" />
23 <option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
24 <option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
25 </formatting-settings>
26 </DBN-SQL>
3 <JetCodeStyleSettings> 27 <JetCodeStyleSettings>
4 <option name="PACKAGES_TO_USE_STAR_IMPORTS"> 28 <option name="PACKAGES_TO_USE_STAR_IMPORTS">
5 <value> 29 <value>
6 <package name="java.util" alias="false" withSubpackages="false" /> 30 <package name="java.util" alias="false" withSubpackages="false" />
7 <package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" /> 31 <package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
8 <package name="io.ktor" alias="false" withSubpackages="true" /> 32 <package name="io.ktor" alias="false" withSubpackages="true" />
9 </value> 33 </value>
10 </option> 34 </option>
11 <option name="PACKAGES_IMPORT_LAYOUT"> 35 <option name="PACKAGES_IMPORT_LAYOUT">
12 <value> 36 <value>
13 <package name="" alias="false" withSubpackages="true" /> 37 <package name="" alias="false" withSubpackages="true" />
14 <package name="java" alias="false" withSubpackages="true" /> 38 <package name="java" alias="false" withSubpackages="true" />
15 <package name="javax" alias="false" withSubpackages="true" /> 39 <package name="javax" alias="false" withSubpackages="true" />
16 <package name="kotlin" alias="false" withSubpackages="true" /> 40 <package name="kotlin" alias="false" withSubpackages="true" />
17 <package name="" alias="true" withSubpackages="true" /> 41 <package name="" alias="true" withSubpackages="true" />
18 </value> 42 </value>
19 </option> 43 </option>
20 <option name="IF_RPAREN_ON_NEW_LINE" value="false" /> 44 <option name="IF_RPAREN_ON_NEW_LINE" value="false" />
21 <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> 45 <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
22 </JetCodeStyleSettings> 46 </JetCodeStyleSettings>
23 <codeStyleSettings language="XML"> 47 <codeStyleSettings language="XML">
24 <indentOptions> 48 <indentOptions>
25 <option name="CONTINUATION_INDENT_SIZE" value="4" /> 49 <option name="CONTINUATION_INDENT_SIZE" value="4" />
26 </indentOptions> 50 </indentOptions>
27 <arrangement> 51 <arrangement>
28 <rules> 52 <rules>
29 <section> 53 <section>
30 <rule> 54 <rule>
31 <match> 55 <match>
32 <AND> 56 <AND>
33 <NAME>xmlns:android</NAME> 57 <NAME>xmlns:android</NAME>
34 <XML_ATTRIBUTE /> 58 <XML_ATTRIBUTE />
35 <XML_NAMESPACE>^$</XML_NAMESPACE> 59 <XML_NAMESPACE>^$</XML_NAMESPACE>
36 </AND> 60 </AND>
37 </match> 61 </match>
38 </rule> 62 </rule>
39 </section> 63 </section>
40 <section> 64 <section>
41 <rule> 65 <rule>
42 <match> 66 <match>
43 <AND> 67 <AND>
44 <NAME>xmlns:.*</NAME> 68 <NAME>xmlns:.*</NAME>
45 <XML_ATTRIBUTE /> 69 <XML_ATTRIBUTE />
46 <XML_NAMESPACE>^$</XML_NAMESPACE> 70 <XML_NAMESPACE>^$</XML_NAMESPACE>
47 </AND> 71 </AND>
48 </match> 72 </match>
49 <order>BY_NAME</order> 73 <order>BY_NAME</order>
50 </rule> 74 </rule>
51 </section> 75 </section>
52 <section> 76 <section>
53 <rule> 77 <rule>
54 <match> 78 <match>
55 <AND> 79 <AND>
56 <NAME>.*:id</NAME> 80 <NAME>.*:id</NAME>
57 <XML_ATTRIBUTE /> 81 <XML_ATTRIBUTE />
58 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> 82 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
59 </AND> 83 </AND>
60 </match> 84 </match>
61 </rule> 85 </rule>
62 </section> 86 </section>
63 <section> 87 <section>
64 <rule> 88 <rule>
65 <match> 89 <match>
66 <AND> 90 <AND>
67 <NAME>.*:name</NAME> 91 <NAME>.*:name</NAME>
68 <XML_ATTRIBUTE /> 92 <XML_ATTRIBUTE />
69 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> 93 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
70 </AND> 94 </AND>
71 </match> 95 </match>
72 </rule> 96 </rule>
73 </section> 97 </section>
74 <section> 98 <section>
75 <rule> 99 <rule>
76 <match> 100 <match>
77 <AND> 101 <AND>
78 <NAME>name</NAME> 102 <NAME>name</NAME>
79 <XML_ATTRIBUTE /> 103 <XML_ATTRIBUTE />
80 <XML_NAMESPACE>^$</XML_NAMESPACE> 104 <XML_NAMESPACE>^$</XML_NAMESPACE>
81 </AND> 105 </AND>
82 </match> 106 </match>
83 </rule> 107 </rule>
84 </section> 108 </section>
85 <section> 109 <section>
86 <rule> 110 <rule>
87 <match> 111 <match>
88 <AND> 112 <AND>
89 <NAME>style</NAME> 113 <NAME>style</NAME>
90 <XML_ATTRIBUTE /> 114 <XML_ATTRIBUTE />
91 <XML_NAMESPACE>^$</XML_NAMESPACE> 115 <XML_NAMESPACE>^$</XML_NAMESPACE>
92 </AND> 116 </AND>
93 </match> 117 </match>
94 </rule> 118 </rule>
95 </section> 119 </section>
96 <section> 120 <section>
97 <rule> 121 <rule>
98 <match> 122 <match>
99 <AND> 123 <AND>
100 <NAME>.*</NAME> 124 <NAME>.*</NAME>
101 <XML_ATTRIBUTE /> 125 <XML_ATTRIBUTE />
102 <XML_NAMESPACE>^$</XML_NAMESPACE> 126 <XML_NAMESPACE>^$</XML_NAMESPACE>
103 </AND> 127 </AND>
104 </match> 128 </match>
105 <order>BY_NAME</order> 129 <order>BY_NAME</order>
106 </rule> 130 </rule>
107 </section> 131 </section>
108 <section> 132 <section>
109 <rule> 133 <rule>
110 <match> 134 <match>
111 <AND> 135 <AND>
112 <NAME>.*</NAME> 136 <NAME>.*</NAME>
113 <XML_ATTRIBUTE /> 137 <XML_ATTRIBUTE />
114 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> 138 <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
115 </AND> 139 </AND>
116 </match> 140 </match>
117 <order>ANDROID_ATTRIBUTE_ORDER</order> 141 <order>ANDROID_ATTRIBUTE_ORDER</order>
118 </rule> 142 </rule>
119 </section> 143 </section>
120 <section> 144 <section>
121 <rule> 145 <rule>
122 <match> 146 <match>
123 <AND> 147 <AND>
124 <NAME>.*</NAME> 148 <NAME>.*</NAME>
125 <XML_ATTRIBUTE /> 149 <XML_ATTRIBUTE />
126 <XML_NAMESPACE>.*</XML_NAMESPACE> 150 <XML_NAMESPACE>.*</XML_NAMESPACE>
127 </AND> 151 </AND>
128 </match> 152 </match>
129 <order>BY_NAME</order> 153 <order>BY_NAME</order>
130 </rule> 154 </rule>
131 </section> 155 </section>
132 </rules> 156 </rules>
133 </arrangement> 157 </arrangement>
134 </codeStyleSettings> 158 </codeStyleSettings>
135 <codeStyleSettings language="kotlin"> 159 <codeStyleSettings language="kotlin">
136 <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> 160 <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
137 <option name="RIGHT_MARGIN" value="200" /> 161 <option name="RIGHT_MARGIN" value="200" />
138 <option name="KEEP_LINE_BREAKS" value="false" /> 162 <option name="KEEP_LINE_BREAKS" value="false" />
139 <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> 163 <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
140 <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" /> 164 <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" />
141 <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" /> 165 <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" />
142 <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" /> 166 <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" />
143 <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" /> 167 <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" />
144 <option name="WRAP_ON_TYPING" value="1" /> 168 <option name="WRAP_ON_TYPING" value="1" />
145 </codeStyleSettings> 169 </codeStyleSettings>
146 </code_scheme> 170 </code_scheme>
147 </component> 171 </component>
.idea/dbnavigator.xml
File was created 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="DBNavigator.Project.DataEditorManager">
4 <record-view-column-sorting-type value="BY_INDEX" />
5 <value-preview-text-wrapping value="false" />
6 <value-preview-pinned value="false" />
7 </component>
8 <component name="DBNavigator.Project.DataExportManager">
9 <export-instructions>
10 <create-header value="true" />
11 <quote-values-containing-separator value="true" />
12 <quote-all-values value="false" />
13 <value-separator value="" />
14 <file-name value="" />
15 <file-location value="" />
16 <scope value="GLOBAL" />
17 <destination value="FILE" />
18 <format value="EXCEL" />
19 <charset value="windows-1252" />
20 </export-instructions>
21 </component>
22 <component name="DBNavigator.Project.DatabaseBrowserManager">
23 <autoscroll-to-editor value="false" />
24 <autoscroll-from-editor value="true" />
25 <show-object-properties value="true" />
26 <loaded-nodes />
27 </component>
28 <component name="DBNavigator.Project.DatabaseConsoleManager">
29 <connection id="3918bd62-034e-4b46-81a6-a20fcdcc253d">
30 <console name="Connection" type="STANDARD" schema="" session="Main"><![CDATA[select * from ServeInv]]></console>
31 </connection>
32 </component>
33 <component name="DBNavigator.Project.DatabaseFileManager">
34 <open-files />
35 </component>
36 <component name="DBNavigator.Project.DatabaseSessionManager">
37 <connection id="3918bd62-034e-4b46-81a6-a20fcdcc253d" />
38 </component>
39 <component name="DBNavigator.Project.EditorStateManager">
40 <last-used-providers />
41 </component>
42 <component name="DBNavigator.Project.MethodExecutionManager">
43 <method-browser />
44 <execution-history>
45 <group-entries value="true" />
46 <execution-inputs />
47 </execution-history>
48 <argument-values-cache />
49 </component>
50 <component name="DBNavigator.Project.ObjectDependencyManager">
51 <last-used-dependency-type value="INCOMING" />
52 </component>
53 <component name="DBNavigator.Project.ObjectQuickFilterManager">
54 <last-used-operator value="EQUAL" />
55 <filters />
56 </component>
57 <component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true">
58 <recently-used-interfaces />
59 </component>
60 <component name="DBNavigator.Project.Settings">
61 <connections>
62 <connection id="3918bd62-034e-4b46-81a6-a20fcdcc253d" active="true">
63 <database>
64 <name value="Connection" />
65 <description value="" />
66 <database-type value="SQLITE" />
67 <config-type value="BASIC" />
68 <database-version value="3.21" />
69 <driver-source value="BUILTIN" />
70 <driver-library value="" />
71 <driver value="" />
72 <url-type value="FILE" />
73 <host value="localhost" />
74 <port value="1234" />
75 <database value="database" />
76 <files>
77 <file path="C:\Users\mauricio sanchez\Desktop\DebInv-shm" schema="main" />
78 </files>
79 <type value="NONE" />
80 <user value="" />
81 <deprecated-pwd value="" />
82 </database>
83 <properties>
84 <auto-commit value="false" />
85 </properties>
86 <ssh-settings>
87 <active value="false" />
88 <proxy-host value="" />
89 <proxy-port value="22" />
90 <proxy-user value="" />
91 <deprecated-proxy-pwd value="" />
92 <auth-type value="PASSWORD" />
93 <key-file value="" />
94 <key-passphrase value="" />
95 </ssh-settings>
96 <ssl-settings>
97 <active value="false" />
98 <certificate-authority-file value="" />
99 <client-certificate-file value="" />
100 <client-key-file value="" />
101 </ssl-settings>
102 <details>
103 <charset value="UTF-8" />
104 <session-management value="true" />
105 <ddl-file-binding value="true" />
106 <database-logging value="false" />
107 <connect-automatically value="true" />
108 <restore-workspace value="true" />
109 <restore-workspace-deep value="true" />
110 <environment-type value="default" />
111 <idle-time-to-disconnect value="30" />
112 <idle-time-to-disconnect-pool value="5" />
113 <credential-expiry-time value="10" />
114 <max-connection-pool-size value="7" />
115 <alternative-statement-delimiter value="" />
116 </details>
117 <object-filters hide-empty-schemas="false" hide-pseudo-columns="false">
118 <object-type-filter use-master-settings="true">
119 <object-type name="SCHEMA" enabled="true" />
120 <object-type name="USER" enabled="true" />
121 <object-type name="ROLE" enabled="true" />
122 <object-type name="PRIVILEGE" enabled="true" />
123 <object-type name="CHARSET" enabled="true" />
124 <object-type name="TABLE" enabled="true" />
125 <object-type name="VIEW" enabled="true" />
126 <object-type name="MATERIALIZED_VIEW" enabled="true" />
127 <object-type name="NESTED_TABLE" enabled="true" />
128 <object-type name="COLUMN" enabled="true" />
129 <object-type name="INDEX" enabled="true" />
130 <object-type name="CONSTRAINT" enabled="true" />
131 <object-type name="DATASET_TRIGGER" enabled="true" />
132 <object-type name="DATABASE_TRIGGER" enabled="true" />
133 <object-type name="SYNONYM" enabled="true" />
134 <object-type name="SEQUENCE" enabled="true" />
135 <object-type name="PROCEDURE" enabled="true" />
136 <object-type name="FUNCTION" enabled="true" />
137 <object-type name="PACKAGE" enabled="true" />
138 <object-type name="TYPE" enabled="true" />
139 <object-type name="TYPE_ATTRIBUTE" enabled="true" />
140 <object-type name="ARGUMENT" enabled="true" />
141 <object-type name="DIMENSION" enabled="true" />
142 <object-type name="CLUSTER" enabled="true" />
143 <object-type name="DBLINK" enabled="true" />
144 </object-type-filter>
145 <object-name-filters />
146 </object-filters>
147 </connection>
148 </connections>
149 <browser-settings>
150 <general>
151 <display-mode value="TABBED" />
152 <navigation-history-size value="100" />
153 <show-object-details value="false" />
154 </general>
155 <filters>
156 <object-type-filter>
157 <object-type name="SCHEMA" enabled="true" />
158 <object-type name="USER" enabled="true" />
159 <object-type name="ROLE" enabled="true" />
160 <object-type name="PRIVILEGE" enabled="true" />
161 <object-type name="CHARSET" enabled="true" />
162 <object-type name="TABLE" enabled="true" />
163 <object-type name="VIEW" enabled="true" />
164 <object-type name="MATERIALIZED_VIEW" enabled="true" />
165 <object-type name="NESTED_TABLE" enabled="true" />
166 <object-type name="COLUMN" enabled="true" />
167 <object-type name="INDEX" enabled="true" />
168 <object-type name="CONSTRAINT" enabled="true" />
169 <object-type name="DATASET_TRIGGER" enabled="true" />
170 <object-type name="DATABASE_TRIGGER" enabled="true" />
171 <object-type name="SYNONYM" enabled="true" />
172 <object-type name="SEQUENCE" enabled="true" />
173 <object-type name="PROCEDURE" enabled="true" />
174 <object-type name="FUNCTION" enabled="true" />
175 <object-type name="PACKAGE" enabled="true" />
176 <object-type name="TYPE" enabled="true" />
177 <object-type name="TYPE_ATTRIBUTE" enabled="true" />
178 <object-type name="ARGUMENT" enabled="true" />
179 <object-type name="DIMENSION" enabled="true" />
180 <object-type name="CLUSTER" enabled="true" />
181 <object-type name="DBLINK" enabled="true" />
182 </object-type-filter>
183 </filters>
184 <sorting>
185 <object-type name="COLUMN" sorting-type="NAME" />
186 <object-type name="FUNCTION" sorting-type="NAME" />
187 <object-type name="PROCEDURE" sorting-type="NAME" />
188 <object-type name="ARGUMENT" sorting-type="POSITION" />
189 </sorting>
190 <default-editors>
191 <object-type name="VIEW" editor-type="SELECTION" />
192 <object-type name="PACKAGE" editor-type="SELECTION" />
193 <object-type name="TYPE" editor-type="SELECTION" />
194 </default-editors>
195 </browser-settings>
196 <navigation-settings>
197 <lookup-filters>
198 <lookup-objects>
199 <object-type name="SCHEMA" enabled="true" />
200 <object-type name="USER" enabled="false" />
201 <object-type name="ROLE" enabled="false" />
202 <object-type name="PRIVILEGE" enabled="false" />
203 <object-type name="CHARSET" enabled="false" />
204 <object-type name="TABLE" enabled="true" />
205 <object-type name="VIEW" enabled="true" />
206 <object-type name="MATERIALIZED VIEW" enabled="true" />
207 <object-type name="NESTED TABLE" enabled="false" />
208 <object-type name="COLUMN" enabled="false" />
209 <object-type name="INDEX" enabled="true" />
210 <object-type name="CONSTRAINT" enabled="true" />
211 <object-type name="DATASET TRIGGER" enabled="true" />
212 <object-type name="DATABASE TRIGGER" enabled="true" />
213 <object-type name="SYNONYM" enabled="false" />
214 <object-type name="SEQUENCE" enabled="true" />
215 <object-type name="PROCEDURE" enabled="true" />
216 <object-type name="FUNCTION" enabled="true" />
217 <object-type name="PACKAGE" enabled="true" />
218 <object-type name="TYPE" enabled="true" />
219 <object-type name="TYPE ATTRIBUTE" enabled="false" />
220 <object-type name="ARGUMENT" enabled="false" />
221 <object-type name="DIMENSION" enabled="false" />
222 <object-type name="CLUSTER" enabled="false" />
223 <object-type name="DBLINK" enabled="true" />
224 </lookup-objects>
225 <force-database-load value="false" />
226 <prompt-connection-selection value="true" />
227 <prompt-schema-selection value="true" />
228 </lookup-filters>
229 </navigation-settings>
230 <dataset-grid-settings>
231 <general>
232 <enable-zooming value="true" />
233 <enable-column-tooltip value="true" />
234 </general>
235 <sorting>
236 <nulls-first value="true" />
237 <max-sorting-columns value="4" />
238 </sorting>
239 <tracking-columns>
240 <columnNames value="" />
241 <visible value="true" />
242 <editable value="false" />
243 </tracking-columns>
244 </dataset-grid-settings>
245 <dataset-editor-settings>
246 <text-editor-popup>
247 <active value="false" />
248 <active-if-empty value="false" />
249 <data-length-threshold value="100" />
250 <popup-delay value="1000" />
251 </text-editor-popup>
252 <values-actions-popup>
253 <show-popup-button value="true" />
254 <element-count-threshold value="1000" />
255 <data-length-threshold value="250" />
256 </values-actions-popup>
257 <general>
258 <fetch-block-size value="100" />
259 <fetch-timeout value="30" />
260 <trim-whitespaces value="true" />
261 <convert-empty-strings-to-null value="true" />
262 <select-content-on-cell-edit value="true" />
263 <large-value-preview-active value="true" />
264 </general>
265 <filters>
266 <prompt-filter-dialog value="true" />
267 <default-filter-type value="BASIC" />
268 </filters>
269 <qualified-text-editor text-length-threshold="300">
270 <content-types>
271 <content-type name="Text" enabled="true" />
272 <content-type name="Properties" enabled="true" />
273 <content-type name="XML" enabled="true" />
274 <content-type name="DTD" enabled="true" />
275 <content-type name="HTML" enabled="true" />
276 <content-type name="XHTML" enabled="true" />
277 <content-type name="Java" enabled="true" />
278 <content-type name="SQL" enabled="true" />
279 <content-type name="PL/SQL" enabled="true" />
280 <content-type name="JSON" enabled="true" />
281 <content-type name="JSON5" enabled="true" />
282 <content-type name="Groovy" enabled="true" />
283 <content-type name="AIDL" enabled="true" />
284 <content-type name="YAML" enabled="true" />
285 <content-type name="Manifest" enabled="true" />
286 </content-types>
287 </qualified-text-editor>
288 <record-navigation>
289 <navigation-target value="VIEWER" />
290 </record-navigation>
291 </dataset-editor-settings>
292 <code-editor-settings>
293 <general>
294 <show-object-navigation-gutter value="false" />
295 <show-spec-declaration-navigation-gutter value="true" />
296 <enable-spellchecking value="true" />
297 <enable-reference-spellchecking value="false" />
298 </general>
299 <confirmations>
300 <save-changes value="false" />
301 <revert-changes value="true" />
302 </confirmations>
303 </code-editor-settings>
304 <code-completion-settings>
305 <filters>
306 <basic-filter>
307 <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
308 <filter-element type="RESERVED_WORD" id="function" selected="true" />
309 <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
310 <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
311 <filter-element type="RESERVED_WORD" id="exception" selected="true" />
312 <filter-element type="OBJECT" id="schema" selected="true" />
313 <filter-element type="OBJECT" id="role" selected="true" />
314 <filter-element type="OBJECT" id="user" selected="true" />
315 <filter-element type="OBJECT" id="privilege" selected="true" />
316 <user-schema>
317 <filter-element type="OBJECT" id="table" selected="true" />
318 <filter-element type="OBJECT" id="view" selected="true" />
319 <filter-element type="OBJECT" id="materialized view" selected="true" />
320 <filter-element type="OBJECT" id="index" selected="true" />
321 <filter-element type="OBJECT" id="constraint" selected="true" />
322 <filter-element type="OBJECT" id="trigger" selected="true" />
323 <filter-element type="OBJECT" id="synonym" selected="false" />
324 <filter-element type="OBJECT" id="sequence" selected="true" />
325 <filter-element type="OBJECT" id="procedure" selected="true" />
326 <filter-element type="OBJECT" id="function" selected="true" />
327 <filter-element type="OBJECT" id="package" selected="true" />
328 <filter-element type="OBJECT" id="type" selected="true" />
329 <filter-element type="OBJECT" id="dimension" selected="true" />
330 <filter-element type="OBJECT" id="cluster" selected="true" />
331 <filter-element type="OBJECT" id="dblink" selected="true" />
332 </user-schema>
333 <public-schema>
334 <filter-element type="OBJECT" id="table" selected="false" />
335 <filter-element type="OBJECT" id="view" selected="false" />
336 <filter-element type="OBJECT" id="materialized view" selected="false" />
337 <filter-element type="OBJECT" id="index" selected="false" />
338 <filter-element type="OBJECT" id="constraint" selected="false" />
339 <filter-element type="OBJECT" id="trigger" selected="false" />
340 <filter-element type="OBJECT" id="synonym" selected="false" />
341 <filter-element type="OBJECT" id="sequence" selected="false" />
342 <filter-element type="OBJECT" id="procedure" selected="false" />
343 <filter-element type="OBJECT" id="function" selected="false" />
344 <filter-element type="OBJECT" id="package" selected="false" />
345 <filter-element type="OBJECT" id="type" selected="false" />
346 <filter-element type="OBJECT" id="dimension" selected="false" />
347 <filter-element type="OBJECT" id="cluster" selected="false" />
348 <filter-element type="OBJECT" id="dblink" selected="false" />
349 </public-schema>
350 <any-schema>
351 <filter-element type="OBJECT" id="table" selected="true" />
352 <filter-element type="OBJECT" id="view" selected="true" />
353 <filter-element type="OBJECT" id="materialized view" selected="true" />
354 <filter-element type="OBJECT" id="index" selected="true" />
355 <filter-element type="OBJECT" id="constraint" selected="true" />
356 <filter-element type="OBJECT" id="trigger" selected="true" />
357 <filter-element type="OBJECT" id="synonym" selected="true" />
358 <filter-element type="OBJECT" id="sequence" selected="true" />
359 <filter-element type="OBJECT" id="procedure" selected="true" />
360 <filter-element type="OBJECT" id="function" selected="true" />
361 <filter-element type="OBJECT" id="package" selected="true" />
362 <filter-element type="OBJECT" id="type" selected="true" />
363 <filter-element type="OBJECT" id="dimension" selected="true" />
364 <filter-element type="OBJECT" id="cluster" selected="true" />
365 <filter-element type="OBJECT" id="dblink" selected="true" />
366 </any-schema>
367 </basic-filter>
368 <extended-filter>
369 <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
370 <filter-element type="RESERVED_WORD" id="function" selected="true" />
371 <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
372 <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
373 <filter-element type="RESERVED_WORD" id="exception" selected="true" />
374 <filter-element type="OBJECT" id="schema" selected="true" />
375 <filter-element type="OBJECT" id="user" selected="true" />
376 <filter-element type="OBJECT" id="role" selected="true" />
377 <filter-element type="OBJECT" id="privilege" selected="true" />
378 <user-schema>
379 <filter-element type="OBJECT" id="table" selected="true" />
380 <filter-element type="OBJECT" id="view" selected="true" />
381 <filter-element type="OBJECT" id="materialized view" selected="true" />
382 <filter-element type="OBJECT" id="index" selected="true" />
383 <filter-element type="OBJECT" id="constraint" selected="true" />
384 <filter-element type="OBJECT" id="trigger" selected="true" />
385 <filter-element type="OBJECT" id="synonym" selected="true" />
386 <filter-element type="OBJECT" id="sequence" selected="true" />
387 <filter-element type="OBJECT" id="procedure" selected="true" />
388 <filter-element type="OBJECT" id="function" selected="true" />
389 <filter-element type="OBJECT" id="package" selected="true" />
390 <filter-element type="OBJECT" id="type" selected="true" />
391 <filter-element type="OBJECT" id="dimension" selected="true" />
392 <filter-element type="OBJECT" id="cluster" selected="true" />
393 <filter-element type="OBJECT" id="dblink" selected="true" />
394 </user-schema>
395 <public-schema>
396 <filter-element type="OBJECT" id="table" selected="true" />
397 <filter-element type="OBJECT" id="view" selected="true" />
398 <filter-element type="OBJECT" id="materialized view" selected="true" />
399 <filter-element type="OBJECT" id="index" selected="true" />
400 <filter-element type="OBJECT" id="constraint" selected="true" />
401 <filter-element type="OBJECT" id="trigger" selected="true" />
402 <filter-element type="OBJECT" id="synonym" selected="true" />
403 <filter-element type="OBJECT" id="sequence" selected="true" />
404 <filter-element type="OBJECT" id="procedure" selected="true" />
405 <filter-element type="OBJECT" id="function" selected="true" />
406 <filter-element type="OBJECT" id="package" selected="true" />
407 <filter-element type="OBJECT" id="type" selected="true" />
408 <filter-element type="OBJECT" id="dimension" selected="true" />
409 <filter-element type="OBJECT" id="cluster" selected="true" />
410 <filter-element type="OBJECT" id="dblink" selected="true" />
411 </public-schema>
412 <any-schema>
413 <filter-element type="OBJECT" id="table" selected="true" />
414 <filter-element type="OBJECT" id="view" selected="true" />
415 <filter-element type="OBJECT" id="materialized view" selected="true" />
416 <filter-element type="OBJECT" id="index" selected="true" />
417 <filter-element type="OBJECT" id="constraint" selected="true" />
418 <filter-element type="OBJECT" id="trigger" selected="true" />
419 <filter-element type="OBJECT" id="synonym" selected="true" />
420 <filter-element type="OBJECT" id="sequence" selected="true" />
421 <filter-element type="OBJECT" id="procedure" selected="true" />
422 <filter-element type="OBJECT" id="function" selected="true" />
423 <filter-element type="OBJECT" id="package" selected="true" />
424 <filter-element type="OBJECT" id="type" selected="true" />
425 <filter-element type="OBJECT" id="dimension" selected="true" />
426 <filter-element type="OBJECT" id="cluster" selected="true" />
427 <filter-element type="OBJECT" id="dblink" selected="true" />
428 </any-schema>
429 </extended-filter>
430 </filters>
431 <sorting enabled="true">
432 <sorting-element type="RESERVED_WORD" id="keyword" />
433 <sorting-element type="RESERVED_WORD" id="datatype" />
434 <sorting-element type="OBJECT" id="column" />
435 <sorting-element type="OBJECT" id="table" />
436 <sorting-element type="OBJECT" id="view" />
437 <sorting-element type="OBJECT" id="materialized view" />
438 <sorting-element type="OBJECT" id="index" />
439 <sorting-element type="OBJECT" id="constraint" />
440 <sorting-element type="OBJECT" id="trigger" />
441 <sorting-element type="OBJECT" id="synonym" />
442 <sorting-element type="OBJECT" id="sequence" />
443 <sorting-element type="OBJECT" id="procedure" />
444 <sorting-element type="OBJECT" id="function" />
445 <sorting-element type="OBJECT" id="package" />
446 <sorting-element type="OBJECT" id="type" />
447 <sorting-element type="OBJECT" id="dimension" />
448 <sorting-element type="OBJECT" id="cluster" />
449 <sorting-element type="OBJECT" id="dblink" />
450 <sorting-element type="OBJECT" id="schema" />
451 <sorting-element type="OBJECT" id="role" />
452 <sorting-element type="OBJECT" id="user" />
453 <sorting-element type="RESERVED_WORD" id="function" />
454 <sorting-element type="RESERVED_WORD" id="parameter" />
455 </sorting>
456 <format>
457 <enforce-code-style-case value="true" />
458 </format>
459 </code-completion-settings>
460 <execution-engine-settings>
461 <statement-execution>
462 <fetch-block-size value="100" />
463 <execution-timeout value="20" />
464 <debug-execution-timeout value="600" />
465 <focus-result value="false" />
466 <prompt-execution value="false" />
467 </statement-execution>
468 <script-execution>
469 <command-line-interfaces />
470 <execution-timeout value="300" />
471 </script-execution>
472 <method-execution>
473 <execution-timeout value="30" />
474 <debug-execution-timeout value="600" />
475 <parameter-history-size value="10" />
476 </method-execution>
477 </execution-engine-settings>
478 <operation-settings>
479 <transactions>
480 <uncommitted-changes>
481 <on-project-close value="ASK" />
482 <on-disconnect value="ASK" />
483 <on-autocommit-toggle value="ASK" />
484 </uncommitted-changes>
485 <multiple-uncommitted-changes>
486 <on-commit value="ASK" />
487 <on-rollback value="ASK" />
488 </multiple-uncommitted-changes>
489 </transactions>
490 <session-browser>
491 <disconnect-session value="ASK" />
492 <kill-session value="ASK" />
493 <reload-on-filter-change value="false" />
494 </session-browser>
495 <compiler>
496 <compile-type value="KEEP" />
497 <compile-dependencies value="ASK" />
498 <always-show-controls value="false" />
499 </compiler>
500 <debugger>
501 <debugger-type value="ASK" />
502 <use-generic-runners value="true" />
503 </debugger>
504 </operation-settings>
505 <ddl-file-settings>
506 <extensions>
507 <mapping file-type-id="VIEW" extensions="vw" />
508 <mapping file-type-id="TRIGGER" extensions="trg" />
509 <mapping file-type-id="PROCEDURE" extensions="prc" />
510 <mapping file-type-id="FUNCTION" extensions="fnc" />
511 <mapping file-type-id="PACKAGE" extensions="pkg" />
512 <mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
513 <mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
514 <mapping file-type-id="TYPE" extensions="tpe" />
515 <mapping file-type-id="TYPE_SPEC" extensions="tps" />
516 <mapping file-type-id="TYPE_BODY" extensions="tpb" />
517 </extensions>
518 <general>
519 <lookup-ddl-files value="true" />
520 <create-ddl-files value="false" />
521 <synchronize-ddl-files value="true" />
522 <use-qualified-names value="false" />
523 <make-scripts-rerunnable value="true" />
524 </general>
525 </ddl-file-settings>
526 <general-settings>
527 <regional-settings>
528 <date-format value="MEDIUM" />
529 <number-format value="UNGROUPED" />
530 <locale value="SYSTEM_DEFAULT" />
531 <use-custom-formats value="false" />
532 </regional-settings>
533 <environment>
534 <environment-types>
535 <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
536 <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
537 <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
538 <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
539 </environment-types>
540 <visibility-settings>
541 <connection-tabs value="true" />
542 <dialog-headers value="true" />
543 <object-editor-tabs value="true" />
544 <script-editor-tabs value="false" />
545 <execution-result-tabs value="true" />
546 </visibility-settings>
547 </environment>
548 </general-settings>
549 </component>
550 <component name="DBNavigator.Project.StatementExecutionManager">
551 <execution-variables />
552 </component>
553 </project>
.idea/jarRepositories.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="RemoteRepositoriesConfiguration"> 3 <component name="RemoteRepositoriesConfiguration">
4 <remote-repository> 4 <remote-repository>
5 <option name="id" value="central" /> 5 <option name="id" value="central" />
6 <option name="name" value="Maven Central repository" /> 6 <option name="name" value="Maven Central repository" />
7 <option name="url" value="https://repo1.maven.org/maven2" /> 7 <option name="url" value="https://repo1.maven.org/maven2" />
8 </remote-repository> 8 </remote-repository>
9 <remote-repository> 9 <remote-repository>
10 <option name="id" value="jboss.community" /> 10 <option name="id" value="jboss.community" />
11 <option name="name" value="JBoss Community repository" /> 11 <option name="name" value="JBoss Community repository" />
12 <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> 12 <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
13 </remote-repository> 13 </remote-repository>
14 <remote-repository> 14 <remote-repository>
15 <option name="id" value="BintrayJCenter" /> 15 <option name="id" value="BintrayJCenter" />
16 <option name="name" value="BintrayJCenter" /> 16 <option name="name" value="BintrayJCenter" />
17 <option name="url" value="https://jcenter.bintray.com/" /> 17 <option name="url" value="https://jcenter.bintray.com/" />
18 </remote-repository> 18 </remote-repository>
19 <remote-repository> 19 <remote-repository>
20 <option name="id" value="Google" /> 20 <option name="id" value="Google" />
21 <option name="name" value="Google" /> 21 <option name="name" value="Google" />
22 <option name="url" value="https://dl.google.com/dl/android/maven2/" /> 22 <option name="url" value="https://dl.google.com/dl/android/maven2/" />
23 </remote-repository> 23 </remote-repository>
24 <remote-repository>
25 <option name="id" value="IDEScout, Inc." />
26 <option name="name" value="IDEScout, Inc." />
27 <option name="url" value="http://www.idescout.com/maven/repo/" />
28 </remote-repository>
24 </component> 29 </component>
25 </project> 30 </project>
.idea/sqlandroid.xml
File was created 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4">
3 <component name="SQLAndroidSettings">
4 <option name="storageVersion" value="2" />
5 </component>
6 </project>
Solicitudes API Articulos y Time.docx
No preview for this file type
Solicitudes API Articulos y Time.pdf
No preview for this file type
1 apply plugin: 'com.android.application' 1 apply plugin: 'com.android.application'
2 apply plugin: 'kotlin-android' 2 apply plugin: 'kotlin-android'
3 apply plugin: 'kotlin-android-extensions' 3 apply plugin: 'kotlin-android-extensions'
4 4 apply plugin: 'kotlin-kapt'
5 5
6 android { 6 android {
7 compileSdkVersion 30 7 compileSdkVersion 30
8 buildToolsVersion "29.0.3" 8 buildToolsVersion "29.0.3"
9 9
10 defaultConfig { 10 defaultConfig {
11 applicationId "com.focasoftware.deboinventariov20" 11 applicationId "com.focasoftware.deboinventariov20"
12 minSdkVersion 26 12 minSdkVersion 26
13 targetSdkVersion 30 13 targetSdkVersion 30
14 versionCode 1 14 versionCode 1
15 versionName "1.0" 15 versionName "1.0"
16 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 16 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
17 javaCompileOptions { 17 javaCompileOptions {
18 annotationProcessorOptions { 18 annotationProcessorOptions {
19 arguments = ["room.incremental":"true"] 19 arguments = ["room.incremental":"true"]
20 } 20 }
21 } 21 }
22 } 22 }
23 23
24 buildTypes { 24 buildTypes {
25 release { 25 release {
26 minifyEnabled false 26 minifyEnabled false
27 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 27 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
28 } 28 }
29 } 29 }
30 compileOptions { 30 compileOptions {
31 sourceCompatibility JavaVersion.VERSION_1_8 31 sourceCompatibility JavaVersion.VERSION_1_8
32 targetCompatibility JavaVersion.VERSION_1_8 32 targetCompatibility JavaVersion.VERSION_1_8
33 33
34 } 34 }
35 kotlinOptions { 35 kotlinOptions {
36 jvmTarget = '1.8' 36 jvmTarget = '1.8'
37 } 37 }
38 } 38 }
39 39
40 dependencies { 40 dependencies {
41 implementation fileTree(dir: "libs", include: ["*.jar"]) 41 implementation fileTree(dir: "libs", include: ["*.jar"])
42 implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 42 implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
43 implementation 'androidx.core:core-ktx:1.3.1' 43 implementation 'androidx.core:core-ktx:1.3.1'
44 implementation 'androidx.appcompat:appcompat:1.2.0' 44 implementation 'androidx.appcompat:appcompat:1.2.0'
45 implementation 'androidx.legacy:legacy-support-v4:1.0.0' 45 implementation 'androidx.legacy:legacy-support-v4:1.0.0'
46 implementation 'com.google.android.material:material:1.2.0' 46 implementation 'com.google.android.material:material:1.2.1'
47 implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 47 implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
48 implementation 'androidx.navigation:navigation-fragment:2.3.0' 48 implementation 'androidx.navigation:navigation-fragment:2.3.0'
49 implementation 'androidx.navigation:navigation-ui:2.3.0' 49 implementation 'androidx.navigation:navigation-ui:2.3.0'
50 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' 50 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
51 implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' 51 implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0'
52 implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' 52 implementation 'androidx.navigation:navigation-ui-ktx:2.3.0'
53 implementation 'androidx.recyclerview:recyclerview:1.1.0' 53 implementation 'androidx.recyclerview:recyclerview:1.1.0'
54 testImplementation 'junit:junit:4.13' 54 testImplementation 'junit:junit:4.13'
55 androidTestImplementation 'androidx.test.ext:junit:1.1.2' 55 androidTestImplementation 'androidx.test.ext:junit:1.1.2'
56 androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 56 androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
57 57
58 58
59 //Room 59 //Room
60 implementation 'androidx.room:room-ktx:2.2.5' 60 implementation 'androidx.room:room-ktx:2.2.5'
61 implementation "androidx.room:room-runtime:2.2.5" 61 implementation "androidx.room:room-runtime:2.2.5"
62 annotationProcessor 'androidx.room:room-compiler:2.2.5' 62 debugImplementation 'com.idescout.sql:sqlscout-server:4.1'
63 kapt "androidx.room:room-compiler:2.2.5"
64 // annotationProcessor 'androidx.room:room-compiler:2.2.5'
63 65
64 //Retrofit 66 //Retrofit
65 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
66 implementation 'com.google.code.gson:gson:2.8.6' 67 implementation 'com.google.code.gson:gson:2.8.6'
68 implementation 'com.squareup.retrofit2:retrofit:2.9.0'
67 implementation 'com.squareup.retrofit2:converter-gson:2.9.0' 69 implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
68 implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1' 70 implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1'
69 71
70 //Gson library 72 //Gson library
71 implementation "com.google.code.gson:gson:2.8.6" 73 implementation "com.google.code.gson:gson:2.8.6"
72 74
73 // ViewModel and LiveData 75 // ViewModel and LiveData
74 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' 76 implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
75 annotationProcessor 'androidx.lifecycle:lifecycle-common-java8:2.2.0' 77 kapt 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
78 releaseImplementation 'com.idescout.sql:sqlscout-server-noop:4.1'
app/src/main/AndroidManifest.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools"
3 package="com.focasoftware.deboinventariov20"> 4 package="com.focasoftware.deboinventariov20">
4 5
5 <uses-permission android:name="android.permission.WAKE_LOCK"/>
6 <uses-permission android:name="android.permission.VIBRATE" /> 6 <uses-permission android:name="android.permission.VIBRATE" />
7 <uses-permission android:name="android.permission.INTERNET" /> 7 <uses-permission android:name="android.permission.INTERNET" />
8 8
9 <application 9 <application
10 android:exported="false"
10 android:allowBackup="true" 11 android:allowBackup="true"
11 android:icon="@drawable/icono_inventario_big" 12 android:icon="@drawable/icono_inventario_big"
12 android:label="@string/app_name" 13 android:label="@string/app_name"
13 android:roundIcon="@drawable/icono_inventario_big" 14 android:roundIcon="@drawable/icono_inventario_big"
14 android:supportsRtl="true" 15 android:supportsRtl="true"
15 android:theme="@style/AppTheme" 16 android:theme="@style/AppTheme"
16 android:usesCleartextTraffic="true"> 17 android:usesCleartextTraffic="true">
17 <activity 18 <activity
18 android:name=".ui.SplashActivity" 19 android:name=".UI.SplashActivity"
19 android:label="@string/app_name" 20 android:label="@string/app_name"
20 android:theme="@style/AppTheme.NoActionBar"> 21 android:theme="@style/AppTheme.NoActionBar">
21 <intent-filter> 22 <intent-filter>
22 <action android:name="android.intent.action.MAIN" /> 23 <action android:name="android.intent.action.MAIN" />
23 24
24 <category android:name="android.intent.category.LAUNCHER" /> 25 <category android:name="android.intent.category.LAUNCHER" />
25 </intent-filter> 26 </intent-filter>
26 </activity> 27 </activity>
27 <activity 28 <activity
28 android:name=".ui.MainActivity" 29 android:name=".UI.MainActivity"
29 android:label="@string/app_name" 30 android:label="@string/app_name"
30 android:theme="@style/AppTheme.NoActionBar"> 31 android:theme="@style/AppTheme.NoActionBar">
31 32
32 </activity> 33 </activity>
33 </application> 34 </application>
34 35
app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt
1 package com.focasoftware.deboinventario.ui.actualizacionMaestros 1 package com.focasoftware.deboinventariov20.DB.Constans
2 2
3 class Constans { 3 class Constans {
4 4
5 companion object { 5 companion object {
6 const val DB_NAME="DebInv" 6 const val DB_NAME="DebInv"
7 const val TABLA_ART="Articles" 7 const val TABLA_ART="Articles"
8 const val TABLA_INV_H="InvHead" 8 const val TABLA_INV_H="InvHead"
9 const val TABLA_INV_B="InvBody" 9 const val TABLA_INV_B="InvBody"
10 const val TABLA_SERV_INV="ServeInv" 10 const val TABLA_SERV_INV="ServeInv"
11 } 11 }
12 12
13 } 13 }
app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
1 package com.focasoftware.deboinventariov20.DB.DAO 1 package com.focasoftware.deboinventariov20.DB.DAO
2 2
3 import androidx.room.* 3 import androidx.room.Dao
4 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART 4 import androidx.room.Insert
5 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B 5 import androidx.room.OnConflictStrategy
6 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H 6 import androidx.room.Query
7 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV 7 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_ART
8 import com.focasoftware.deboinventariov20.Model.* 8 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_INV_B
9 import java.util.ArrayList 9 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_INV_H
10 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_SERV_INV
11 import com.focasoftware.deboinventariov20.Model.Articles
12 import com.focasoftware.deboinventariov20.Model.InvBody
13 import com.focasoftware.deboinventariov20.Model.InvHead
14 import com.focasoftware.deboinventariov20.Model.ServeInv
10 15
11 @Dao 16 @Dao
12 interface ArticulosDAO { 17 interface ArticulosDAO {
13 18
14 // TABLA ARTICULOS 19 // TABLA ARTICULOS
15 @Insert(onConflict = OnConflictStrategy.REPLACE) 20 @Insert(onConflict = OnConflictStrategy.REPLACE)
16 suspend fun insertArticulos(articulos: Articles?) 21 suspend fun insertArticulos(articulos: Articles?)
17 22
18 @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC") 23 @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC")
19 suspend fun findAllArticulos(): List<Articles> 24 suspend fun findAllArticulos(): List<Articles>
20 25
21 @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%' GROUP BY DES ORDER BY DES") 26 @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%' GROUP BY DES ORDER BY DES")
22 suspend fun findArticuloByDesc(description: String?, dep: Int): List<Articles> 27 suspend fun findArticuloByDesc(description: String?, dep: Int): List<Articles>
23 28
24 @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra") 29 @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra")
25 suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles? 30 suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles?
26 31
32 @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CBC LIKE :CodOrigen")
33 suspend fun findArticuloByCodOri(CodOrigen: String?, dep: Int): Articles?
34
27 @Query("DELETE FROM $TABLA_ART") 35 @Query("DELETE FROM $TABLA_ART")
28 suspend fun deleteAllArticulos() 36 suspend fun deleteAllArticulos()
29 37
30 @Query("SELECT * FROM $TABLA_ART WHERE SEC=:sector AND COD=:codigo") 38 @Query("SELECT * FROM $TABLA_ART WHERE SEC=:sector AND COD=:codigo")
31 suspend fun fetchArticuloByCodSec(sector: String?, codigo: String?): Articles? 39 suspend fun fetchArticuloByCodSec(sector: String?, codigo: String?): Articles?
32 } 40 }
33 41
34 @Dao 42 @Dao
35 interface InvHeadDAO { 43 interface InvHeadDAO {
36 @Insert() 44 @Insert()
37 suspend fun insertInvHead(invHead: InvHead?) 45 suspend fun insertInvHead(invHead: InvHead?)
38 46
39 @Query("SELECT INV_NUM FROM $TABLA_INV_H ORDER BY INV_NUM DESC") 47 @Query("SELECT INV_NUM FROM $TABLA_INV_H ORDER BY INV_NUM DESC")
40 suspend fun findLastInv(): Int 48 suspend fun findLastInv(): Int
41 49
42 @Query("DELETE FROM $TABLA_INV_H") 50 @Query("DELETE FROM $TABLA_INV_H")
43 suspend fun deleteAllArticulos() 51 suspend fun deleteAllArticulos()
44 52
45 @Query("DELETE FROM $TABLA_INV_H WHERE INV_NUM=:inven") 53 @Query("DELETE FROM $TABLA_INV_H WHERE INV_NUM=:inven")
46 suspend fun deleteinvHead(inven: Int) 54 suspend fun deleteinvHead(inven: Int)
47 55
48 @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") 56 @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI")
49 suspend fun fetchAllInvHead(): List<InvHead> 57 suspend fun fetchAllInvHead(): List<InvHead>
50 58
59 @Query("SELECT INV_PRODCONT FROM $TABLA_INV_H WHERE INV_NUM=:inven")
60 suspend fun consultaCantidadInvH (inven: Int): Int
61
51 @Query("UPDATE $TABLA_INV_H SET INV_PRODCONT=:cant WHERE INV_NUM=:inven") 62 @Query("UPDATE $TABLA_INV_H SET INV_PRODCONT=:cant WHERE INV_NUM=:inven")
52 suspend fun UpdateInvBody(cant: Float, inven: Int) 63 suspend fun updateInvBody(inven: Int,cant: Int)
53 } 64 }
54 65
55 @Dao 66 @Dao
56 interface InvBodyDAO { 67 interface InvBodyDAO {
57 @Insert() 68 @Insert()
58 suspend fun insertInvBody(invBody: InvBody?) 69 suspend fun insertInvBody(invBody: InvBody?)
59 70
60 @Query("DELETE FROM $TABLA_INV_B") 71 @Query("DELETE FROM $TABLA_INV_B")
61 suspend fun deleteAllInvBody() 72 suspend fun deleteAllInvBody()
62 73
63 @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:inven") 74 @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:inven")
64 suspend fun deleteInvBody(inven: Int) 75 suspend fun deleteInvBody(inven: Int)
65 76
66 @Query("UPDATE $TABLA_INV_B SET CANT=:cant WHERE SEC=:sec AND COD=:cod") 77 @Query("UPDATE $TABLA_INV_B SET CANT=:cant WHERE SEC=:sec AND COD=:cod")
67 suspend fun UpdateInvBody(cant: Float, sec: String, cod: String) 78 suspend fun UpdateInvBody(cant: Float, sec: String, cod: String)
68 79
69 @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:inven ORDER BY INV_FEI DESC") 80 @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:inven ORDER BY INV_FEI DESC")
70 suspend fun fetchAllInvBody(inven:Int): List<InvBody> 81 suspend fun fetchAllInvBody(inven: Int): List<InvBody>
71 82
72 @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:numInventario AND SEC=:sector AND COD=:codigo") 83 @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:numInventario AND SEC=:sector AND COD=:codigo")
73 suspend fun fetchArtInInvBody(sector: String, codigo: String, numInventario: String): InvBody 84 suspend fun fetchArtInInvBody(sector: String, codigo: String, numInventario: String): InvBody
74 85
75 @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:numInventario AND SEC=:sector AND COD=:codigo") 86 @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:numInventario AND SEC=:sector AND COD=:codigo")
76 suspend fun deleteItemFromInvBody(sector: String, codigo: String, numInventario: String): Int 87 suspend fun deleteItemFromInvBody(sector: String, codigo: String, numInventario: String): Int
77 } 88 }
89
78 @Dao 90 @Dao
79 interface ServeInvDao { 91 interface ServeInvDao {
80 @Insert(onConflict = OnConflictStrategy.REPLACE) 92 @Insert(onConflict = OnConflictStrategy.REPLACE)
81 fun insertServer(servidor: ServeInv) 93 fun insertServer(servidor: ServeInv)
82 94
83 @Query("SELECT * FROM $TABLA_SERV_INV ORDER BY SER_NUM") 95 @Query("SELECT * FROM $TABLA_SERV_INV ORDER BY SER_NUM")
84 suspend fun fetchAllServers(): List<ServeInv> 96 suspend fun fetchAllServers(): List<ServeInv>
85 97
86 @Query("DELETE FROM $TABLA_SERV_INV WHERE SER_DESC LIKE :description AND SER_DIR LIKE :dir") 98 @Query("DELETE FROM $TABLA_SERV_INV WHERE SER_DESC LIKE :description AND SER_DIR LIKE :dir")
87 suspend fun deleteServer(description: String, dir: String) 99 suspend fun deleteServer(description: String, dir: String)
88 100
89 @Query("SELECT SER_NUM FROM $TABLA_SERV_INV ORDER BY SER_NUM DESC") 101 @Query("SELECT SER_NUM FROM $TABLA_SERV_INV ORDER BY SER_NUM DESC")
90 suspend fun findLastServer(): Int 102 suspend fun findLastServer(): Int
91 103
92 @Query("UPDATE $TABLA_SERV_INV SET SER_PRE=0") 104 @Query("UPDATE $TABLA_SERV_INV SET SER_PRE=0")
93 suspend fun UpdateServerPreInZero() 105 suspend fun UpdateServerPreInZero()
94 106
95 @Query("UPDATE $TABLA_SERV_INV SET SER_PRE=1 WHERE SER_NUM = :numero") 107 @Query("UPDATE $TABLA_SERV_INV SET SER_PRE=1 WHERE SER_NUM = :numero")
96 suspend fun UpdateServerPre(numero: Int) 108 suspend fun UpdateServerPre(numero: Int)
97 109
98 @Query("SELECT * FROM $TABLA_SERV_INV WHERE SER_PRE= 1") 110 @Query("SELECT SER_DIR FROM $TABLA_SERV_INV WHERE SER_PRE= 1")
99 suspend fun fetchServerPreOne(): ServeInv 111 suspend fun fetchServerPreOne(): String
100 } 112 }
app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt
1 package com.focasoftware.deboinventariov20.DB.DataBase 1 package com.focasoftware.deboinventariov20.DB.DataBase
2 2
3 import android.content.Context 3 import android.content.Context
4 import androidx.room.Database 4 import androidx.room.Database
5 import androidx.room.Room 5 import androidx.room.Room
6 import androidx.room.RoomDatabase 6 import androidx.room.RoomDatabase
7 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans 7 import com.focasoftware.deboinventariov20.DB.Constans.Constans
8 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART
9 import com.focasoftware.deboinventariov20.DB.DAO.* 8 import com.focasoftware.deboinventariov20.DB.DAO.*
10 import com.focasoftware.deboinventariov20.Model.Articles 9 import com.focasoftware.deboinventariov20.Model.Articles
11 import com.focasoftware.deboinventariov20.Model.InvBody 10 import com.focasoftware.deboinventariov20.Model.InvBody
12 import com.focasoftware.deboinventariov20.Model.InvHead 11 import com.focasoftware.deboinventariov20.Model.InvHead
13 import com.focasoftware.deboinventariov20.Model.ServeInv 12 import com.focasoftware.deboinventariov20.Model.ServeInv
14 13
15 14
16 @Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false) 15 @Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false)
17 abstract class AppDb : RoomDatabase() { 16 abstract class AppDb : RoomDatabase() {
18 abstract fun ArticulosDAO(): ArticulosDAO? 17 abstract fun ArticulosDAO(): ArticulosDAO?
19 abstract fun InvHeadDAO(): InvHeadDAO? 18 abstract fun InvHeadDAO(): InvHeadDAO?
20 abstract fun InvBodyDAO(): InvBodyDAO? 19 abstract fun InvBodyDAO(): InvBodyDAO?
21 abstract fun ServeInvDao(): ServeInvDao? 20 abstract fun ServeInvDao(): ServeInvDao?
22 21
23 companion object { 22 companion object {
24 private var INSTANCE: AppDb? = null 23 private var INSTANCE: AppDb? = null
25 fun getAppDb(context: Context): AppDb? { 24 fun getAppDb(context: Context): AppDb? {
26 if (INSTANCE == null) { 25 if (INSTANCE == null) {
27 INSTANCE = Room.databaseBuilder( 26 INSTANCE = Room.databaseBuilder(context.applicationContext, AppDb::class.java, Constans.DB_NAME)
28 context.applicationContext,
29 AppDb::class.java,
30 Constans.DB_NAME
31 )
32 .allowMainThreadQueries() 27 .allowMainThreadQueries()
33 .build() 28 .build()
34 } 29 }
35 return INSTANCE 30 return INSTANCE
36 } 31 }
37 32
38 fun destroyInstance() { 33 fun destroyInstance() {
39 INSTANCE = null 34 INSTANCE = null
40 } 35 }
41 } 36 }
42 } 37 }
app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt
1 package com.focasoftware.deboinventariov20.Model 1 package com.focasoftware.deboinventariov20.Model
2 2
3 import com.focasoftware.deboinventariov20.ui.actualizacionMaestros.BASE_URL 3 import com.focasoftware.deboinventariov20.UI.actualizacionMaestros.BASE_URL
4 import retrofit2.Retrofit 4 import retrofit2.Retrofit
5 import retrofit2.converter.gson.GsonConverterFactory 5 import retrofit2.converter.gson.GsonConverterFactory
6 6
7 object ProductosService { 7 object ProductosService {
8 // private val BASE_URL ="http://10.0.2.2:3000/"
9 // // //"http://192.168.0.2:3000/"
10
11
12 fun getProductosService(): ProductosApi { 8 fun getProductosService(): ProductosApi {
13 return Retrofit.Builder() 9 return Retrofit.Builder()
14 .baseUrl(BASE_URL) 10 .baseUrl(BASE_URL)
15 .addConverterFactory(GsonConverterFactory.create()) 11 .addConverterFactory(GsonConverterFactory.create())
16 .build() 12 .build()
17 .create(ProductosApi::class.java) 13 .create(ProductosApi::class.java)
18 } 14 }
19 } 15 }
app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt
1 package com.focasoftware.deboinventariov20.Model 1 package com.focasoftware.deboinventariov20.Model
2 2
3 import androidx.room.ColumnInfo 3 import androidx.room.ColumnInfo
4 import androidx.room.Entity 4 import androidx.room.Entity
5 import androidx.room.PrimaryKey 5 import androidx.room.PrimaryKey
6 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART 6 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_ART
7 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B 7 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_INV_B
8 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H 8 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_INV_H
9 import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV 9 import com.focasoftware.deboinventariov20.DB.Constans.Constans.Companion.TABLA_SERV_INV
10 import com.google.gson.annotations.SerializedName 10 import com.google.gson.annotations.SerializedName
11 import java.io.Serializable 11 import java.io.Serializable
12 12
13 data class Productos(@SerializedName("SEC") var sector: String?, 13 data class Productos(@SerializedName("SEC") var sector: String?,
14 @SerializedName("COD") var codigo: String?, 14 @SerializedName("COD") var codigo: String?,
15 @SerializedName("DESC") var descripcion: String?, 15 @SerializedName("DESC") var descripcion: String?,
16 @SerializedName("CB") var codBar: String?, 16 @SerializedName("CB") var codBar: String?,
17 @SerializedName("CBC") var codOrigen: String?, 17 @SerializedName("CBC") var codOrigen: String?,
18 @SerializedName("PRE_VTA") var precio: String?, 18 @SerializedName("PRE_VTA") var precio: String?,
19 @SerializedName("PRE_COS") var costo: String?, 19 @SerializedName("PRE_COS") var costo: String?,
20 @SerializedName( "EV") var exiVenta: String?, 20 @SerializedName( "EV") var exiVenta: String?,
21 @SerializedName( "ED") var exiDeposito: String?, 21 @SerializedName( "ED") var exiDeposito: String?,
22 @SerializedName( "DE") var de: String?, 22 @SerializedName( "DE") var de: String?,
23 @SerializedName( "BAL") var balanza: Int?, 23 @SerializedName( "BAL") var balanza: Int?,
24 @SerializedName("DEPSN") var depSn: Int?, 24 @SerializedName("DEPSN") var depSn: Int?,
25 @SerializedName("FOTO") var imagen: String?) 25 @SerializedName("FOTO") var imagen: String?)
26 26
27 @Entity(tableName = TABLA_ART) 27 @Entity(tableName = TABLA_ART)
28 data class Articles(@ColumnInfo(name = "SEC") var sector: String?, 28 data class Articles(@ColumnInfo(name = "SEC") var sector: String?,
29 @ColumnInfo(name = "COD") var codigo: String?, 29 @ColumnInfo(name = "COD") var codigo: String?,
30 @ColumnInfo(name = "DES") var descripcion: String?, 30 @ColumnInfo(name = "DES") var descripcion: String?,
31 @ColumnInfo(name = "CB") var codBar: String?, 31 @ColumnInfo(name = "CB") var codBar: String?,
32 @ColumnInfo(name = "CBC") var codOrigen: String?, 32 @ColumnInfo(name = "CBC") var codOrigen: String?,
33 @ColumnInfo(name = "PRE_VTA") var precio: String?, 33 @ColumnInfo(name = "PRE_VTA") var precio: String?,
34 @ColumnInfo(name = "PRE_COS") var costo: String?, 34 @ColumnInfo(name = "PRE_COS") var costo: String?,
35 @ColumnInfo(name = "EV") var exiVenta: String?, 35 @ColumnInfo(name = "EV") var exiVenta: String?,
36 @ColumnInfo(name = "ED") var exiDeposito: String?, 36 @ColumnInfo(name = "ED") var exiDeposito: String?,
37 @ColumnInfo(name = "DE") var de: String?, 37 @ColumnInfo(name = "DE") var de: String?,
38 @ColumnInfo(name = "BAL") var balanza: Int?, 38 @ColumnInfo(name = "BAL") var balanza: Int?,
39 @ColumnInfo(name = "DEPSN") var depSn: Int?, 39 @ColumnInfo(name = "DEPSN") var depSn: Int?,
40 @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { 40 @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable {
41 @PrimaryKey(autoGenerate = true) 41 @PrimaryKey(autoGenerate = true)
42 @ColumnInfo(name = "id") 42 @ColumnInfo(name = "id")
43 var id: Long = 0 43 var id: Long = 0
44 } 44 }
45 45
46 46
47 @Entity(tableName = TABLA_INV_H) 47 @Entity(tableName = TABLA_INV_H)
48 data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int, 48 data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int,
49 @ColumnInfo(name = "INV_DESC") var descripcion: String?, 49 @ColumnInfo(name = "INV_DESC") var descripcion: String?,
50 @ColumnInfo(name = "ESTADO") var estado: Int?, 50 @ColumnInfo(name = "ESTADO") var estado: Int?,
51 @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, 51 @ColumnInfo(name = "INV_FEI") var fechaInicio: String?,
52 @ColumnInfo(name = "INV_FEF") var fechaFinal: String?, 52 @ColumnInfo(name = "INV_FEF") var fechaFinal: String?,
53 // productos contados en el inventario 53 // productos contados en el inventario
54 @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?, 54 @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?,
55 @ColumnInfo(name = "INV_LUG") var lugar: Int?, 55 @ColumnInfo(name = "INV_LUG") var lugar: Int?,
56 // Solo se ajustan los productos incluidos en el conteo=0 56 // Solo se ajustan los productos incluidos en el conteo=0
57 // Ajusta productos no incluidos en el conteo con stock en cero=1 57 // Ajusta productos no incluidos en el conteo con stock en cero=1
58 @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?, 58 @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?,
59 // Mostror stock en el sistema al momento de la descarga del maestro. 59 // Mostror stock en el sistema al momento de la descarga del maestro.
60 @ColumnInfo(name = "MOSTRAR_STOCK") var proNoCont: Int?) 60 @ColumnInfo(name = "MOSTRAR_STOCK") var proNoCont: Int?)
61 61
62 62
63 @Entity(tableName = TABLA_INV_B) 63 @Entity(tableName = TABLA_INV_B)
64 data class InvBody(@ColumnInfo(name = "INV_NUM") var invNum: Int, 64 data class InvBody(@ColumnInfo(name = "INV_NUM") var invNum: Int,
65 @ColumnInfo(name = "SEC") var sector: String?, 65 @ColumnInfo(name = "SEC") var sector: String?,
66 @ColumnInfo(name = "COD") var codigo: String?, 66 @ColumnInfo(name = "COD") var codigo: String?,
67 @ColumnInfo(name = "DES") var descripcion: String?, 67 @ColumnInfo(name = "DES") var descripcion: String?,
68 @ColumnInfo(name = "CANT") var cantTomada: String?, 68 @ColumnInfo(name = "CANT") var cantTomada: String?,
69 @ColumnInfo(name = "CB") var codBar: String?, 69 @ColumnInfo(name = "CB") var codBar: String?,
70 @ColumnInfo(name = "CBC") var codOrigen: String?, 70 @ColumnInfo(name = "CBC") var codOrigen: String?,
71 @ColumnInfo(name = "PRE_VTA") var precio: String?, 71 @ColumnInfo(name = "PRE_VTA") var precio: String?,
72 @ColumnInfo(name = "PRE_COS") var costo: String?, 72 @ColumnInfo(name = "PRE_COS") var costo: String?,
73 @ColumnInfo(name = "BAL") var balanza: Int?, 73 @ColumnInfo(name = "BAL") var balanza: Int?,
74 @ColumnInfo(name = "DSN") var depSn: Int?, 74 @ColumnInfo(name = "DSN") var depSn: Int?,
75 @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, 75 @ColumnInfo(name = "INV_FEI") var fechaInicio: String?,
76 @ColumnInfo(name = "INV_FEF") var fechaFinal: String?) : Serializable { 76 @ColumnInfo(name = "INV_FEF") var fechaFinal: String?) : Serializable {
77 @PrimaryKey(autoGenerate = true) 77 @PrimaryKey(autoGenerate = true)
78 @ColumnInfo(name = "id") 78 @ColumnInfo(name = "id")
79 var id: Long = 0 79 var id: Long = 0
80 } 80 }
81 81
82 @Entity(tableName = TABLA_SERV_INV) 82 @Entity(tableName = TABLA_SERV_INV)
83 data class ServeInv( 83 data class ServeInv(
84 @ColumnInfo(name = "SER_DESC") var descripcion: String?, 84 @ColumnInfo(name = "SER_DESC") var descripcion: String?,
85 @ColumnInfo(name = "SER_DIR") var direccion: String?, 85 @ColumnInfo(name = "SER_DIR") var direccion: String?,
86 @ColumnInfo(name = "SER_PRE") var predeterminado: Int?): 86 @ColumnInfo(name = "SER_PRE") var predeterminado: Int?):
87 Serializable { @PrimaryKey(autoGenerate = true) 87 Serializable { @PrimaryKey(autoGenerate = true)
88 @ColumnInfo(name = "SER_NUM") 88 @ColumnInfo(name = "SER_NUM")
89 var servNum: Int=0 89 var servNum: Int=0
90 } 90 }
91 91
92 92
93 93
app/src/main/java/com/focasoftware/deboinventariov20/UI/MainActivity.kt
File was created 1 package com.focasoftware.deboinventariov20.UI
2
3 import android.os.Bundle
4 import android.view.Menu
5 import com.google.android.material.navigation.NavigationView
6 import androidx.navigation.findNavController
7 import androidx.navigation.ui.AppBarConfiguration
8 import androidx.navigation.ui.navigateUp
9 import androidx.navigation.ui.setupActionBarWithNavController
10 import androidx.navigation.ui.setupWithNavController
11 import androidx.drawerlayout.widget.DrawerLayout
12 import androidx.appcompat.app.AppCompatActivity
13 import androidx.appcompat.widget.Toolbar
14 import com.focasoftware.deboinventariov20.R
15
16 class MainActivity : AppCompatActivity() {
17
18 private lateinit var appBarConfiguration: AppBarConfiguration
19
20 override fun onCreate(savedInstanceState: Bundle?) {
21 super.onCreate(savedInstanceState)
22 setContentView(R.layout.activity_main)
23 val toolbar: Toolbar = findViewById(R.id.toolbar)
24 setSupportActionBar(toolbar)
25
26
27 val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
28 val navView: NavigationView = findViewById(R.id.nav_view)
29 val navController = findNavController(R.id.nav_host_fragment)
30
31 appBarConfiguration = AppBarConfiguration(setOf(R.id.mainFragment2, R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout)
32 setupActionBarWithNavController(navController, appBarConfiguration)
33 navView.setupWithNavController(navController)
34 }
35
36 override fun onCreateOptionsMenu(menu: Menu): Boolean {
37 // Inflate the menu; this adds items to the action bar if it is present.
38 menuInflater.inflate(R.menu.main, menu)
39 return true
40 }
41
42 override fun onSupportNavigateUp(): Boolean {
43 val navController = findNavController(R.id.nav_host_fragment)
44 return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
45 }
46 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/SplashActivity.kt
File was created 1 package com.focasoftware.deboinventariov20.UI
2
3 import android.app.Activity
4 import android.content.Intent
5 import android.os.Bundle
6 import com.focasoftware.deboinventariov20.R
7
8 class SplashActivity : Activity() {
9
10 override fun onCreate(savedInstanceState: Bundle?) {
11 super.onCreate(savedInstanceState)
12 setContentView(R.layout.activity_splash)
13 //window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
14
15 val bac = object : Thread(){
16 override fun run(){
17 try {
18 Thread.sleep(5)
19 val intent = Intent(baseContext, MainActivity:: class.java)
20 startActivity(intent)
21 finish()
22 } catch (e : Exception){
23 e.printStackTrace()
24 }
25 }
26 }
27 bac.start()
28 }
29 }
30
app/src/main/java/com/focasoftware/deboinventariov20/UI/Utils/BaseViewHolder.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.Utils
2
3 import android.view.View
4 import androidx.recyclerview.widget.RecyclerView
5
6 abstract class BaseViewHolder<T>(itemView: View):RecyclerView.ViewHolder(itemView) {
7 abstract fun bind(item: T, position: Int)
8 }
9
10
app/src/main/java/com/focasoftware/deboinventariov20/UI/Utils/Utils.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.Utils
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.content.Context
6 import android.os.Bundle
7 import androidx.fragment.app.DialogFragment
8 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
9 import kotlinx.coroutines.Dispatchers
10 import kotlinx.coroutines.GlobalScope
11 import kotlinx.coroutines.async
12
13 fun modificarCantidadEnCabecera(inventarioActual: Int, b: Boolean,context: Context) {
14 GlobalScope.async(Dispatchers.IO) {
15 var cantProductos = 0
16 cantProductos = AppDb.getAppDb(context)!!.InvHeadDAO()!!.consultaCantidadInvH(inventarioActual)
17 if (b) {
18 AppDb.getAppDb(context)!!.InvHeadDAO()!!.updateInvBody(inventarioActual, cantProductos + 1)
19 } else {
20 AppDb.getAppDb(context)!!.InvHeadDAO()!!.updateInvBody(inventarioActual, cantProductos - 1)
21 }
22 }
23 }
24
25 open class AlertDialogBorrarInv : DialogFragment() {
26
27 interface OnBorrarInvClickListener {
28 fun onPositiveClick()
29 fun onCancelClick()
30 }
31
32 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
33 return activity?.let {
34 val title = "Borrar Inventario"
35 val content = "ยฟSeguro que desea Borrar el inventario?"
36 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
37 builder.setTitle(title).setMessage(content)
38 .setPositiveButton(android.R.string.ok) { _, _ ->
39 val listener = activity as OnBorrarInvClickListener?
40 listener!!.onPositiveClick()
41 }
42 .setNegativeButton(android.R.string.cancel) { _, _ ->
43 val listener = activity as OnBorrarInvClickListener?
44 listener!!.onCancelClick()
45 }
46 return builder.create()
47 } ?: throw IllegalStateException("Activity cannot be null")
48 }
49 public fun Int.twoDigits() =
50 if (this <= 9) "0$this" else this.toString()}
51
52 public class NoEncontradoSimple : DialogFragment() {
53 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
54 return activity?.let {
55 val title = ""
56 val content = "ยกEl producto buscado NO fue encontrado!"
57 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
58 builder.setTitle(title).setMessage(content).setPositiveButton(android.R.string.ok) { _, _ ->
59 //Todo OK click
60 }
61
62 return builder.create()
63 } ?: throw IllegalStateException("Activity cannot be null")
64 }
65 }
66 public class noServerConf : DialogFragment() {
67 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
68 return activity?.let {
69 val title = ""
70 val content = "ยกAntes de importar debe configurar un servidor!"
71 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
72 builder.setTitle(title).setMessage(content)
73 .setPositiveButton(android.R.string.ok) { _, _ ->
74 activity?.onBackPressed();
75 }
76
77 return builder.create()
78 } ?: throw IllegalStateException("Activity cannot be null")
79 }
80 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/actualizacionMaestros/ActuaMaestrosFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.actualizacionMaestros
2
3 import android.os.Bundle
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import android.widget.Button
8 import androidx.fragment.app.Fragment
9 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
10 import com.focasoftware.deboinventariov20.Model.Articles
11 import com.focasoftware.deboinventariov20.Model.ProductosService
12 import com.focasoftware.deboinventariov20.R
13 import com.focasoftware.deboinventariov20.UI.Utils.noServerConf
14 import kotlinx.android.synthetic.main.fragment_actua_maestros.*
15 import kotlinx.coroutines.*
16 import kotlinx.coroutines.Dispatchers.IO
17 import kotlinx.coroutines.Dispatchers.Main
18
19 var BASE_URL = ""
20
21 class ActuaMaestrosFragment : Fragment() {
22
23 override fun onCreate(savedInstanceState: Bundle?) {
24 super.onCreate(savedInstanceState)
25 GlobalScope.launch(Main) {
26 val serverPre = fetchServerPreOne()
27 if (serverPre.isNullOrEmpty()) {
28 val modalDialog = noServerConf()
29 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
30 } else {
31 BASE_URL = serverPre.toString()
32 }
33 }
34 // mostrarArticulos()
35 }
36
37 private suspend fun fetchServerPreOne(): String? {
38 return GlobalScope.async(IO) {
39 return@async AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.fetchServerPreOne()
40 }.await()
41 }
42
43 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
44 // Inflate the layout for this fragment
45 val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false)
46 val bConfirmarAct = v.findViewById<Button>(R.id.btnConfirmarAct)
47 bConfirmarAct.setOnClickListener {
48 loading_view.visibility = View.VISIBLE
49 countriesList.text = "Obteniendo artรญculos del servidor $BASE_URL, aguarde por favor."
50 GlobalScope.launch(Main) {
51 obtenerArticulos()
52 }
53 }
54 return v
55 }
56
57
58 private suspend fun obtenerArticulos() {
59
60 val productosService = ProductosService.getProductosService()
61 var index: Long = 1
62 withContext(IO) {
63 val job = CoroutineScope(Dispatchers.IO).launch {
64 // TODO: BORRO TODO LOS ARTICULOS DE LA BASE PARA CARGARLOS DE NUEVO
65 AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!.deleteAllArticulos()
66
67 val response = productosService.getProductos()
68 if (response.isSuccessful) {
69 for (pro in response.body()!!) {
70 val artiAcargar = Articles(pro.sector,
71 pro.codigo,
72 pro.descripcion,
73 pro.codBar,
74 pro.codOrigen,
75 pro.precio,
76 pro.costo,
77 pro.exiVenta,
78 pro.exiDeposito,
79 pro.de,
80 pro.balanza,
81 pro.depSn,
82 pro.imagen)
83 index += index
84 AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!.insertArticulos(artiAcargar)
85 }
86 withContext(Main) {
87 countriesList.visibility = View.VISIBLE
88 countriesList.text = "ยกDatos Importados Correctamente!"
89 loading_view.visibility = View.GONE
90 }
91 }
92 }
93 if (job == null) {
94 withContext(Main) {
95 countriesList.visibility = View.VISIBLE
96 countriesList.text = "No se puedo realizar la conexiรณn al Servidor"
97 loading_view.visibility = View.GONE
98 }
99 }
100 }
101
102 // withContext(Dispatchers.Main) {
103 // if (response.isSuccessful) {
104 // val call = WebService
105 // .instance
106 // ?.createService(WebServiceApi::class.java)
107 // ?.articulos
108 // call?.enqueue(object : Callback<List<productos?>?> {
109 // override fun onResponse(
110 // call: Call<List<productos?>?>,
111 // response: Response<List<productos?>?>
112 // ) {
113 // if (response.code() == 200) {
114 // for (i in response.body()!!.indices) {
115 // //AppDb.getAppDb(requireActivity())!!.ArticulosDAO()?.insertArticulos(response.body()!![i])
116 // cargarArticulos(2, 500, "sfas", "66666","2,2", "2,2", false, false, "")
117 //// Log.d(
118 //// "TAG1", "Nombre Curso: " + response.body()!![i]?.sector
119 //// + "Codigo Profesor: " + response.body()!![i]?.descripcion
120 //// )
121 // mostrarArticulos()
122 // }
123 // } else if (response.code() == 404) {
124 // Log.d("TAG1", "No hay cursos")
125 // }
126 //
127 // }
128 //
129 // override fun onFailure(call: Call<List<productos?>?>, t: Throwable) {}
130 // })
131 }
132
133 fun mostrarArticulos() {
134 val Job = GlobalScope.launch {
135 var listArticulos: List<Articles>? = null
136 var temp: String = ""
137 listArticulos = AppDb.getAppDb(requireActivity())?.ArticulosDAO()?.findAllArticulos()
138 if (listArticulos != null) {
139
140 for (i in listArticulos.indices) temp += listArticulos[i].codigo.toString()
141 }
142 withContext(Dispatchers.Main) {
143 countriesList.visibility = View.VISIBLE
144 loading_view.visibility = View.GONE
145 countriesList?.text = temp
146 }
147 }
148 // for (professor in listArticulos!!) {
149 // editT.text= professor.id.toString()
150 // }
151 }
152
153
154 // fun observeViewModel() {
155 //
156 // val productosService = ProductosService.getProductosService()
157 // var job: Job? = null
158 //
159 //
160 // //countriesList.text="Procesando..."
161 // //countriesList.visibility = View.VISIBLE
162 // // GlobalScope1.launch(Dispatchers.IO) {
163 // val response = productosService.getProductos()
164 // if (response.isSuccessful) {
165 //// countriesList.layoutManager = LinearLayoutManager(context)
166 //// countriesList.itemAnimator = DefaultItemAnimator()
167 //
168 //// ProductAdapter.updateCountries(it)
169 // // cargarArticulos(response.body())
170 //
171 //
172 // val artiAcargar: Articulos? = null
173 // var index: Long = 1
174 //
175 // for (pro in response.body()!!) {
176 // //artiAcargar.id =index+1
177 // artiAcargar!!.sector = pro.sector
178 // artiAcargar.codigo = pro.codigo
179 // artiAcargar.descripcion = pro.descripcion
180 // artiAcargar.codBar = pro.codBar
181 // artiAcargar.precio = pro.precio
182 // artiAcargar.costo = pro.costo
183 // artiAcargar.balanza = pro.balanza
184 // artiAcargar.depSn = pro.depSn
185 // artiAcargar.imagen = pro.imagen
186 // index += index
187 //
188 // AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
189 // .insertArticulos(artiAcargar)
190 // }
191 // }
192 // // }
193 //
194 // //job.cancel()
195 //
196 //
197 // }
198
199 // fun cargarArticulos(Productos: List<Productos>?) {
200 // val artiAcargar: Articulos? = null
201 // var index: Long = 1
202 // //val job4 = CoroutineScope(Dispatchers.Default).launch {
203 // for (pro in Productos!!) {
204 // //artiAcargar.id =index+1
205 // artiAcargar!!.sector = pro.sector
206 // artiAcargar.codigo = pro.codigo
207 // artiAcargar.descripcion = pro.descripcion
208 // artiAcargar.codBar = pro.codBar
209 // artiAcargar.precio = pro.precio
210 // artiAcargar.costo = pro.costo
211 // artiAcargar.balanza = pro.balanza
212 // artiAcargar.depSn = pro.depSn
213 // artiAcargar.imagen = pro.imagen
214 // index += index
215 //
216 // AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
217 // .insertArticulos(artiAcargar)
218 // }
219 // }
220 }
221
222
app/src/main/java/com/focasoftware/deboinventariov20/UI/configuracion/ConfiguracionFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.configuracion
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import android.widget.*
10 import androidx.fragment.app.Fragment
11 import androidx.fragment.app.FragmentActivity
12 import androidx.lifecycle.lifecycleScope
13 import androidx.navigation.NavController
14 import androidx.navigation.Navigation
15 import androidx.navigation.fragment.findNavController
16 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
17 import com.focasoftware.deboinventariov20.Model.ServeInv
18 import com.focasoftware.deboinventariov20.R
19 import kotlinx.android.synthetic.main.fragment_configuracion.*
20 import kotlinx.coroutines.*
21 import kotlinx.coroutines.Dispatchers.Main
22
23 class ConfiguracionFragment : Fragment() {
24
25 lateinit var sharedPreferences: SharedPreferences
26 private lateinit var navController: NavController
27 var itemSelect: Int = 0
28 var indexSelect: Int = 0
29
30 override fun onCreate(savedInstanceState: Bundle?) {
31 super.onCreate(savedInstanceState)
32 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
33 }
34
35 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
36 super.onViewCreated(view, savedInstanceState)
37 navController = Navigation.findNavController(view)
38 GlobalScope.launch(Main) {
39 val listServer = mutableListOf<String>()
40 for (server in getDescServers()) {
41 listServer.add((if (server.servNum < 9) "0" + server.servNum.toString() else server.servNum.toString()) + " - " + server.descripcion.toString())
42 }
43 val adapterSpServer = ArrayAdapter(requireContext(), R.layout.support_simple_spinner_dropdown_item, listServer)
44 spServidor.adapter = adapterSpServer
45 if (sharedPreferences.contains("ServerPredeterminado")) {
46 spServidor.setSelection(sharedPreferences.getString("ServerPredeterminado", "").toString().toInt())
47 } else (spServidor.setSelection(0))
48 }
49 }
50
51 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
52
53 val v = inflater.inflate(R.layout.fragment_configuracion, container, false)
54 val etRuta = v.findViewById<EditText>(R.id.etRuta)
55 val btnGuardar = v.findViewById<Button>(R.id.btnGuardar)
56 val rbProInclu = v.findViewById<RadioButton>(R.id.rbProInclu)
57 val rbProNoInclu = v.findViewById<RadioButton>(R.id.rbProNoInclu)
58 val cbHabiLectura = v.findViewById<CheckBox>(R.id.cbHabiLectura)
59 val cbMostrarStock = v.findViewById<CheckBox>(R.id.cbMostrarStock)
60 val rbCodigoBarras = v.findViewById<RadioButton>(R.id.rbCodigoBarras)
61 val rbCodigoDebo = v.findViewById<RadioButton>(R.id.rbCodigoDebo)
62 val rbCodigoOrigen = v.findViewById<RadioButton>(R.id.rbCodigoOrigen)
63 val rbDeposito = v.findViewById<RadioButton>(R.id.rbDeposito)
64 val rbVentas = v.findViewById<RadioButton>(R.id.rbVentas)
65 val cbMostrarExistencia = v.findViewById<CheckBox>(R.id.cbMostrarExistencia)
66 val cbMostrarPrecio = v.findViewById<CheckBox>(R.id.cbMostrarPrecio)
67 val btnAgregarServidor = v.findViewById<Button>(R.id.btnAgregarServidor)
68 val spServidor = v.findViewById<Spinner>(R.id.spServidor)
69 val btnValidarServidor = v.findViewById<Button>(R.id.btnValidarServidor)
70
71 if (sharedPreferences.contains("etRuta")) if (sharedPreferences.contains("rbProInclu")) {
72 if (sharedPreferences.getString("rbProInclu", "").toString() == "0") {
73 rbProInclu.isChecked = false
74 rbProNoInclu.isChecked = true
75 } else if (sharedPreferences.getString("rbProInclu", "").toString() == "1") {
76 rbProInclu.isChecked = true
77 rbProNoInclu.isChecked = false
78 }
79 } else (sharedPreferences.getString("rbProInclu", "").toString() == "")
80
81 if (sharedPreferences.contains("rbProNoInclu")) {
82 if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") {
83 rbProNoInclu.isChecked = false
84 rbProInclu.isChecked = true
85 } else if (sharedPreferences.getString("rbProNoInclu", "").toString() == "1") {
86 rbProNoInclu.isChecked = true
87 rbProInclu.isChecked = false
88 }
89 } else (sharedPreferences.getString("rbProNoInclu", "").toString() == "")
90
91 if (sharedPreferences.contains("cbHabiLectura")) {
92 if (sharedPreferences.getString("cbHabiLectura", "").toString() == "0") {
93 cbHabiLectura.isChecked = false
94 } else if (sharedPreferences.getString("cbHabiLectura", "").toString() == "1") {
95 cbHabiLectura.isChecked = true
96 }
97 } else (sharedPreferences.getString("cbHabiLectura", "").toString() == "")
98
99 if (sharedPreferences.contains("cbMostrarStock")) {
100 if (sharedPreferences.getString("cbMostrarStock", "").toString() == "0") {
101 cbMostrarStock.isChecked = false
102 } else if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") {
103 cbMostrarStock.isChecked = true
104 }
105 } else (sharedPreferences.getString("cbMostrarStock", "").toString() == "")
106
107 if (sharedPreferences.contains("rbVentas")) {
108 if (sharedPreferences.getString("rbVentas", "").toString() == "0") {
109 rbVentas.isChecked = false
110 rbDeposito.isChecked = true
111 } else if (sharedPreferences.getString("rbVentas", "").toString() == "1") {
112 rbVentas.isChecked = true
113 rbDeposito.isChecked = false
114 }
115 } else (sharedPreferences.getString("rbVentas", "").toString() == "")
116
117 if (sharedPreferences.contains("rbDeposito")) {
118 if (sharedPreferences.getString("rbDeposito", "").toString() == "0") {
119 rbDeposito.isChecked = false
120 rbVentas.isChecked = true
121 } else if (sharedPreferences.getString("rbDeposito", "").toString() == "1") {
122 rbDeposito.isChecked = true
123 rbVentas.isChecked = false
124 }
125 } else (sharedPreferences.getString("rbDeposito", "").toString() == "")
126
127 if (sharedPreferences.contains("rbCodigoDebo")) {
128 if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "0") {
129 rbCodigoDebo.isChecked = false
130 rbCodigoOrigen.isChecked = false
131 rbCodigoBarras.isChecked = false
132 } else if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "1") {
133 rbCodigoDebo.isChecked = true
134 rbCodigoOrigen.isChecked = false
135 rbCodigoBarras.isChecked = false
136 }
137 } else (sharedPreferences.getString("rbCodigoDebo", "").toString() == "")
138
139 if (sharedPreferences.contains("rbCodigoOrigen")) {
140 if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "0") {
141 rbCodigoOrigen.isChecked = false
142 } else if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "1") {
143 rbCodigoOrigen.isChecked = true
144 }
145 } else (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "")
146
147 if (sharedPreferences.contains("rbCodigoBarras")) {
148 if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "0") {
149 rbCodigoBarras.isChecked = false
150 } else if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "1") {
151 rbCodigoBarras.isChecked = true
152 }
153 } else (sharedPreferences.getString("rbCodigoBarras", "").toString() == "")
154
155 if (sharedPreferences.contains("cbMostrarExistencia")) {
156 if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "0") {
157 cbMostrarExistencia.isChecked = false
158 } else if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "1") {
159 cbMostrarExistencia.isChecked = true
160 }
161 } else (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "")
162
163 if (sharedPreferences.contains("cbMostrarPrecio")) {
164 if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "0") {
165 cbMostrarPrecio.isChecked = false
166 } else if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "1") {
167 cbMostrarPrecio.isChecked = true
168 }
169 } else (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "")
170
171 btnGuardar.setOnClickListener {
172 guardarPreferencias()
173 Toast.makeText(v.context, "Los Datos se guardaron correctamente", Toast.LENGTH_LONG).show()
174 navController.navigate(R.id.action_configuracionFragment_to_mainFragment2)
175 }
176 btnAgregarServidor.setOnClickListener { findNavController().navigate(R.id.servidoresFragment) }
177
178 btnValidarServidor.setOnClickListener { Toast.makeText(requireContext(), "Direcciรณn correcta", Toast.LENGTH_LONG).show() }
179
180 spServidor.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
181 override fun onNothingSelected(parent: AdapterView<*>?) {}
182 override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
183 itemSelect = parent!!.getItemAtPosition(position).toString().substring(0, 2).toInt()
184 indexSelect=position
185 }
186 }
187 return v
188 }
189
190 suspend fun getDescServers(): List<ServeInv> {
191 return GlobalScope.async(Dispatchers.IO) {
192 return@async AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.fetchAllServers()
193 }.await()
194 }
195
196 fun guardarPreferencias() {
197 // try {
198 val editor = sharedPreferences.edit()
199
200 if (etRuta.text.isNotEmpty()) editor?.putString("etRuta", etRuta.text.toString())
201
202 if (rbProInclu.isChecked) editor?.putString("rbProInclu", "1") else editor?.putString("rbProInclu", "0")
203 if (rbProNoInclu.isChecked) editor?.putString("rbProNoInclu", "1") else editor?.putString("rbProNoInclu", "0")
204
205 if (cbHabiLectura.isChecked) editor?.putString("cbHabiLectura", "1") else editor?.putString("cbHabiLectura", "0")
206 if (cbMostrarStock.isChecked) editor?.putString("cbMostrarStock", "1") else editor?.putString("cbMostrarStock", "0")
207 if (rbVentas.isChecked) editor?.putString("rbVentas", "1") else editor?.putString("rbVentas", "0")
208 if (rbDeposito.isChecked) editor?.putString("rbDeposito", "1") else editor?.putString("rbDeposito", "0")
209 if (rbCodigoDebo.isChecked) editor?.putString("rbCodigoDebo", "1") else editor?.putString("rbCodigoDebo", "0")
210 if (rbCodigoOrigen.isChecked) editor?.putString("rbCodigoOrigen", "1") else editor?.putString("rbCodigoOrigen", "0")
211 if (rbCodigoBarras.isChecked) editor?.putString("rbCodigoBarras", "1") else editor?.putString("rbCodigoBarras", "0")
212 if (cbMostrarExistencia.isChecked) editor?.putString("cbMostrarExistencia", "1") else editor?.putString("cbMostrarExistencia", "0")
213 if (cbMostrarPrecio.isChecked) editor?.putString("cbMostrarPrecio", "1") else editor?.putString("cbMostrarPrecio", "0")
214 editor?.putString("ServerPredeterminado", indexSelect.toString())
215 updateServerPreInZero()
216 updateServerPre(itemSelect)
217
218 editor?.apply()
219 editor.commit()
220
221 // } catch (e: Exception) {
222 // Toast.makeText(requireContext(), "Error ", Toast.LENGTH_LONG).show()
223 // e.printStackTrace()
224 // }
225 }
226
227 private fun updateServerPreInZero() {
228 lifecycleScope.launch {
229 withContext(Dispatchers.IO) {
230 val activity: FragmentActivity? = activity
231 if (activity != null && isAdded) {
232 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.UpdateServerPreInZero()
233 }
234 }
235 }
236 }
237
238 private fun updateServerPre(server: Int) {
239 lifecycleScope.launch {
240 withContext(Dispatchers.IO) {
241 val activity: FragmentActivity? = activity
242 if (activity != null) {
243 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.UpdateServerPre(server)
244 }
245 }
246 }
247 }
248 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.descripcionFragment
2
3 import android.app.Activity
4 import android.app.AlertDialog
5 import android.content.Context
6 import android.content.SharedPreferences
7 import android.graphics.Canvas
8 import android.graphics.Color
9 import android.graphics.drawable.ColorDrawable
10 import android.os.Bundle
11 import android.text.InputType
12 import android.view.LayoutInflater
13 import android.view.View
14 import android.view.ViewGroup
15 import android.view.WindowManager
16 import android.view.inputmethod.InputMethodManager
17 import androidx.core.content.ContextCompat.getSystemService
18 import androidx.fragment.app.Fragment
19 import androidx.fragment.app.FragmentActivity
20 import androidx.lifecycle.lifecycleScope
21 import androidx.navigation.NavController
22 import androidx.navigation.Navigation
23 import androidx.recyclerview.widget.ItemTouchHelper
24 import androidx.recyclerview.widget.LinearLayoutManager
25 import androidx.recyclerview.widget.RecyclerView
26 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
27 import com.focasoftware.deboinventariov20.Model.Articles
28 import com.focasoftware.deboinventariov20.Model.InvBody
29 import com.focasoftware.deboinventariov20.R
30 import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera
31 import com.focasoftware.deboinventariov20.UI.inventario.InventarioFragment
32 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
33 import kotlinx.android.synthetic.main.login_dialog.view.*
34 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
35 import kotlinx.coroutines.*
36
37
38 class DescripcionFragment : Fragment() {
39 private var artAcargar2: List<Articles>? = null
40 private var listArticulos2: List<Articles>? = null
41 lateinit var viewAdapter2: RecyclerView.Adapter<*>
42 private lateinit var viewManager2: RecyclerView.LayoutManager
43 private lateinit var rcDescripcion: RecyclerView
44 private var swipeBackground: ColorDrawable = ColorDrawable(Color.YELLOW)
45 private var cantidad = 0F
46 private var numeroInventario = 0
47 lateinit var navController: NavController
48 lateinit var sharedPreferences: SharedPreferences
49 private var indice = 0
50 private var artCargadoEnBD: InvBody? = null
51
52 override fun onCreate(savedInstanceState: Bundle?) {
53 super.onCreate(savedInstanceState)
54 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
55 arguments.apply {
56 artAcargar2 = requireArguments().getSerializable("ArrayDesc") as List<Articles>
57 numeroInventario = requireArguments().getInt("numeroInv")
58 }
59
60 }
61 private fun showSoftKeyboard(view: View) {
62 if (view.requestFocus()) {
63 val imm = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
64 imm.showSoftInput(view, InputMethodManager.HIDE_IMPLICIT_ONLY)
65 }
66 }
67 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
68 super.onViewCreated(view, savedInstanceState)
69 navController = Navigation.findNavController(view)
70 showSoftKeyboard(view)
71 }
72
73 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
74 val v = inflater.inflate(R.layout.fragment_descripcion, container, false)
75 rcDescripcion = v.findViewById(R.id.rcDescripcion)
76 // val btnSalir = v.findViewById<Button>(R.id.btnSalir)
77
78
79 IngresarRecicler(artAcargar2)
80 showSoftKeyboard(v)
81 // btnSalir.setOnClickListener {
82 // activity?.onBackPressed();
83 //// VolverAinventario()
84 // }
85 return v
86 }
87
88 fun IngresarRecicler(articulos: List<Articles>?) {
89
90 viewAdapter2 = DescripcionListAdapter(articulos)
91 viewManager2 = LinearLayoutManager(requireContext())
92
93 rcDescripcion.apply {
94 adapter = viewAdapter2
95 layoutManager = viewManager2
96 }
97 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
98 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
99 return false
100 }
101
102 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) {
103
104 var indice = 0
105 indice = viewHolder.layoutPosition
106 GlobalScope.launch(Dispatchers.Main) {
107 //TODO BUSCO EN BASE DE DATOS
108 artCargadoEnBD = buscarCodigoDeboEnBD((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.sector.toString(),
109 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.codigo.toString(),
110 numeroInventario.toString())
111 if (artCargadoEnBD == null) {
112 val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null)
113 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setCancelable(false)
114 //TODO: DEPENDIENDO DEL TIPO DE ARTICULO PERMITER INGRESAR DECIMALES O NO
115 if ((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==1 || (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==3 || (viewAdapter2 as DescripcionListAdapter).items2?.get(
116 indice)!!.balanza==7)
117 mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER
118
119
120 mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}"
121 val mAlertDialog = mBuilder.show()
122 mDialogView.etCantidad.requestFocus()
123 mAlertDialog.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
124 mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
125 mDialogView.btnAceptar.setOnClickListener {
126 if (mDialogView.etCantidad.text.isNullOrEmpty()) {
127 mDialogView.etCantidad.error = "No vacio"
128 mDialogView.etCantidad.requestFocus()
129 mDialogView.etCantidad.hint = "Ingrese un valor"
130 } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
131 cantidad = mDialogView.etCantidad.text.toString().toFloat()
132 val body = InvBody(numeroInventario,
133 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector,
134 // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD
135 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo,
136 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion,
137 cantidad.toString(),
138 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codBar,
139 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codOrigen,
140 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio,
141 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio,
142 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza,
143 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.depSn,
144 InventarioFragment().ObtenerFechaActual(),
145 InventarioFragment().ObtenerFechaActual())
146 InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS
147 modificarCantidadEnCabecera(numeroInventario, true, requireActivity())
148 // VolverAinventario()
149 activity?.onBackPressed()
150 mAlertDialog.dismiss()
151 }
152 }
153 } else if (artCargadoEnBD != null) {
154
155 val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
156 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${artCargadoEnBD!!.descripcion}', se encuentra cargado.").setCancelable(false)
157 if (artCargadoEnBD!!.balanza.toString().contains("1") || artCargadoEnBD!!.balanza.toString().contains("3") || artCargadoEnBD!!.balanza.toString().contains("7")) mDialogView.tvNuevaCantidad.inputType= InputType.TYPE_CLASS_NUMBER
158 mDialogView.tvCantInicial.text =String.format("%.2f", artCargadoEnBD!!.cantTomada.toString().toFloat())
159
160 val mAlertDialog = mBuilder.show()
161 mDialogView.tvNuevaCantidad.requestFocus()
162
163
164 mAlertDialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
165 mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
166
167 mDialogView.rbSumar.setOnClickListener {
168 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
169 mDialogView.tvResultado.text = String.format("%.2f", (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()))
170 mDialogView.tvNuevaCantidad.isEnabled=false
171 }
172 }
173 mDialogView.rbRestar.setOnClickListener {
174 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
175 if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
176 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
177 mDialogView.tvNuevaCantidad.isEnabled = false
178 }else{
179 mDialogView.tvResultado.text=""
180 mDialogView.tvResultado.error = "Operaciรณn No Valida"
181 mDialogView.tvResultado.requestFocus()
182 mDialogView.tvResultado.hint = "Error"
183 }
184 }
185 }
186 mDialogView.rbMdodificar.setOnClickListener {
187 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
188 mDialogView.tvResultado.text = String.format("%.2f", (mDialogView.tvNuevaCantidad.text.toString().toFloat()))
189 mDialogView.tvNuevaCantidad.isEnabled = false
190 }
191 }
192 mDialogView.btnAceptar.setOnClickListener {
193 if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) {
194 if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) {
195
196 updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(),
197 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo.toString(),
198 mDialogView.tvResultado.text.toString().toFloat())
199 // VolverAinventario()
200 activity?.onBackPressed();
201 mAlertDialog.dismiss()
202 } else if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
203 mDialogView.tvResultado.error = "Operaciรณn Requerida"
204 mDialogView.tvResultado.requestFocus()
205 mDialogView.tvResultado.hint = "Seleccione Operaciรณn"
206 }
207 } else if (mDialogView.tvNuevaCantidad.text.isEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
208 mDialogView.tvNuevaCantidad.error = "Completar"
209 mDialogView.tvNuevaCantidad.requestFocus()
210 mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
211 }
212 }
213 mDialogView.dialogCancelBtn.setOnClickListener {
214 activity?.onBackPressed();
215 mAlertDialog.dismiss()
216 }
217 }
218 }
219 }
220
221 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
222 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
223 val itemView = viewHolder.itemView
224
225 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
226
227 if (dX > 0) {
228
229 c.drawColor(Color.RED)
230 } else if (dX < 0) {
231 // swipeBackground.setBounds(itemView.right+dX.toInt(),itemView.top,itemView.right,itemView.bottom)
232 c.drawColor(Color.YELLOW)
233 }
234 swipeBackground.draw(c)
235 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
236 }
237 }
238 val itemTouchHelper2 = ItemTouchHelper(itemTouchHelperCallback)
239 itemTouchHelper2.attachToRecyclerView(rcDescripcion)
240
241 }
242
243 fun InsertarArtEnDB(cuarpoInventario: InvBody) {
244 lifecycleScope.launch {
245 withContext(Dispatchers.IO) {
246 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario)
247 }
248 }
249 }
250
251 // fun VolverAinventario() {
252 //
253 // val editor = sharedPreferences.edit()
254 // editor?.putString("Inventario", numeroInventario.toString())
255 // editor?.apply()
256 // editor.commit()
257 // navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment)
258 // }
259
260 suspend fun buscarCodigoDeboEnBD(sector: String, codigo: String, numInventario: String): InvBody? {
261 //TODO BUSQUEDA POR CODIGO DE BARRAS
262 var busqueda: InvBody? = null
263 return GlobalScope.async(Dispatchers.IO) {
264 busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchArtInInvBody(sector, codigo, numInventario)
265 return@async busqueda
266 }.await()
267 }
268
269 fun updateCantidad(sector: String, codigo: String, cantidad: Float) {
270 lifecycleScope.launch {
271 withContext(Dispatchers.IO) {
272 val activity: FragmentActivity? = activity
273 if (activity != null && isAdded) {
274 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo)
275 }
276 }
277 }
278 }
279 }
280
281
282
app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/DescripcionListAdapter.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.descripcionFragment
2
3 import android.view.LayoutInflater
4 import android.view.View
5 import android.view.ViewGroup
6 import androidx.recyclerview.widget.RecyclerView
7 import com.focasoftware.deboinventariov20.Model.Articles
8 import com.focasoftware.deboinventariov20.R
9 import kotlinx.android.synthetic.main.item.view.*
10
11 class DescripcionListAdapter(private val productos: List<Articles>?) :
12 RecyclerView.Adapter<DescripcionListAdapter.ItemsViewHolder>() {
13 internal var items2: List<Articles>? = null
14
15 init {
16 this.items2 = productos
17 }
18
19 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(
20 LayoutInflater.from(parent.context).inflate(R.layout.item_descripcion, parent, false)
21 )
22
23 override fun getItemCount() = productos!!.size
24
25 override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) {
26 when (holder) {
27 is ItemsViewHolder -> {
28 holder.bind(items2!![position])
29 }
30 }
31 }
32
33
34 class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) {
35
36 val sector = view.tvSector
37 val codigo = view.tvCodigo
38 val descripcion = view.tvDescripcion
39 val codigoBarras = view.tvCodigoBarras
40
41 fun bind(pro: Articles) {
42 sector.text = pro.sector
43 codigo.text = pro.codigo
44 descripcion.text = pro.descripcion
45 codigoBarras.text = pro.codBar
46 }
47 }
48 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/descripcionFragment/ItemDescripcion.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.descripcionFragment
2
3 data class ItemDescripcion(val sector: String?,val codigo: String?, val descripcion: String?, val codigoBarras: String?)
app/src/main/java/com/focasoftware/deboinventariov20/UI/detalleProducto/DetalleArtFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.detalleProducto
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import androidx.fragment.app.Fragment
10 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
11 import com.focasoftware.deboinventariov20.Model.Articles
12 import com.focasoftware.deboinventariov20.R
13 import kotlinx.android.synthetic.main.fragment_detalle_art.*
14 import kotlinx.coroutines.Dispatchers
15 import kotlinx.coroutines.GlobalScope
16 import kotlinx.coroutines.async
17 import kotlinx.coroutines.launch
18
19 class DetalleArtFragment : Fragment() {
20
21 private var Inventario: Int = 0
22 private var sector: String? = null
23 private var codigo: String? = null
24 private var artSerch: Articles? = null
25 lateinit var sharedPreferences: SharedPreferences
26
27 override fun onCreate(savedInstanceState: Bundle?) {
28 super.onCreate(savedInstanceState)
29 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
30 arguments?.let {
31 sector = it.getString("sector")
32 codigo = it.getString("codigo")
33 Inventario= it.getInt("numeroInv")
34 }
35 marcarInventario()
36 GlobalScope.launch(Dispatchers.Main) {
37
38 artSerch = buscarCodigoDeboEnBD(sector, codigo)
39 if (artSerch == null) {
40
41 // val type = InputType.TYPE_CLASS_NUMBER
42 // MaterialDialog(requireContext()).show {
43 //
44 // title(text = "Producto '$sChangeUpper', se encuentra cargado.")
45 // message(R.string.sCantidadNueva)
46 // input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence ->
47 // fCant = 0F
48 // fCant = charSequence.toString().toFloat()
49 // }
50 // positiveButton(R.string.btnOk) {
51 // //TODO ACTUALIZO CANTIADAD EN BD
52 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
53 // //TODO ACTUALIZO CANTIDAD EN RV
54 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
55 // viewAdapter.notifyDataSetChanged()
56 // dismiss()
57 // }
58 // }.cancelOnTouchOutside(false).cornerRadius(10F)
59 } else if (artSerch != null) {
60 tvSector.text=sector
61 tvCodigo.text=codigo
62 tvDeposito.text=if(artSerch!!.depSn!!.toInt() ==0)"No" else "Si"
63 tvDescripcion.text=artSerch!!.descripcion.toString()
64 tvCodigoBarras.text=artSerch!!.codBar.toString()
65 tvCodigoOrigen.text=artSerch!!.codOrigen.toString()
66 tvExiVenta.text=artSerch!!.exiVenta.toString()
67 tvExiDeposito.text=artSerch!!.exiDeposito.toString()
68 tvBal.text=artSerch!!.balanza.toString()
69 tvDE.text=artSerch!!.de.toString()
70 }
71 }
72 }
73
74 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
75
76 return inflater.inflate(R.layout.fragment_detalle_art, container, false)
77 }
78
79 suspend fun buscarCodigoDeboEnBD(sector: String?, codigo: String?): Articles? {
80 //TODO BUSQUEDA POR CODIGO DE BARRAS
81 var busqueda: Articles? = null
82 return GlobalScope.async(Dispatchers.IO) {
83 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.fetchArticuloByCodSec(sector, codigo)
84 return@async busqueda
85 }.await()
86 }
87 fun marcarInventario() {
88
89 val editor = sharedPreferences.edit()
90 editor?.putString("Inventario", Inventario.toString())
91 editor?.apply()
92 editor.commit()
93 // navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment)
94 }
95 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/inventario/InventarioFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.inventario
2
3 import android.annotation.SuppressLint
4 import android.app.AlertDialog
5 import android.content.Context
6 import android.content.Context.INPUT_METHOD_SERVICE
7 import android.content.DialogInterface
8 import android.content.SharedPreferences
9 import android.graphics.Canvas
10 import android.graphics.Color
11 import android.graphics.drawable.Drawable
12 import android.os.Bundle
13 import android.text.InputType.TYPE_CLASS_NUMBER
14 import android.view.*
15 import android.view.inputmethod.InputMethodManager
16 import android.widget.EditText
17 import android.widget.TextView
18 import android.widget.Toast
19 import androidx.core.content.ContextCompat
20 import androidx.core.os.bundleOf
21 import androidx.fragment.app.Fragment
22 import androidx.lifecycle.lifecycleScope
23 import androidx.navigation.NavController
24 import androidx.navigation.Navigation
25 import androidx.recyclerview.widget.ItemTouchHelper
26 import androidx.recyclerview.widget.LinearLayoutManager
27 import androidx.recyclerview.widget.RecyclerView
28 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
29 import com.focasoftware.deboinventariov20.Model.Articles
30 import com.focasoftware.deboinventariov20.Model.InvBody
31 import com.focasoftware.deboinventariov20.Model.InvHead
32 import com.focasoftware.deboinventariov20.R
33 import com.focasoftware.deboinventariov20.UI.Utils.NoEncontradoSimple
34 import com.focasoftware.deboinventariov20.UI.Utils.modificarCantidadEnCabecera
35 import kotlinx.android.synthetic.main.fragment_inventario.*
36 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
37 import kotlinx.android.synthetic.main.login_dialog.view.*
38 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
39 import kotlinx.coroutines.*
40 import java.time.LocalDateTime
41 import java.time.format.DateTimeFormatter
42 import java.util.*
43
44 class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener {
45
46 private lateinit var sharedPreferences: SharedPreferences
47 private var iArea: Int = 0
48 private lateinit var invHead: InvHead
49 private lateinit var rcInventarios: RecyclerView
50 private lateinit var viewAdapter: RecyclerView.Adapter<*>
51 private lateinit var viewManager: RecyclerView.LayoutManager
52 private lateinit var sChangeUpper: String
53 private var listArticulos = ArrayList<ItemsRecycler>()
54 private lateinit var navController: NavController
55 var InventarioNuevo: Int = 0
56 private var iEstado = 0
57 private var iBusquedaPor = 0
58 private var fCant = 0F
59 private var bFirst = false
60 private lateinit var deleteIcon: Drawable
61
62 @SuppressLint("MissingPermission")
63 override fun onCreate(savedInstanceState: Bundle?) {
64 super.onCreate(savedInstanceState)
65
66 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
67 if (sharedPreferences.contains("Inventario")) if (sharedPreferences.getString("Inventario", "").toString() != "-1") {
68 InventarioNuevo = sharedPreferences.getString("Inventario", "").toString().toInt()
69 val editor = sharedPreferences.edit()
70 editor?.putString("Inventario", "-1")
71 editor?.apply()
72 editor.commit()
73 }
74 // val c = Calendar.getInstance()
75 // c[2009, 9, 9, 12, 0] = 0
76 // val am: AlarmManager = requireActivity().getSystemService(Context.ALARM_SERVICE) as AlarmManager
77 // am.setTime(c.timeInMillis)
78 }
79 // private fun setupTimeZone(timeZoneName: String) {
80 // val am = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
81 // am.setTimeZone("Europe/Madrid")
82 // }
83
84
85 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
86 val v = inflater.inflate(R.layout.fragment_inventario, container, false)
87 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
88 val tCodigoBarras = v.findViewById<EditText>(R.id.etCodigoBarras)
89 rcInventarios = v.findViewById(R.id.rcInventarios)
90 val tvTitulo = v.findViewById<TextView>(R.id.tvTitulo)
91
92 if (InventarioNuevo == 0) {// TODO: SI INVETNARIO NUEVO
93 GlobalScope.launch(Dispatchers.Main) {
94 //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO
95 InventarioNuevo = AppDb.getAppDb(requireActivity())?.InvHeadDAO()?.findLastInv()?.plus(1) ?: 1
96 //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO
97 invHead = InvHead(InventarioNuevo, if (SerchArea() == 0) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont())
98 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead)
99 tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo"
100 }
101 } else {// TODO (SI VENGO DE FRAGMENT DESCRIPCION)
102 listArticulos.clear()
103 CargarDeBdInventario(InventarioNuevo)
104 tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo"
105 }
106
107 tCodigoBarras.setOnKeyListener { _, keyCode, keyEvent ->
108 if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.action == KeyEvent.ACTION_UP) {
109 sChangeUpper = tCodigoBarras.text.toString()
110 var indiceDelArtEncontrado = 0
111
112 if (tCodigoBarras.text.isNullOrBlank()) {
113 tCodigoBarras.error = "No puede estar vacio"
114 tCodigoBarras.requestFocus()
115 tCodigoBarras.hint = "No puede estar vacio"
116 } else {
117
118 //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS
119 when (iBusquedaPor) {
120 0 -> {
121 // TODO: ESCONDE EL TECLADO VIRTUAL AL PRESIONAR ENTER
122 val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?
123 imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
124
125 GlobalScope.launch(Dispatchers.Main) {
126 indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice
127 //TODO (Si no lo encuentra devuelve -1)
128 if (indiceDelArtEncontrado != -1) {
129 if (swSumaUno!!.isChecked) {
130 // fCant = 0F
131 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
132 // fCant += 1F
133 //TODO ACTUALIZO LA CANTIDAD EN LA BD
134 updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(),
135 listArticulos[indiceDelArtEncontrado].codigo.toString(),
136 listArticulos[indiceDelArtEncontrado].cantTomada + 1)
137 //TODO ACTUALIZO LA CANTIDAD EN EL RV
138 listArticulos[indiceDelArtEncontrado].cantTomada = listArticulos[indiceDelArtEncontrado].cantTomada + 1
139 viewAdapter.notifyDataSetChanged()
140 } else {
141 dialogoSumaResta(requireContext(), indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta, false)
142 }
143
144 } else if (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD
145 //TODO BUSCO EN BASE DE DATOS
146 val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
147 ContinuarCargaCB(artEncontrado)//TODO SE MANDA CERO POR QUE ES UN ARTICULO ESCANEADO NUEVO PARA QUE SEA COMPATIBLE
148 }
149 tCodigoBarras.focusable = View.FOCUSABLE
150 tCodigoBarras.setText("")
151 tCodigoBarras.selectAll()
152 }
153 return@setOnKeyListener true
154
155
156 }
157 1 -> {//TODO: BUSQUEDA POR DESCRIPCION**************************************************************************
158 // TODO: ESCONDE EL TECLADO VIRTUAL AL PRESIONAR ENTER
159 val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?
160 imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
161 // indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 1) //TODO :Si encuentra el articulo en el RV devuelve el indice
162 // //TODO Si no lo encuentra devuelve -1
163 // if (indiceDelArtEncontrado != -1) {
164 //// if (swSumaUno!!.isChecked) {
165 //// fCant = 0F
166 //// fCant = listArticulos[indiceDelArtEncontrado].cantTomada
167 //// fCant += 1F
168 //// listArticulos[indiceDelArtEncontrado].cantTomada = fCant
169 //// viewAdapter.notifyDataSetChanged()
170 //// } else {
171 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
172 // MaterialDialog(requireContext()).show {
173 // title(R.string.sTituloNueva)
174 // message(R.string.sCantidadNueva)
175 // input { materialDialog, charSequence ->
176 // fCant = 0F
177 // fCant = charSequence.toString().toFloat()
178 // }
179 // positiveButton(R.string.btnOk) {
180 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
181 // viewAdapter.notifyDataSetChanged()
182 // dismiss()
183 // }
184 // }.cancelOnTouchOutside(false).cornerRadius(10F)
185 //// }
186 //
187 // } else if
188 // (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD
189 GlobalScope.launch(Dispatchers.Main) {
190 val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
191 ContinuarCargaDesc(artEncontrado as ArrayList<Articles>)
192 }
193 // }
194
195 return@setOnKeyListener true
196 }
197 2 -> {//TODO: BUSQUEDA POR CODIGO DE ORIGEN**************************************************************************
198 val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?
199 imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
200
201 GlobalScope.launch(Dispatchers.Main) {
202 indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 2)//TODO Si encuentra el articulo en el RV devuelve el indice
203 // //TODO Si no lo encuentra devuelve -1
204 if (indiceDelArtEncontrado != -1) {
205 if (swSumaUno!!.isChecked) {
206 fCant = 0F
207 fCant = listArticulos[indiceDelArtEncontrado].cantTomada
208 fCant += 1F
209 //TODO ACTUALIZO LA CANTIDAD EN LA BD
210 updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
211 //TODO ACTUALIZO LA CANTIDAD EN EL RV
212 listArticulos[indiceDelArtEncontrado].cantTomada = fCant
213 viewAdapter.notifyDataSetChanged()
214 } else {
215 dialogoSumaResta(requireContext(), indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta, false)
216 }
217 // } else {
218 // val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
219 // val mBuilder =
220 // AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.")
221 // .setCancelable(false)
222 // mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString()
223 // val mAlertDialog = mBuilder.show()
224 // mDialogView.rbSumar.setOnClickListener {
225 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
226 // mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
227 // }
228 // }
229 // mDialogView.rbRestar.setOnClickListener {
230 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
231 // if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
232 // mDialogView.tvgenerico4.text =
233 // (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
234 // }
235 // }
236 // }
237 // mDialogView.rbMdodificar.setOnClickListener {
238 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
239 // mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
240 // }
241 // }
242 // mDialogView.btnAceptar.setOnClickListener {
243 // mAlertDialog.dismiss()
244 // val name = mDialogView.tvgenerico4.text.toString().toFloat()
245 // fCant = 0F
246 // fCant = name
247 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
248 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
249 // viewAdapter.notifyDataSetChanged()
250 // }
251 // mDialogView.dialogCancelBtn.setOnClickListener {
252 // mAlertDialog.dismiss()
253 // }
254 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
255 // val type = InputType.TYPE_CLASS_NUMBER
256 // MaterialDialog(requireContext()).show {
257 //
258 // title(text = "Producto '$sChangeUpper', se encuentra cargado.")
259 // message(R.string.sCantidadNueva)
260 // input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence ->
261 // fCant = 0F
262 // fCant = charSequence.toString().toFloat()
263 // }
264 // positiveButton(R.string.btnOk) {
265 // //TODO ACTUALIZO CANTIADAD EN BD
266 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
267 // //TODO ACTUALIZO CANTIDAD EN RV
268 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
269 // viewAdapter.notifyDataSetChanged()
270 // dismiss()
271 // }
272 // }.cancelOnTouchOutside(false).cornerRadius(10F)
273 // }
274 } else if (indiceDelArtEncontrado == -1) {
275 // no lo encontro en el RV, lo va a buscar en al BD
276
277 GlobalScope.launch(Dispatchers.Main) {
278 //TODO BUSCO EN BASE DE DATOS
279 listArticulos[indiceDelArtEncontrado].cantTomada
280 val artEncontrado = buscarCodiogoOriEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
281 ContinuarCargaCB(artEncontrado)
282 }
283 }
284 }
285 return@setOnKeyListener true
286 }
287 }
288 }
289 }
290 return@setOnKeyListener false
291 }
292 return v
293 }
294
295 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
296 super.onViewCreated(view, savedInstanceState)
297 navController = Navigation.findNavController(view)
298 etCodigoBarras.requestFocus()
299 // val modalDialog = NoEncontradoSimple()
300 // modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
301
302 btnBorrarInv.setOnClickListener {
303 AlertDialog.Builder(requireContext()).setTitle("Eliminaciรณn de Inventarios").setMessage("ยฟConfirma que desea eliminar el inventario?")
304 .setPositiveButton(R.string.btnOk, DialogInterface.OnClickListener { dialog, which ->
305 BorrarInvActual()
306 Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show()
307 navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
308 InventarioNuevo = 0
309
310 }).setNegativeButton(R.string.btnCancelar, DialogInterface.OnClickListener { dialog, which ->
311 //botรณn cancel pulsado
312 }).show()
313 }
314
315 btnExportarInv.setOnClickListener {
316 AlertDialog.Builder(requireContext()).setTitle(R.string.sTituloExportar).setMessage(R.string.sMensajeExportar)
317 .setPositiveButton(R.string.btnOk, DialogInterface.OnClickListener { dialog, which ->
318 BorrarInvActual()
319 Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show()
320 navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
321 InventarioNuevo = 0
322
323 }).setNegativeButton(R.string.btnCancelar, DialogInterface.OnClickListener { dialog, which -> }).show()
324 }
325 ivCamara.setOnClickListener {
326 if (!bFirst) {
327 iEstado = 1
328 bFirst = true
329 }
330
331 when (iEstado) {
332 0 -> {
333 ivCamara.setImageResource(R.drawable.codbar)
334 etCodigoBarras.hint = "Busqueda por C. Barras"
335 swSumaUno.visibility = View.VISIBLE
336 iBusquedaPor = 0
337 iEstado = 1
338 }
339 1 -> {
340 ivCamara.setImageResource(R.drawable.desc)
341 etCodigoBarras.hint = "Busqueda por Descripciรณn"
342 swSumaUno.visibility = View.GONE
343 iBusquedaPor = 1
344 iEstado = 2
345 }
346 2 -> {
347 ivCamara.setImageResource(R.drawable.cod_origen)
348 etCodigoBarras.hint = "Busqueda por C. Origen"
349 swSumaUno.visibility = View.GONE
350 iBusquedaPor = 2
351 iEstado = 0
352 }
353 }
354 }
355 }
356
357 private fun BorrarInvActual() {
358 lifecycleScope.launch {
359 withContext(Dispatchers.IO) {
360 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.deleteinvHead(InventarioNuevo)
361 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.deleteInvBody(InventarioNuevo)
362 }
363 }
364 }
365
366 private fun CargarDeBdInventario(ultimoInv: Int) {
367 GlobalScope.launch(Dispatchers.Main) {
368 val invbody = cargarInventario(ultimoInv)
369 for ((i, _) in invbody!!.withIndex()) {
370 val art = Articles(invbody[i].sector,
371 invbody[i].codigo,
372 invbody[i].descripcion,
373 invbody[i].codBar,
374 invbody[i].codOrigen,
375 invbody[i].precio,
376 invbody[i].costo,
377 "",
378 "",
379 "",
380 invbody[i].balanza,
381 invbody[i].depSn,
382 invbody[i].costo)
383 cargarRecicler(art, invbody[i].cantTomada!!.toFloat())
384 }
385 }
386 }
387
388 // @SuppressLint("RestrictedApi")
389 private fun ContinuarCargaDesc(artAcargar: ArrayList<Articles>) {
390 //TODO DESPUES DE INGRESAR LA DESCRIPCION Y DE BUSCAR LOS CAINCIDENCIAS EN LA BASE SE VA A MOSTRAR LAS MISMAS
391 //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV
392
393 if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD
394 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
395 // fCant = 0F
396 // fCant += 1F
397 // // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
398 // val acargarPorDesc = Articles(artAcargar[0].sector,
399 // artAcargar[0].codigo,
400 // artAcargar[0].descripcion,
401 // artAcargar[0].codBar,
402 // artAcargar[0].codOrigen,
403 // artAcargar[0].precio,
404 // artAcargar[0].costo,
405 // "",
406 // "",
407 // "",
408 // artAcargar[0].balanza,
409 // artAcargar[0].depSn,
410 // "")
411 // // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
412 // cargarArtEnBd(acargarPorDesc, fCant)
413 // cargarRecicler(acargarPorDesc, fCant)
414 // } else {
415 // TODO: ESCONDE EL TECLADO VIRTUAL AL PRESIONAR ENTER
416 val imm = requireActivity().getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?
417 imm!!.hideSoftInputFromWindow(requireActivity().currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
418 var bundle = Bundle()
419 bundle = bundleOf("ArrayDesc" to artAcargar)
420 bundle.putInt("numeroInv", InventarioNuevo)
421 navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle)
422 //navController.backStack.removeLast()
423 // }
424 // } else {//SI NO ESTA +1
425 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
426 // fCant = listArticulos[0].cantTomada
427 // MaterialDialog(requireContext()).show {
428 // title(R.string.sTituloNueva)
429 // message(R.string.sCantidadNueva)
430 // input { materialDialog, charSequence ->
431 // fCant = 0F
432 // fCant = charSequence.toString().toFloat()
433 // }
434 // positiveButton(R.string.btnOk) {
435 // listArticulos[0].cantTomada = fCant
436 // viewAdapter.notifyDataSetChanged()
437 // dismiss()
438 // }
439 // }.cancelOnTouchOutside(false).cornerRadius(10F)
440 // // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
441 // val acargarPorDesc = Articles(artAcargar[0].sector,
442 // artAcargar[0].codigo,
443 // artAcargar[0].descripcion,
444 // artAcargar[0].codBar,
445 // artAcargar[0].cod_origen,
446 // artAcargar[0].precio,
447 // artAcargar[0].costo,
448 // artAcargar[0].balanza,
449 // artAcargar[0].depSn,
450 // "")
451 // // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
452 // cargarArtEnBd(acargarPorDesc, fCant)
453 // cargarRecicler(acargarPorDesc, fCant)
454 // } else {
455 // var bundle = Bundle()
456 // bundle = bundleOf("ArrayDesc" to artAcargar)
457 // bundle.putInt("numeroInv", InventarioNuevo)
458 // navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle)
459 // }
460 // }
461 } else {//TODO si no lo encuentra en la BD
462 val modalDialog = NoEncontradoSimple()
463 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
464 }
465 etCodigoBarras.focusable = View.FOCUSABLE
466 etCodigoBarras.setText("")
467 etCodigoBarras.selectAll()
468 }
469
470 private fun ContinuarCargaCB(artAcargar: Articles?) {
471
472 if (artAcargar != null) {// TODO: Si lo encuentra en la BD
473 if (swSumaUno!!.isChecked) {//TODO: SI ESTA +1, PONE CANTIDAD 1
474 fCant = 0F
475 fCant += 1F
476 cargarArtEnBd(artAcargar, String.format("%.3f", fCant))
477 cargarRecicler(artAcargar, fCant)
478 } else {//TODO: SI NO ESTA +1 PREGUNTA CANTIDAD
479
480 DialogingresarCantidad(requireContext(), artAcargar)
481
482 }
483 } else {// TODO si no lo encuentra en la BD
484 val modalDialog = NoEncontradoSimple()
485 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
486 }
487 etCodigoBarras.focusable = View.FOCUSABLE
488 etCodigoBarras.setText("")
489 etCodigoBarras.selectAll()
490 }
491
492
493 fun DialogingresarCantidad(cnxt: Context, artAcargar: Articles?): Float {
494 var cantidad = 0F
495 val mDialogView = LayoutInflater.from(cnxt).inflate(R.layout.ingresar_cantidad, null)
496 val mBuilder = AlertDialog.Builder(cnxt).setView(mDialogView).setCancelable(false)
497 if (artAcargar!!.balanza!!.toInt() == 1 || artAcargar.balanza!!.toInt() == 3 || artAcargar.balanza!!.toInt() == 7) mDialogView.etCantidad.inputType = TYPE_CLASS_NUMBER
498 mDialogView.tvTitulo.text = artAcargar.descripcion.toString()
499 val mAlertDialog = mBuilder.show()
500 mDialogView.etCantidad.requestFocus()
501 mAlertDialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
502 mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
503
504
505 mDialogView.btnAceptar.setOnClickListener {
506 if (mDialogView.etCantidad.text.isNullOrEmpty()) {
507 mDialogView.etCantidad.error = "No vacio"
508 mDialogView.etCantidad.requestFocus()
509 mDialogView.etCantidad.hint = "Ingrese un valor"
510 } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
511 mAlertDialog.dismiss()
512 cantidad = mDialogView.etCantidad.text.toString().toFloat()
513 cargarArtEnBd(artAcargar, String.format("%.2f", cantidad))
514 cargarRecicler(artAcargar, cantidad)
515 modificarCantidadEnCabecera(InventarioNuevo, true, requireContext())
516 }
517 }
518 return cantidad
519 }
520
521 fun dialogoSumaResta(context: Context, indiceDelArtEncontrado: Int, univta: String, cancelable: Boolean) {
522 val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
523 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[indiceDelArtEncontrado].descripcion} se encuentra cargado.").setCancelable(cancelable)
524 // TODO: SI PERMITE QUE INGRESE DECIMALES
525 if (univta.contains("1") || univta.contains("3") || univta.contains("7")) mDialogView.tvNuevaCantidad.inputType = TYPE_CLASS_NUMBER
526
527 mDialogView.tvCantInicial.text = String.format("%.2f", listArticulos[indiceDelArtEncontrado].cantTomada)
528 val mAlertDialog = mBuilder.show()
529 mDialogView.tvNuevaCantidad.requestFocus()
530
531
532
533 mAlertDialog?.window!!.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
534 mAlertDialog.window!!.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
535
536 mDialogView.rbSumar.setOnClickListener {
537 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
538 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat())
539 mDialogView.tvNuevaCantidad.isEnabled = false
540 }
541 }
542 mDialogView.rbRestar.setOnClickListener {
543 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
544 if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
545 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
546 mDialogView.tvNuevaCantidad.isEnabled = false
547 } else {
548 mDialogView.tvResultado.text = ""
549 mDialogView.tvResultado.error = "Operaciรณn No Valida"
550 mDialogView.tvResultado.requestFocus()
551 mDialogView.tvResultado.hint = "Error"
552 }
553 }
554 }
555 mDialogView.rbMdodificar.setOnClickListener {
556 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
557 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat())
558 mDialogView.tvNuevaCantidad.isEnabled = false
559 }
560 }
561 mDialogView.btnAceptar.setOnClickListener {
562 if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) {
563 if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) {
564 mAlertDialog.dismiss()
565 listArticulos[indiceDelArtEncontrado].cantTomada = String.format("%.2f", mDialogView.tvResultado.text.toString().toFloat()).toFloat()
566 updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(),
567 listArticulos[indiceDelArtEncontrado].codigo.toString(),
568 String.format("%.2f", mDialogView.tvResultado.text.toString().toFloat()).toFloat())
569
570 viewAdapter.notifyDataSetChanged()
571 } else if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
572 mDialogView.tvResultado.error = "Operaciรณn Requerida"
573 mDialogView.tvResultado.requestFocus()
574 mDialogView.tvResultado.hint = "Seleccione Operaciรณn"
575 }
576 } else if (mDialogView.tvNuevaCantidad.text.isEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
577 mDialogView.tvNuevaCantidad.error = "Completar"
578 mDialogView.tvNuevaCantidad.requestFocus()
579 mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
580 }
581 }
582 mDialogView.dialogCancelBtn.setOnClickListener {
583 mAlertDialog.dismiss()
584 }
585 }
586 suspend fun buscarCodiogoOriEnBD(CodOri: String): Articles? {
587 //TODO BUSQUEDA POR CODIGO DE BARRAS
588 var busqueda: Articles? = null
589 return GlobalScope.async(Dispatchers.IO) {
590 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodOri(CodOri, SerchArea())
591 return@async busqueda
592 }.await()
593 }
594
595 suspend fun buscarCBEnBD(CodigoBarras: String): Articles? {
596 //TODO BUSQUEDA POR CODIGO DE BARRAS
597 var busqueda: Articles? = null
598 return GlobalScope.async(Dispatchers.IO) {
599 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchArea())
600 return@async busqueda
601 }.await()
602 }
603
604 suspend fun buscarDescEnBD(descripcion: String): List<Articles>? {
605 //TODO BUSQUEDA POR DESCRIPCION
606 var busqueda: List<Articles>? = null
607 return GlobalScope.async(Dispatchers.IO) {
608 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchArea())
609 return@async busqueda
610 }.await()
611 }
612
613 suspend fun borrarArticulo(sector: String, codigo: String, inventario: String): Int? {
614 //TODO BUSQUEDA POR DESCRIPCION
615 var result: Int
616 return GlobalScope.async(Dispatchers.IO) {
617 result = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.deleteItemFromInvBody(sector, codigo, inventario)
618 return@async result
619 }.await()
620 }
621
622 private suspend fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int {
623 return GlobalScope.async(Dispatchers.IO) {
624 var indice = 0
625 var bEncontrado = false
626 if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS
627 // TODO CAMBIO DE CB A CODIGO DEBO
628 val any = cambioCBporCodigoDebo(codigoBarras)
629 if (any != null) {
630 for (item in listArticulos) {
631 if (item.sector!!.toInt() == any.sector!!.toInt() && item.codigo!!.toInt() == any.codigo!!.toInt()) {
632 bEncontrado = true
633 break
634 }
635 indice += 1
636 }
637 }
638
639 } else if (sTipoBusqueda == 1) {//TODO BUSQUEDA POR DESCRIPCION
640 for (item in listArticulos) {
641 if (item.descripcion!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) {
642 bEncontrado = true
643 break
644 }
645 indice += 1
646 }
647 } else if (sTipoBusqueda == 2) {//TODO BUSQUEDA POR CODIGO DE ORIGEN
648 for (item in listArticulos) {
649 if (item.codigoOrigen!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) {
650 bEncontrado = true
651 break
652 }
653 indice += 1
654 }
655 }
656 return@async if (bEncontrado) indice else -1
657 }.await()
658 }
659
660 suspend fun cambioCBporCodigoDebo(codigoBarras: String): Articles? {
661 //TODO BUSQUEDA POR DESCRIPCION
662 var busqueda: Articles? = null
663 return GlobalScope.async(Dispatchers.IO) {
664 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, SerchArea())
665 return@async busqueda
666 }.await()
667 }
668
669 private fun cargarArtEnBd(articulos: Articles, cant: String) {
670 val body = InvBody(InventarioNuevo,// TODO PREPARO PARA MANDAR A CARGAR EN LA BD
671 articulos.sector,
672 articulos.codigo,
673 articulos.descripcion,
674 cant,
675 articulos.codBar,
676 articulos.codOrigen,
677 articulos.precio,
678 articulos.precio,
679 articulos.balanza,
680 articulos.depSn,
681 ObtenerFechaActual(),
682 ObtenerFechaActual())
683 InsertarArtEnDB(body)// TODO MANDO A CARGAR A LA BASE DE DATOS
684 }
685
686 fun cargarRecicler(articulos: Articles, cant: Float) {
687 //TODO CARGO EN LE RV
688 val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(), articulos.de.toString())
689 listArticulos.add(item)
690
691 viewAdapter = ProductosListAdapter(requireContext(), listArticulos, this)
692 viewManager = LinearLayoutManager(requireContext())
693 deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!!
694 rcInventarios.apply {
695 adapter = viewAdapter
696 layoutManager = viewManager
697 }
698 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
699 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
700 return false
701 }
702
703 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
704
705 GlobalScope.launch(Dispatchers.Main) {
706 borrarArticulo(listArticulos[viewHolder.adapterPosition].sector.toString(), listArticulos[viewHolder.adapterPosition].codigo.toString(), InventarioNuevo.toString())
707 (viewAdapter as ProductosListAdapter).removeItem(viewHolder)
708 viewAdapter.notifyDataSetChanged()
709 modificarCantidadEnCabecera(InventarioNuevo, false, requireContext())
710 }
711 }
712
713 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
714 val itemView = viewHolder.itemView
715 val iconMargin = (itemView.height - deleteIcon.intrinsicHeight) / 2
716 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
717
718 if (dX > 0) {
719
720 if (dX < c.width / 2) c.drawColor(Color.GREEN)
721 else c.drawColor(Color.RED)
722 deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom - iconMargin)
723 } else {
724 }
725
726 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
727 deleteIcon.draw(c)
728 }
729 }
730
731 val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback)
732 itemTouchHelper.attachToRecyclerView(rcInventarios)
733 }
734
735 private fun ProdNoCont(): Int? {
736 var mostrarStock = 0
737 if (sharedPreferences.contains("cbMostrarStock")) if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") mostrarStock = 1
738 return mostrarStock
739 }
740
741 private fun AjusteProductos(): Int? {
742 var prodInclu = 0
743 if (sharedPreferences.contains("rbProInclu")) if (sharedPreferences.getString("rbProInclu", "").toString() == "1") prodInclu = 1
744
745 if (sharedPreferences.contains("rbProNoInclu")) if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") prodInclu = 0
746 return prodInclu
747 }
748
749 private fun SerchArea(): Int {
750 if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0
751 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1
752 return iArea
753 }
754
755 fun ObtenerFechaActual(): String? {
756 //TODO OBTENGO FECHA Y HORA ACTUAL PARA LA CABECERA DEL INVENTARIO Y PARA CADA ITEM QUE SE INSERTA EN LA BD
757 val current = LocalDateTime.now()
758 val formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss")
759 val dFechaHora = current.format(formatter)
760 return dFechaHora.toString()
761 }
762
763 fun InsertarArtEnDB(cuarpoInventario: InvBody) {
764 lifecycleScope.launch {
765 withContext(Dispatchers.IO) {
766 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario)
767 }
768 }
769 }
770
771 fun updateCantidad(sector: String, codigo: String, cantidad: Float) {
772 lifecycleScope.launch {
773 withContext(Dispatchers.IO) {
774 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo)
775 }
776 }
777 }
778
779 suspend fun cargarInventario(inventario: Int): List<InvBody>? {
780 return GlobalScope.async(Dispatchers.IO) {
781 return@async AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.fetchAllInvBody(inventario)
782 }.await()
783 }
784
785 override fun onImageDotsClick(sector: String?, codigo: String?) {
786 val bundle = Bundle()
787 bundle.putString("sector", sector)
788 bundle.putString("codigo", codigo)
789 bundle.putInt("numeroInv", InventarioNuevo)
790 navController.navigate(R.id.action_inventarioFragment_to_detalleArtFragment, bundle)
791 }
792
793 override fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String) {
794 dialogoSumaResta(requireContext(), position.toInt(), listArticulos[position.toInt()].univta, true)
795 }
796 }
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
app/src/main/java/com/focasoftware/deboinventariov20/UI/inventario/ItemsRecycler.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.inventario
2
3 data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?, val codigoOrigen: String?,val univta: String,val dev:String) {
4
5 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/inventario/ProductosListAdapter.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.inventario
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.R
9 import com.focasoftware.deboinventariov20.UI.Utils.BaseViewHolder
10 import kotlinx.android.synthetic.main.item.view.*
11
12
13 class ProductosListAdapter(private val context: Context,private val productos: ArrayList<ItemsRecycler>, private val itemImageClickListener: OnImageDotsClickListener) :
14 RecyclerView.Adapter<BaseViewHolder<*>>() {
15
16 private var removePosition: Int = 0
17 private var removedItem: ItemsRecycler? = null
18
19 interface OnImageDotsClickListener {
20 fun onImageDotsClick(sector: String?,codigo: String?)
21 fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String)
22 }
23
24 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item, parent, false))
25
26 override fun getItemCount() = productos.size
27
28 override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
29 when (holder) {
30 is ItemsViewHolder -> { holder.bind(productos[position], position) }
31
32 }
33 }
34 inner class ItemsViewHolder (itemView: View) : BaseViewHolder<ItemsRecycler>(itemView) {
35 override fun bind(item: ItemsRecycler, position: Int) {
36 itemView.ivDots.setOnClickListener {itemImageClickListener.onImageDotsClick(item.sector,item.codigo) }
37 itemView.ivPen.setOnClickListener {itemImageClickListener.onImagePenClick(item.sector,item.codigo,item.cantTomada.toString(),adapterPosition.toString()) }
38
39 itemView.tvSector.text=item.sector
40 itemView.tvCodigo.text=item.codigo
41 itemView.tvDescripcion.text=item.descripcion
42 itemView.tvCantidad.text=item.cantTomada.toString()
43 itemView.tvCodigoBarras.text=item.sector
44 itemView.tvCodigoOrigen.text=item.sector
45 itemView.ivPen.setImageResource(R.drawable.pen)
46 itemView.ivDots.setImageResource(R.drawable.more)
47 }
48 }
49
50 fun removeItem(viewHolder: RecyclerView.ViewHolder) {
51 removePosition = viewHolder.adapterPosition
52 removedItem = productos[viewHolder.adapterPosition]
53
54 productos.removeAt(viewHolder.adapterPosition)
55 notifyItemRemoved(viewHolder.adapterPosition)
56 }
57
58
59 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/inventario/viewModel/InventarioViewModel.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.inventario.viewModel
2
3 import androidx.lifecycle.ViewModel
4
5 class InventarioViewModel: ViewModel() {
6 var InventarioNuevo: Int = 0
7 }
8
app/src/main/java/com/focasoftware/deboinventariov20/UI/main/InventarioListAdapter.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.main
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.Model.InvHead
9 import com.focasoftware.deboinventariov20.R
10 import com.focasoftware.deboinventariov20.UI.Utils.BaseViewHolder
11 import kotlinx.android.synthetic.main.item_principal.view.*
12
13 class InventarioListAdapter(private val context: Context, private val inv: List<InvHead>, private val itemClickListener: OnInventarioClickListener) :
14 RecyclerView.Adapter<BaseViewHolder<*>>() {
15
16 interface OnInventarioClickListener {
17 fun onItemClick(inventario: String?)
18 }
19
20 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item_principal, parent, false))
21
22 override fun getItemCount() = inv.size
23
24
25 inner class ItemsViewHolder(itemView: View) : BaseViewHolder<InvHead>(itemView) {
26 override fun bind(item: InvHead, position: Int) {
27 itemView.setOnClickListener {itemClickListener.onItemClick(item.invNum.toString())}
28 itemView.tvPrincipalinventario.text = if ( item.invNum < 10) "0${ item.invNum.toString()}" else item.invNum.toString()
29
30 itemView.tvDescription.text=item.descripcion.toString()
31 itemView.tvFecha.text=item.fechaInicio.toString()
32 itemView.tvCantContada.text=item.prodContados.toString()
33 }
34 }
35
36 override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
37 when (holder) {
38 is ItemsViewHolder -> holder.bind(inv[position], position)
39 else -> IllegalArgumentException("No se pudo pasar el ViewHolder")
40 }
41 }
42
43
44 }
45
46
47
48
app/src/main/java/com/focasoftware/deboinventariov20/UI/main/ItemPrincipal.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.main
2
3 data class ItemInventario(val inventario: String?, val descripcion: String?)
app/src/main/java/com/focasoftware/deboinventariov20/UI/main/MainFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.main
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import android.widget.*
10 import androidx.fragment.app.Fragment
11 import androidx.navigation.NavController
12 import androidx.navigation.Navigation
13 import androidx.recyclerview.widget.LinearLayoutManager
14 import androidx.recyclerview.widget.RecyclerView
15 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
16 import com.focasoftware.deboinventariov20.Model.InvHead
17 import com.focasoftware.deboinventariov20.R
18 import kotlinx.coroutines.Dispatchers
19 import kotlinx.coroutines.GlobalScope
20 import kotlinx.coroutines.async
21 import kotlinx.coroutines.launch
22 import java.util.*
23
24 class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener {
25 private lateinit var inventarios: List<InvHead>
26 private lateinit var ordenado: List<InvHead>
27 private lateinit var rcInventario: RecyclerView
28 private lateinit var viewAdapter: RecyclerView.Adapter<*>
29 private lateinit var viewManager: RecyclerView.LayoutManager
30 // private var listIvn2 = List<InvHead>()
31 private var listIvn2 = ArrayList<InvHead>()
32 private lateinit var navController: NavController
33 private lateinit var sharedPreferences: SharedPreferences
34 private var cantidadInventarios: Int = 0
35
36 override fun onCreate(savedInstanceState: Bundle?) {
37 super.onCreate(savedInstanceState)
38 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
39 }
40
41 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
42 var bAbiertoCerrado = false
43 val v = inflater.inflate(R.layout.fragment_main, container, false)
44 val tvInvDinamicos = v.findViewById<TextView>(R.id.tvInvDinamicos)
45 val txtDeposito = v.findViewById<TextView>(R.id.txtDeposito)
46 val ivSort19= v.findViewById<ImageButton>(R.id.ivSort19)
47 val ivSort91= v.findViewById<ImageButton>(R.id.ivSort91)
48 val cbVentas= v.findViewById<CheckBox>(R.id.cbVentas)
49 val cbDeposito= v.findViewById<CheckBox>(R.id.cbDeposito)
50 val tvTipo = v.findViewById<TextView>(R.id.tvTipo)
51 rcInventario = v.findViewById(R.id.rcInventario)
52
53 GlobalScope.launch(Dispatchers.Main) {
54 inventarios = buscarEnBDInvHead()
55 for ((i, item) in inventarios.withIndex()) {
56 val inv = InvHead(inventarios[i].invNum,
57 inventarios[i].descripcion,
58 inventarios[i].estado,
59 inventarios[i].fechaInicio,
60 inventarios[i].fechaFinal,
61 inventarios[i].prodContados,
62 inventarios[i].lugar,
63 inventarios[i].stDesc,
64 inventarios[i].proNoCont)
65 cargarRecicler(inv)
66 cantidadInventarios = i + 1
67 }
68 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
69 tvInvDinamicos.setOnClickListener {
70 if (!bAbiertoCerrado) {
71 bAbiertoCerrado = true
72 txtDeposito.visibility = View.GONE
73 rcInventario.visibility = View.VISIBLE
74 ivSort91.visibility = View.INVISIBLE
75 ivSort19.visibility = View.VISIBLE
76 cbVentas.visibility = View.VISIBLE
77 cbDeposito.visibility = View.VISIBLE
78 tvTipo.visibility = View.VISIBLE
79 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) -"
80 } else {
81 bAbiertoCerrado = false
82 rcInventario.visibility = View.GONE
83 ivSort91.visibility = View.GONE
84 ivSort19.visibility = View.GONE
85 txtDeposito.visibility = View.VISIBLE
86 cbVentas.visibility = View.GONE
87 cbDeposito.visibility = View.GONE
88 tvTipo.visibility = View.GONE
89 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
90 }
91 }
92 ivSort19.setOnClickListener {
93 ordenado= inventarios.sortedByDescending {
94 it.invNum
95 }
96 viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
97 viewManager = LinearLayoutManager(requireContext())
98
99 rcInventario.apply {
100 adapter = viewAdapter
101 layoutManager = viewManager
102 }
103 viewAdapter.notifyDataSetChanged()
104 ivSort19.visibility=View.INVISIBLE
105 ivSort91.visibility=View.VISIBLE
106 }
107 ivSort91.setOnClickListener {
108 ordenado= inventarios.sortedBy {
109 it.invNum
110 }
111 viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
112 viewManager = LinearLayoutManager(requireContext())
113
114 rcInventario.apply {
115 adapter = viewAdapter
116 layoutManager = viewManager
117 }
118 viewAdapter.notifyDataSetChanged()
119 ivSort91.visibility=View.INVISIBLE
120 ivSort19.visibility=View.VISIBLE
121 }
122 }
123 return v
124 }
125
126 suspend fun buscarEnBDInvHead(): List<InvHead> {
127 //TODO BUSQUEDA POR DESCRIPCION
128 var busqueda: List<InvHead>
129 return GlobalScope.async(Dispatchers.IO) {
130 busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead()
131 return@async busqueda
132 }.await()
133 }
134
135 fun cargarRecicler(inv: InvHead) {
136 //TODO CARGO EN LE RV
137
138 // val number = if (inv.invNum.toLong() < 10) "0${inv.invNum.toLong()}" else inv.invNum.toString()
139 // val item = ItemInventario("Nยฐ $number ${inv.descripcion}. Fecha: ${inv.fechaFinal}")
140
141 // listIvn.add(item)
142 listIvn2.add(inv)
143 viewAdapter = InventarioListAdapter(requireContext(), listIvn2, this)
144 viewManager = LinearLayoutManager(requireContext())
145
146 rcInventario.apply {
147 adapter = viewAdapter
148 layoutManager = viewManager
149 }
150 }
151
152 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
153 super.onViewCreated(view, savedInstanceState)
154 navController = Navigation.findNavController(view)
155 listIvn2.clear()
156 }
157
158 override fun onItemClick(inventario: String?) {
159
160 val editor = sharedPreferences.edit()
161 // var invSel: String = inventario.toString()
162 // invSel = invSel.substring(3, 5)
163 editor?.putString("Inventario", inventario)
164 editor?.apply()
165 editor.commit()
166 navController.navigate(R.id.action_mainFragment2_to_inventarioFragment)
167 }
168
169
170 }
171
172
app/src/main/java/com/focasoftware/deboinventariov20/UI/servidores/AdapterServidores.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.servidores
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.R
9 import kotlinx.android.synthetic.main.item_servidores.view.*
10
11 class AdapterServidores(private val servidor: ArrayList<ItemsServidores>, private var contexto: Context) :
12 RecyclerView.Adapter<AdapterServidores.ViewHolder>() {
13 private var removePosition: Int = 0
14 private var removedItem: ItemsServidores? = null
15
16 class ViewHolder(var vista: View) : RecyclerView.ViewHolder(vista) {
17 fun bind(itemsServidores: ItemsServidores) {
18 vista.tvDescServidor.text = itemsServidores.descripcion
19 vista.tvDireccionServidor.text = itemsServidores.direccion
20
21 }
22 }
23
24 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
25 return ViewHolder(
26 LayoutInflater.from(parent.context).inflate(R.layout.item_servidores, parent, false)
27 )
28 }
29
30 override fun getItemCount(): Int {
31 return servidor.size
32 }
33
34 override fun onBindViewHolder(holder: ViewHolder, position: Int) {
35 holder.bind(servidor[position])
36 }
37 fun removeItem(viewHolder: RecyclerView.ViewHolder) {
38 removePosition = viewHolder.adapterPosition
39 removedItem = servidor[viewHolder.adapterPosition]
40
41 servidor.removeAt(viewHolder.adapterPosition)
42 notifyItemRemoved(viewHolder.adapterPosition)
43 }
44 }
app/src/main/java/com/focasoftware/deboinventariov20/UI/servidores/ItemsServidores.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.servidores
2
3 data class ItemsServidores(val descripcion: String?, var direccion: String?, var predeterminado: String?)
app/src/main/java/com/focasoftware/deboinventariov20/UI/servidores/ServidoresFragment.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.servidores
2
3 import android.graphics.Canvas
4 import android.graphics.Color
5 import android.graphics.drawable.Drawable
6 import android.os.Bundle
7 import android.view.LayoutInflater
8 import android.view.View
9 import android.view.ViewGroup
10 import android.widget.Toast
11 import androidx.core.content.ContextCompat
12 import androidx.fragment.app.Fragment
13 import androidx.lifecycle.lifecycleScope
14 import androidx.recyclerview.widget.ItemTouchHelper
15 import androidx.recyclerview.widget.LinearLayoutManager
16 import androidx.recyclerview.widget.RecyclerView
17 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
18 import com.focasoftware.deboinventariov20.Model.ServeInv
19 import com.focasoftware.deboinventariov20.R
20 import kotlinx.android.synthetic.main.fragment_servidores.*
21 import kotlinx.coroutines.*
22
23 class ServidoresFragment : Fragment() {
24
25 private lateinit var rvServidores: RecyclerView
26 private lateinit var viewAdapter: RecyclerView.Adapter<*>
27 private lateinit var viewManager: RecyclerView.LayoutManager
28 private var listServ = ArrayList<ItemsServidores>()
29 private lateinit var servidores: List<ServeInv>
30 private lateinit var deleteIcon: Drawable
31
32 override fun onCreate(savedInstanceState: Bundle?) {
33 super.onCreate(savedInstanceState)
34 CargarRV()
35 }
36
37 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
38 super.onViewCreated(view, savedInstanceState)
39
40 btnGuardarServidores.setOnClickListener {
41 if (etNombreServidor.text.isNullOrBlank()) {
42 etNombreServidor.error = "Nombre no valido"
43 etNombreServidor.requestFocus()
44 etNombreServidor.hint = "Nombre no valido"
45 }
46 if (etDireccionServidor.text.isNullOrBlank()) {
47 etDireccionServidor.error = "Direcciรณn no valida"
48 etDireccionServidor.requestFocus()
49 etDireccionServidor.hint = "Direcciรณn no valida"
50 }
51 if (!etDireccionServidor.text.isNullOrBlank() || !etNombreServidor.text.isNullOrBlank()) {
52 // GlobalScope.launch(Dispatchers.Main) {
53 // ServerNew =AppDb.getAppDb(requireContext())?.ServeInvDao()?.findLastServer()?.plus(1) ?: 1
54 val servidor = ServeInv(etNombreServidor.text.toString(), "http://${etDireccionServidor.text}/", 0)
55 ingresarDatos(servidor)
56 cargarRecicler(servidor)
57 Toast.makeText(requireContext(), "Servidor ${etNombreServidor.text} Guardado", Toast.LENGTH_LONG).show()
58 etNombreServidor.text.clear()
59 etDireccionServidor.text.clear()
60 // }
61 }
62 }
63 }
64
65 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
66 val v = inflater.inflate(R.layout.fragment_servidores, container, false)
67 rvServidores = v.findViewById(R.id.rvServidores)
68 return v
69 }
70
71 fun ingresarDatos(servidor: ServeInv) {
72 val Job = GlobalScope.launch {
73 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.insertServer(servidor)
74 }
75 }
76
77 suspend fun buscarEnBD(): List<ServeInv> {
78 var busqueda: List<ServeInv>
79 return GlobalScope.async(Dispatchers.IO) {
80 busqueda = AppDb.getAppDb(requireContext())!!.ServeInvDao()!!.fetchAllServers()
81 return@async busqueda
82 }.await()
83 }
84
85 fun CargarRV() {
86 GlobalScope.launch(Dispatchers.Main) {
87 servidores = buscarEnBD()
88 for ((i, item) in servidores.withIndex()) {
89 val ser = ServeInv(servidores[i].descripcion, servidores[i].direccion, servidores[i].predeterminado)
90 cargarRecicler(ser)
91 }
92 }
93 }
94
95 fun cargarRecicler(ser: ServeInv) {
96 //TODO CARGO EN LE RV
97 deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!!
98 val item = ItemsServidores(ser.descripcion, ser.direccion, ser.predeterminado.toString())
99
100 listServ.add(item)
101
102 viewAdapter = AdapterServidores(listServ, requireContext())
103 viewManager = LinearLayoutManager(requireContext())
104
105 rvServidores.apply {
106 adapter = viewAdapter
107 layoutManager = viewManager
108 }
109 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
110 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
111 return false
112 }
113
114 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) {
115 GlobalScope.launch(Dispatchers.Main) {
116 deleteServer(listServ[viewHolder.adapterPosition].descripcion.toString(), listServ[viewHolder.adapterPosition].direccion.toString())
117
118 (viewAdapter as AdapterServidores).removeItem(viewHolder)
119 viewAdapter.notifyDataSetChanged()
120 }
121 }
122
123 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
124 val itemView = viewHolder.itemView
125 val iconMargin = (itemView.height - deleteIcon.intrinsicHeight) / 2
126 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
127
128 if (dX > 0) {
129
130 if (dX < c.width / 2) c.drawColor(Color.GREEN)
131 else c.drawColor(Color.RED)
132 deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom - iconMargin)
133 } else {
134 }
135 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
136 deleteIcon.draw(c)
137 }
138 }
139
140 val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback)
141 itemTouchHelper.attachToRecyclerView(rvServidores)
142 }
143
144 suspend fun deleteServer(serverName: String, serverDir: String) {
145 lifecycleScope.launch {
146 withContext(Dispatchers.IO) {
147 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.deleteServer(serverName, serverDir)
148 }
149 }
150 }
151 }
152
app/src/main/java/com/focasoftware/deboinventariov20/UI/servidores/SpinnerAdapter.kt
File was created 1 package com.focasoftware.deboinventariov20.UI.servidores
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import android.widget.BaseAdapter
8 import android.widget.TextView
9 import com.focasoftware.deboinventariov20.Model.ServeInv
10 import com.focasoftware.deboinventariov20.R
11
12
13 class SpinnerAdapterServidor internal constructor(internal var context: Context, internal var list: List<ServeInv>) : BaseAdapter() {
14 override fun getCount(): Int {
15 return list.size
16 }
17
18 override fun getItem(i: Int): Any? {
19 return null
20 }
21
22 override fun getItemId(i: Int): Long {
23 return 0
24 }
25
26 override fun getView(i: Int, view1: View?, viewGroup: ViewGroup): View {
27 var views=view1
28 if (views == null) {
29 val inflater = LayoutInflater.from(context)
30
31 views = inflater.inflate(R.layout.item_spinner, viewGroup, false)
32 }
33
34 val tvServidorDesc = views!!.findViewById<TextView>(R.id.tvServidorDesc)
35 tvServidorDesc.text="${list[i].servNum} - ${list[i].descripcion}"
36 return tvServidorDesc
37
38 }
39 }
40
41
app/src/main/java/com/focasoftware/deboinventariov20/ui/MainActivity.kt
1 package com.focasoftware.deboinventariov20.ui File was deleted
2
3 import android.os.Bundle
4 import android.view.Menu
5 import com.google.android.material.navigation.NavigationView
6 import androidx.navigation.findNavController
7 import androidx.navigation.ui.AppBarConfiguration
8 import androidx.navigation.ui.navigateUp
9 import androidx.navigation.ui.setupActionBarWithNavController
10 import androidx.navigation.ui.setupWithNavController
11 import androidx.drawerlayout.widget.DrawerLayout
12 import androidx.appcompat.app.AppCompatActivity
13 import androidx.appcompat.widget.Toolbar
14 import com.focasoftware.deboinventariov20.R
15
16 class MainActivity : AppCompatActivity() {
17
18 private lateinit var appBarConfiguration: AppBarConfiguration
19
20 override fun onCreate(savedInstanceState: Bundle?) {
21 super.onCreate(savedInstanceState)
22 setContentView(R.layout.activity_main)
23 val toolbar: Toolbar = findViewById(R.id.toolbar)
24 setSupportActionBar(toolbar)
25
26
27 val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
28 val navView: NavigationView = findViewById(R.id.nav_view)
29 val navController = findNavController(R.id.nav_host_fragment)
30
31 appBarConfiguration = AppBarConfiguration(setOf(R.id.mainFragment2, R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout)
32 setupActionBarWithNavController(navController, appBarConfiguration)
33 navView.setupWithNavController(navController)
34 }
35
36 override fun onCreateOptionsMenu(menu: Menu): Boolean {
37 // Inflate the menu; this adds items to the action bar if it is present.
38 menuInflater.inflate(R.menu.main, menu)
39 return true
40 }
41
42 override fun onSupportNavigateUp(): Boolean {
43 val navController = findNavController(R.id.nav_host_fragment)
44 return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
45 }
46 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/SplashActivity.kt
1 package com.focasoftware.deboinventariov20.ui File was deleted
2
3 import android.app.Activity
4 import android.content.Intent
5 import android.os.Bundle
6 import com.focasoftware.deboinventariov20.R
7
8 class SplashActivity : Activity() {
9
10 override fun onCreate(savedInstanceState: Bundle?) {
11 super.onCreate(savedInstanceState)
12 setContentView(R.layout.activity_splash)
13 //window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
14
15 val bac = object : Thread(){
16 override fun run(){
17 try {
18 Thread.sleep(5)
19 val intent = Intent(baseContext, MainActivity:: class.java)
20 startActivity(intent)
21 finish()
22 } catch (e : Exception){
23 e.printStackTrace()
24 }
25 }
26 }
27 bac.start()
28 }
29 }
30 1 package com.focasoftware.deboinventariov20.ui
app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt
1 package com.focasoftware.deboinventariov20.ui.actualizacionMaestros File was deleted
2
3 import android.os.Bundle
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import android.widget.Button
8 import androidx.fragment.app.Fragment
9 import androidx.fragment.app.FragmentActivity
10 import androidx.lifecycle.lifecycleScope
11 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
12 import com.focasoftware.deboinventariov20.Model.*
13 import com.focasoftware.deboinventariov20.R
14 import com.google.android.material.bottomappbar.BottomAppBarTopEdgeTreatment
15 import kotlinx.android.synthetic.main.fragment_actua_maestros.*
16 import kotlinx.coroutines.*
17
18 public var BASE_URL =""
19 class ActuaMaestrosFragment : Fragment() {
20
21 var job: Job? = null
22
23
24 override fun onCreate(savedInstanceState: Bundle?) {
25 super.onCreate(savedInstanceState)
26 // GlobalScope.launch(Dispatchers.Main) {
27 // val invbody = fetchServerPreOne()
28 //BASE_URL= invbody!!.direccion.toString()
29 BASE_URL="http://10.0.2.2:3000/"
30 // }
31 // mostrarArticulos()
32 }
33
34 private suspend fun fetchServerPreOne(): ServeInv? {
35 return GlobalScope.async(Dispatchers.IO) {
36 return@async AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.fetchServerPreOne()
37 }.await()
38 }
39
40 // return "http://10.0.2.2:3000/"
41 // }
42
43
44 override fun onCreateView(
45 inflater: LayoutInflater, container: ViewGroup?,
46 savedInstanceState: Bundle?
47 ): View? {
48 // Inflate the layout for this fragment
49 val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false)
50 val bConfirmarAct = v.findViewById<Button>(R.id.btnConfirmarAct)
51 bConfirmarAct.setOnClickListener {
52 loading_view.visibility = View.VISIBLE
53 countriesList.text = "Obteniendo Maestros de artรญculos, aguarde por favor."
54 obtenerArticulos()
55 }
56 return v
57 }
58
59
60 private fun obtenerArticulos() {
61
62 val productosService = ProductosService.getProductosService()
63 var index: Long = 1
64 job = CoroutineScope(Dispatchers.IO).launch {
65 AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
66 .deleteAllArticulos()
67 val response = productosService.getProductos()
68 if (response.isSuccessful) {
69 for (pro in response.body()!!) {
70 val artiAcargar = Articles(
71 pro.sector,
72 pro.codigo,
73 pro.descripcion,
74 pro.codBar,
75 pro.codOrigen,
76 pro.precio,
77 pro.costo,
78 pro.exiVenta,
79 pro.exiDeposito,
80 pro.de,
81 pro.balanza,
82 pro.depSn,
83 pro.imagen
84 )
85 index += index
86
87 AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
88 .insertArticulos(artiAcargar)
89 }
90 withContext(Dispatchers.Main) {
91 countriesList.visibility = View.VISIBLE
92 countriesList.text = "ยกDatos Importados Correctamente!"
93 loading_view.visibility = View.GONE
94 }
95 //
96 } else {
97 countriesList.text = "Error: ${response.message()}"
98 }
99 }
100
101 // withContext(Dispatchers.Main) {
102 // if (response.isSuccessful) {
103 // val call = WebService
104 // .instance
105 // ?.createService(WebServiceApi::class.java)
106 // ?.articulos
107 // call?.enqueue(object : Callback<List<productos?>?> {
108 // override fun onResponse(
109 // call: Call<List<productos?>?>,
110 // response: Response<List<productos?>?>
111 // ) {
112 // if (response.code() == 200) {
113 // for (i in response.body()!!.indices) {
114 // //AppDb.getAppDb(requireActivity())!!.ArticulosDAO()?.insertArticulos(response.body()!![i])
115 // cargarArticulos(2, 500, "sfas", "66666","2,2", "2,2", false, false, "")
116 //// Log.d(
117 //// "TAG1", "Nombre Curso: " + response.body()!![i]?.sector
118 //// + "Codigo Profesor: " + response.body()!![i]?.descripcion
119 //// )
120 // mostrarArticulos()
121 // }
122 // } else if (response.code() == 404) {
123 // Log.d("TAG1", "No hay cursos")
124 // }
125 //
126 // }
127 //
128 // override fun onFailure(call: Call<List<productos?>?>, t: Throwable) {}
129 // })
130 }
131
132 fun mostrarArticulos() {
133 val Job = GlobalScope.launch {
134 var listArticulos: List<Articles>? = null
135 var temp: String = ""
136 listArticulos =
137 AppDb.getAppDb(requireActivity())?.ArticulosDAO()?.findAllArticulos()
138 if (listArticulos != null) {
139
140 for (i in listArticulos.indices)
141 temp += listArticulos[i].codigo.toString()
142 }
143 withContext(Dispatchers.Main) {
144 countriesList.visibility = View.VISIBLE
145 loading_view.visibility = View.GONE
146 countriesList?.text = temp
147 }
148 }
149 // for (professor in listArticulos!!) {
150 // editT.text= professor.id.toString()
151 // }
152 }
153
154
155 // fun observeViewModel() {
156 //
157 // val productosService = ProductosService.getProductosService()
158 // var job: Job? = null
159 //
160 //
161 // //countriesList.text="Procesando..."
162 // //countriesList.visibility = View.VISIBLE
163 // // GlobalScope1.launch(Dispatchers.IO) {
164 // val response = productosService.getProductos()
165 // if (response.isSuccessful) {
166 //// countriesList.layoutManager = LinearLayoutManager(context)
167 //// countriesList.itemAnimator = DefaultItemAnimator()
168 //
169 //// ProductAdapter.updateCountries(it)
170 // // cargarArticulos(response.body())
171 //
172 //
173 // val artiAcargar: Articulos? = null
174 // var index: Long = 1
175 //
176 // for (pro in response.body()!!) {
177 // //artiAcargar.id =index+1
178 // artiAcargar!!.sector = pro.sector
179 // artiAcargar.codigo = pro.codigo
180 // artiAcargar.descripcion = pro.descripcion
181 // artiAcargar.codBar = pro.codBar
182 // artiAcargar.precio = pro.precio
183 // artiAcargar.costo = pro.costo
184 // artiAcargar.balanza = pro.balanza
185 // artiAcargar.depSn = pro.depSn
186 // artiAcargar.imagen = pro.imagen
187 // index += index
188 //
189 // AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
190 // .insertArticulos(artiAcargar)
191 // }
192 // }
193 // // }
194 //
195 // //job.cancel()
196 //
197 //
198 // }
199
200 // fun cargarArticulos(Productos: List<Productos>?) {
201 // val artiAcargar: Articulos? = null
202 // var index: Long = 1
203 // //val job4 = CoroutineScope(Dispatchers.Default).launch {
204 // for (pro in Productos!!) {
205 // //artiAcargar.id =index+1
206 // artiAcargar!!.sector = pro.sector
207 // artiAcargar.codigo = pro.codigo
208 // artiAcargar.descripcion = pro.descripcion
209 // artiAcargar.codBar = pro.codBar
210 // artiAcargar.precio = pro.precio
211 // artiAcargar.costo = pro.costo
212 // artiAcargar.balanza = pro.balanza
213 // artiAcargar.depSn = pro.depSn
214 // artiAcargar.imagen = pro.imagen
215 // index += index
216 //
217 // AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!!
218 // .insertArticulos(artiAcargar)
219 // }
220 // }
221 }
222
223 1 package com.focasoftware.deboinventariov20.ui.actualizacionMaestros
app/src/main/java/com/focasoftware/deboinventariov20/ui/configuracion/ConfiguracionFragment.kt
1 package com.focasoftware.deboinventariov20.ui.configuracion File was deleted
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import android.widget.*
10 import androidx.fragment.app.Fragment
11 import androidx.fragment.app.FragmentActivity
12 import androidx.lifecycle.lifecycleScope
13 import androidx.navigation.NavController
14 import androidx.navigation.Navigation
15 import androidx.navigation.fragment.findNavController
16 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
17 import com.focasoftware.deboinventariov20.Model.ServeInv
18 import com.focasoftware.deboinventariov20.R
19 import com.focasoftware.deboinventariov20.ui.servidores.SpinnerAdapterServidor
20 import kotlinx.android.synthetic.main.fragment_configuracion.*
21 import kotlinx.coroutines.*
22
23 class ConfiguracionFragment : Fragment() {
24
25 lateinit var sharedPreferences: SharedPreferences
26 private lateinit var navController: NavController
27 lateinit var adapterSpinnerServidor: SpinnerAdapterServidor
28 var itemSelect: Int = 0
29
30 override fun onCreate(savedInstanceState: Bundle?) {
31 super.onCreate(savedInstanceState)
32 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
33 }
34
35 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
36 super.onViewCreated(view, savedInstanceState)
37 navController = Navigation.findNavController(view)
38
39 }
40
41 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
42
43 val v = inflater.inflate(R.layout.fragment_configuracion, container, false)
44 val etRuta = v.findViewById<EditText>(R.id.etRuta)
45 val btnGuardar = v.findViewById<Button>(R.id.btnGuardar)
46 val rbProInclu = v.findViewById<RadioButton>(R.id.rbProInclu)
47 val rbProNoInclu = v.findViewById<RadioButton>(R.id.rbProNoInclu)
48 val cbHabiLectura = v.findViewById<CheckBox>(R.id.cbHabiLectura)
49 val cbMostrarStock = v.findViewById<CheckBox>(R.id.cbMostrarStock)
50 val rbCodigoBarras = v.findViewById<RadioButton>(R.id.rbCodigoBarras)
51 val rbCodigoDebo = v.findViewById<RadioButton>(R.id.rbCodigoDebo)
52 val rbCodigoOrigen = v.findViewById<RadioButton>(R.id.rbCodigoOrigen)
53 val rbDeposito = v.findViewById<RadioButton>(R.id.rbDeposito)
54 val rbVentas = v.findViewById<RadioButton>(R.id.rbVentas)
55 val cbMostrarExistencia = v.findViewById<CheckBox>(R.id.cbMostrarExistencia)
56 val cbMostrarPrecio = v.findViewById<CheckBox>(R.id.cbMostrarPrecio)
57 val btnAgregarServidor = v.findViewById<Button>(R.id.btnAgregarServidor)
58 val spServidor = v.findViewById<Spinner>(R.id.spServidor)
59 val btnValidarServidor = v.findViewById<Button>(R.id.btnValidarServidor)
60
61 if (sharedPreferences.contains("etRuta")) if (sharedPreferences.contains("rbProInclu")) {
62 if (sharedPreferences.getString("rbProInclu", "").toString() == "0") {
63 rbProInclu.isChecked = false
64 rbProNoInclu.isChecked = true
65 } else if (sharedPreferences.getString("rbProInclu", "").toString() == "1") {
66 rbProInclu.isChecked = true
67 rbProNoInclu.isChecked = false
68 }
69 } else (sharedPreferences.getString("rbProInclu", "").toString() == "")
70
71 if (sharedPreferences.contains("rbProNoInclu")) {
72 if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") {
73 rbProNoInclu.isChecked = false
74 rbProInclu.isChecked = true
75 } else if (sharedPreferences.getString("rbProNoInclu", "").toString() == "1") {
76 rbProNoInclu.isChecked = true
77 rbProInclu.isChecked = false
78 }
79 } else (sharedPreferences.getString("rbProNoInclu", "").toString() == "")
80
81 if (sharedPreferences.contains("cbHabiLectura")) {
82 if (sharedPreferences.getString("cbHabiLectura", "").toString() == "0") {
83 cbHabiLectura.isChecked = false
84 } else if (sharedPreferences.getString("cbHabiLectura", "").toString() == "1") {
85 cbHabiLectura.isChecked = true
86 }
87 } else (sharedPreferences.getString("cbHabiLectura", "").toString() == "")
88
89 if (sharedPreferences.contains("cbMostrarStock")) {
90 if (sharedPreferences.getString("cbMostrarStock", "").toString() == "0") {
91 cbMostrarStock.isChecked = false
92 } else if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") {
93 cbMostrarStock.isChecked = true
94 }
95 } else (sharedPreferences.getString("cbMostrarStock", "").toString() == "")
96
97 if (sharedPreferences.contains("rbVentas")) {
98 if (sharedPreferences.getString("rbVentas", "").toString() == "0") {
99 rbVentas.isChecked = false
100 rbDeposito.isChecked = true
101 } else if (sharedPreferences.getString("rbVentas", "").toString() == "1") {
102 rbVentas.isChecked = true
103 rbDeposito.isChecked = false
104 }
105 } else (sharedPreferences.getString("rbVentas", "").toString() == "")
106
107 if (sharedPreferences.contains("rbDeposito")) {
108 if (sharedPreferences.getString("rbDeposito", "").toString() == "0") {
109 rbDeposito.isChecked = false
110 rbVentas.isChecked = true
111 } else if (sharedPreferences.getString("rbDeposito", "").toString() == "1") {
112 rbDeposito.isChecked = true
113 rbVentas.isChecked = false
114 }
115 } else (sharedPreferences.getString("rbDeposito", "").toString() == "")
116
117 if (sharedPreferences.contains("rbCodigoDebo")) {
118 if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "0") {
119 rbCodigoDebo.isChecked = false
120 rbCodigoOrigen.isChecked = false
121 rbCodigoBarras.isChecked = false
122 } else if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "1") {
123 rbCodigoDebo.isChecked = true
124 rbCodigoOrigen.isChecked = false
125 rbCodigoBarras.isChecked = false
126 }
127 } else (sharedPreferences.getString("rbCodigoDebo", "").toString() == "")
128
129 if (sharedPreferences.contains("rbCodigoOrigen")) {
130 if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "0") {
131 rbCodigoOrigen.isChecked = false
132 } else if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "1") {
133 rbCodigoOrigen.isChecked = true
134 }
135 } else (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "")
136
137 if (sharedPreferences.contains("rbCodigoBarras")) {
138 if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "0") {
139 rbCodigoBarras.isChecked = false
140 } else if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "1") {
141 rbCodigoBarras.isChecked = true
142 }
143 } else (sharedPreferences.getString("rbCodigoBarras", "").toString() == "")
144
145 if (sharedPreferences.contains("cbMostrarExistencia")) {
146 if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "0") {
147 cbMostrarExistencia.isChecked = false
148 } else if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "1") {
149 cbMostrarExistencia.isChecked = true
150 }
151 } else (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "")
152
153 if (sharedPreferences.contains("cbMostrarPrecio")) {
154 if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "0") {
155 cbMostrarPrecio.isChecked = false
156 } else if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "1") {
157 cbMostrarPrecio.isChecked = true
158 }
159 } else (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "")
160
161 btnGuardar.setOnClickListener {
162 guardarPreferencias()
163 Toast.makeText(v.context, "Los Datos se guardaron correctamente", Toast.LENGTH_LONG).show()
164 navController.navigate(R.id.action_configuracionFragment_to_mainFragment2)
165 }
166 btnAgregarServidor.setOnClickListener { findNavController().navigate(R.id.servidoresFragment) }
167 btnValidarServidor.setOnClickListener { Toast.makeText(requireContext(), "Direcciรณn correcta", Toast.LENGTH_LONG).show() }
168 GlobalScope.launch(Dispatchers.Main) {
169 adapterSpinnerServidor = SpinnerAdapterServidor(requireContext(), getDescServers())
170 spServidor.adapter = adapterSpinnerServidor
171 if (sharedPreferences.contains("ServerPredeterminado")) {
172 spServidor.setSelection(sharedPreferences.getString("ServerPredeterminado", "").toString().toInt())
173 } else (spServidor.setSelection(0))
174 }
175 spServidor?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
176 override fun onNothingSelected(parent: AdapterView<*>?) {}
177 override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
178 itemSelect = position
179 }
180 }
181 return v
182 }
183
184 suspend fun getDescServers(): List<ServeInv> {
185 return GlobalScope.async(Dispatchers.IO) {
186 return@async AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.fetchAllServers()
187 }.await()
188 }
189
190 fun guardarPreferencias() {
191 // try {
192 val editor = sharedPreferences.edit()
193
194 if (etRuta.text.isNotEmpty()) editor?.putString("etRuta", etRuta.text.toString())
195
196 if (rbProInclu.isChecked) editor?.putString("rbProInclu", "1") else editor?.putString("rbProInclu", "0")
197 if (rbProNoInclu.isChecked) editor?.putString("rbProNoInclu", "1") else editor?.putString("rbProNoInclu", "0")
198
199 if (cbHabiLectura.isChecked) editor?.putString("cbHabiLectura", "1") else editor?.putString("cbHabiLectura", "0")
200 if (cbMostrarStock.isChecked) editor?.putString("cbMostrarStock", "1") else editor?.putString("cbMostrarStock", "0")
201 if (rbVentas.isChecked) editor?.putString("rbVentas", "1") else editor?.putString("rbVentas", "0")
202 if (rbDeposito.isChecked) editor?.putString("rbDeposito", "1") else editor?.putString("rbDeposito", "0")
203 if (rbCodigoDebo.isChecked) editor?.putString("rbCodigoDebo", "1") else editor?.putString("rbCodigoDebo", "0")
204 if (rbCodigoOrigen.isChecked) editor?.putString("rbCodigoOrigen", "1") else editor?.putString("rbCodigoOrigen", "0")
205 if (rbCodigoBarras.isChecked) editor?.putString("rbCodigoBarras", "1") else editor?.putString("rbCodigoBarras", "0")
206 if (cbMostrarExistencia.isChecked) editor?.putString("cbMostrarExistencia", "1") else editor?.putString("cbMostrarExistencia", "0")
207 if (cbMostrarPrecio.isChecked) editor?.putString("cbMostrarPrecio", "1") else editor?.putString("cbMostrarPrecio", "0")
208 editor?.putString("ServerPredeterminado", itemSelect.toString())
209 updateServerPreInZero()
210 updateServerPre(itemSelect+1)
211
212 editor?.apply()
213 editor.commit()
214
215 // } catch (e: Exception) {
216 // Toast.makeText(requireContext(), "Error ", Toast.LENGTH_LONG).show()
217 // e.printStackTrace()
218 // }
219 }
220
221 private fun updateServerPreInZero() {
222 lifecycleScope.launch {
223 withContext(Dispatchers.IO) {
224 val activity: FragmentActivity? = activity
225 if (activity != null && isAdded) {
226 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.UpdateServerPreInZero()
227 }
228 }
229 }
230 }
231 private fun updateServerPre(server:Int) {
232 lifecycleScope.launch {
233 withContext(Dispatchers.IO) {
234 val activity: FragmentActivity? = activity
235 if (activity != null && isAdded) {
236 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.UpdateServerPre(server)
237 }
238 }
239 }
240 }
241 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionFragment.kt
1 package com.focasoftware.deboinventariov20.ui.descripcionFragment File was deleted
2
3 import android.app.AlertDialog
4 import android.content.Context
5 import android.content.SharedPreferences
6 import android.graphics.Canvas
7 import android.graphics.Color
8 import android.graphics.drawable.ColorDrawable
9 import android.os.Bundle
10 import android.text.InputType
11 import android.view.LayoutInflater
12 import android.view.View
13 import android.view.ViewGroup
14 import android.widget.Button
15 import androidx.fragment.app.Fragment
16 import androidx.fragment.app.FragmentActivity
17 import androidx.lifecycle.lifecycleScope
18 import androidx.navigation.NavController
19 import androidx.navigation.Navigation
20 import androidx.recyclerview.widget.ItemTouchHelper
21 import androidx.recyclerview.widget.LinearLayoutManager
22 import androidx.recyclerview.widget.RecyclerView
23 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
24 import com.focasoftware.deboinventariov20.Model.Articles
25 import com.focasoftware.deboinventariov20.Model.InvBody
26 import com.focasoftware.deboinventariov20.R
27 import com.focasoftware.deboinventariov20.ui.inventario.InventarioFragment
28 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
29 import kotlinx.android.synthetic.main.login_dialog.view.*
30 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
31 import kotlinx.coroutines.*
32
33 class DescripcionFragment : Fragment() {
34 private var artAcargar2: List<Articles>? = null
35 private var listArticulos2: List<Articles>? = null
36 lateinit var viewAdapter2: RecyclerView.Adapter<*>
37 private lateinit var viewManager2: RecyclerView.LayoutManager
38 private lateinit var rcDescripcion: RecyclerView
39 private var swipeBackground: ColorDrawable = ColorDrawable(Color.YELLOW)
40 private var cantidad = 0F
41 private var numeroInventario = 0
42 lateinit var navController: NavController
43 lateinit var sharedPreferences: SharedPreferences
44 private var indice = 0
45 private var artCargadoEnBD: InvBody? = null
46
47 override fun onCreate(savedInstanceState: Bundle?) {
48 super.onCreate(savedInstanceState)
49 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
50 arguments.apply {
51 artAcargar2 = requireArguments().getSerializable("ArrayDesc") as List<Articles>
52 numeroInventario = requireArguments().getInt("numeroInv")
53 }
54 }
55
56 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
57 super.onViewCreated(view, savedInstanceState)
58 navController = Navigation.findNavController(view)
59 }
60
61 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
62 val v = inflater.inflate(R.layout.fragment_descripcion, container, false)
63 rcDescripcion = v.findViewById(R.id.rcDescripcion)
64 // val btnSalir = v.findViewById<Button>(R.id.btnSalir)
65
66 IngresarRecicler(artAcargar2)
67
68 // btnSalir.setOnClickListener {
69 // activity?.onBackPressed();
70 //// VolverAinventario()
71 // }
72 return v
73 }
74
75 fun IngresarRecicler(articulos: List<Articles>?) {
76
77 viewAdapter2 = DescripcionListAdapter(articulos)
78 viewManager2 = LinearLayoutManager(requireContext())
79
80 rcDescripcion.apply {
81 adapter = viewAdapter2
82 layoutManager = viewManager2
83 }
84 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
85 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
86 return false
87 }
88
89 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) {
90
91 var indice = 0
92 indice = viewHolder.layoutPosition
93 GlobalScope.launch(Dispatchers.Main) {
94 //TODO BUSCO EN BASE DE DATOS
95 artCargadoEnBD = buscarCodigoDeboEnBD((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.sector.toString(),
96 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)?.codigo.toString(),
97 numeroInventario.toString())
98 if (artCargadoEnBD == null) {
99 val mDialogView = LayoutInflater.from(context).inflate(R.layout.ingresar_cantidad, null)
100 val mBuilder = AlertDialog.Builder(context).setView(mDialogView)
101 .setCancelable(false)
102 if ((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==1 || (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==3 || (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza==7)
103 mDialogView.etCantidad.inputType= InputType.TYPE_CLASS_NUMBER
104 mDialogView.tvTitulo.text = "${(viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion}"
105 val mAlertDialog = mBuilder.show()
106 mDialogView.btnAceptar.setOnClickListener {
107 if (mDialogView.etCantidad.text.isNullOrEmpty()) {
108 mDialogView.etCantidad.error = "No vacio"
109 mDialogView.etCantidad.requestFocus()
110 mDialogView.etCantidad.hint = "Ingrese un valor"
111 } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
112 cantidad = mDialogView.etCantidad.text.toString().toFloat()
113 val body = InvBody(numeroInventario,
114 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector,
115 // TODO: PREPARO PARA MANDAR A CARGAR EN LA BD
116 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo,
117 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion,
118 cantidad.toString(),
119 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codBar,
120 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codOrigen,
121 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio,
122 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio,
123 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza,
124 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.depSn,
125 InventarioFragment().ObtenerFechaActual(),
126 InventarioFragment().ObtenerFechaActual())
127 InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS
128 // VolverAinventario()
129 activity?.onBackPressed()
130 mAlertDialog.dismiss()
131 }
132 }
133 } else if (artCargadoEnBD != null) {
134
135 val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
136 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${artCargadoEnBD!!.descripcion}', se encuentra cargado.").setCancelable(false)
137 if (artCargadoEnBD!!.balanza.toString().contains("1" ) || artCargadoEnBD!!.balanza.toString().contains("3") || artCargadoEnBD!!.balanza.toString().contains("7")) mDialogView.tvNuevaCantidad.inputType= InputType.TYPE_CLASS_NUMBER
138 mDialogView.tvCantInicial.text =String.format("%.2f", artCargadoEnBD!!.cantTomada.toString().toFloat())
139
140 val mAlertDialog = mBuilder.show()
141 mDialogView.rbSumar.setOnClickListener {
142 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
143 mDialogView.tvResultado.text = String.format("%.2f",(mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()))
144 mDialogView.tvNuevaCantidad.isEnabled=false
145 }
146 }
147 mDialogView.rbRestar.setOnClickListener {
148 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
149 if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
150 mDialogView.tvResultado.text = String.format("%.2f",mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
151 mDialogView.tvNuevaCantidad.isEnabled = false
152 }else{
153 mDialogView.tvResultado.text=""
154 mDialogView.tvResultado.error = "Operaciรณn No Valida"
155 mDialogView.tvResultado.requestFocus()
156 mDialogView.tvResultado.hint = "Error"
157 }
158 }
159 }
160 mDialogView.rbMdodificar.setOnClickListener {
161 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
162 mDialogView.tvResultado.text = String.format("%.2f", (mDialogView.tvNuevaCantidad.text.toString().toFloat()))
163 mDialogView.tvNuevaCantidad.isEnabled = false
164 }
165 }
166 mDialogView.btnAceptar.setOnClickListener {
167 if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) {
168 if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) {
169
170 updateCantidad((viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector.toString(),
171 (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo.toString(),
172 mDialogView.tvResultado.text.toString().toFloat())
173 // VolverAinventario()
174 activity?.onBackPressed();
175 mAlertDialog.dismiss()
176 } else if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
177 mDialogView.tvResultado.error = "Operaciรณn Requerida"
178 mDialogView.tvResultado.requestFocus()
179 mDialogView.tvResultado.hint = "Seleccione Operaciรณn"
180 }
181 } else if (mDialogView.tvNuevaCantidad.text.isEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
182 mDialogView.tvNuevaCantidad.error = "Completar"
183 mDialogView.tvNuevaCantidad.requestFocus()
184 mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
185 }
186 }
187 mDialogView.dialogCancelBtn.setOnClickListener {
188 activity?.onBackPressed();
189 mAlertDialog.dismiss()
190 }
191 }
192 }
193 }
194
195 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
196 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
197 val itemView = viewHolder.itemView
198
199 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
200
201 if (dX > 0) {
202
203 c.drawColor(Color.RED)
204 } else if (dX < 0) {
205 // swipeBackground.setBounds(itemView.right+dX.toInt(),itemView.top,itemView.right,itemView.bottom)
206 c.drawColor(Color.YELLOW)
207 }
208 swipeBackground.draw(c)
209 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
210 }
211 }
212 val itemTouchHelper2 = ItemTouchHelper(itemTouchHelperCallback)
213 itemTouchHelper2.attachToRecyclerView(rcDescripcion)
214
215 }
216
217 fun InsertarArtEnDB(cuarpoInventario: InvBody) {
218 lifecycleScope.launch {
219 withContext(Dispatchers.IO) {
220 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario)
221 }
222 }
223 }
224
225 // fun VolverAinventario() {
226 //
227 // val editor = sharedPreferences.edit()
228 // editor?.putString("Inventario", numeroInventario.toString())
229 // editor?.apply()
230 // editor.commit()
231 // navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment)
232 // }
233
234 suspend fun buscarCodigoDeboEnBD(sector: String, codigo: String, numInventario: String): InvBody? {
235 //TODO BUSQUEDA POR CODIGO DE BARRAS
236 var busqueda: InvBody? = null
237 return GlobalScope.async(Dispatchers.IO) {
238 busqueda = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.fetchArtInInvBody(sector, codigo, numInventario)
239 return@async busqueda
240 }.await()
241 }
242
243 fun updateCantidad(sector: String, codigo: String, cantidad: Float) {
244 lifecycleScope.launch {
245 withContext(Dispatchers.IO) {
246 val activity: FragmentActivity? = activity
247 if (activity != null && isAdded) {
248 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo)
249 }
250 }
251 }
252 }
253 }
254
255 1 package com.focasoftware.deboinventariov20.ui.descripcionFragment
app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/DescripcionListAdapter.kt
1 package com.focasoftware.deboinventariov20.ui.descripcionFragment File was deleted
2
3 import android.view.LayoutInflater
4 import android.view.View
5 import android.view.ViewGroup
6 import androidx.recyclerview.widget.RecyclerView
7 import com.focasoftware.deboinventariov20.Model.Articles
8 import com.focasoftware.deboinventariov20.R
9 import kotlinx.android.synthetic.main.item.view.*
10
11 class DescripcionListAdapter(private val productos: List<Articles>?) :
12 RecyclerView.Adapter<DescripcionListAdapter.ItemsViewHolder>() {
13 internal var items2: List<Articles>? = null
14
15 init {
16 this.items2 = productos
17 }
18
19 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(
20 LayoutInflater.from(parent.context).inflate(R.layout.item_descripcion, parent, false)
21 )
22
23 override fun getItemCount() = productos!!.size
24
25 override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) {
26 when (holder) {
27 is ItemsViewHolder -> {
28 holder.bind(items2!![position])
29 }
30 }
31 }
32
33
34 class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) {
35
36 val sector = view.tvSector
37 val codigo = view.tvCodigo
38 val descripcion = view.tvDescripcion
39 val codigoBarras = view.tvCodigoBarras
40
41 fun bind(pro: Articles) {
42 sector.text = pro.sector
43 codigo.text = pro.codigo
44 descripcion.text = pro.descripcion
45 codigoBarras.text = pro.codBar
46 }
47 }
48 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/descripcionFragment/ItemDescripcion.kt
1 package com.focasoftware.deboinventariov20.ui.descripcionFragment File was deleted
2
3 data class ItemDescripcion(val sector: String?,val codigo: String?, val descripcion: String?, val codigoBarras: String?)
app/src/main/java/com/focasoftware/deboinventariov20/ui/detalleProducto/DetalleArtFragment.kt
1 package com.focasoftware.deboinventariov20.ui.detalleProducto File was deleted
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import androidx.fragment.app.Fragment
10 import androidx.navigation.NavController
11 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
12 import com.focasoftware.deboinventariov20.Model.Articles
13 import com.focasoftware.deboinventariov20.R
14 import kotlinx.android.synthetic.main.fragment_detalle_art.*
15 import kotlinx.coroutines.Dispatchers
16 import kotlinx.coroutines.GlobalScope
17 import kotlinx.coroutines.async
18 import kotlinx.coroutines.launch
19
20 class DetalleArtFragment : Fragment() {
21
22 private var Inventario: Int = 0
23 private var sector: String? = null
24 private var codigo: String? = null
25 private var artSerch: Articles? = null
26 lateinit var sharedPreferences: SharedPreferences
27
28 override fun onCreate(savedInstanceState: Bundle?) {
29 super.onCreate(savedInstanceState)
30 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
31 arguments?.let {
32 sector = it.getString("sector")
33 codigo = it.getString("codigo")
34 Inventario= it.getInt("numeroInv")
35 }
36 marcarInventario()
37 GlobalScope.launch(Dispatchers.Main) {
38
39 artSerch = buscarCodigoDeboEnBD(sector, codigo)
40 if (artSerch == null) {
41
42 // val type = InputType.TYPE_CLASS_NUMBER
43 // MaterialDialog(requireContext()).show {
44 //
45 // title(text = "Producto '$sChangeUpper', se encuentra cargado.")
46 // message(R.string.sCantidadNueva)
47 // input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence ->
48 // fCant = 0F
49 // fCant = charSequence.toString().toFloat()
50 // }
51 // positiveButton(R.string.btnOk) {
52 // //TODO ACTUALIZO CANTIADAD EN BD
53 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
54 // //TODO ACTUALIZO CANTIDAD EN RV
55 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
56 // viewAdapter.notifyDataSetChanged()
57 // dismiss()
58 // }
59 // }.cancelOnTouchOutside(false).cornerRadius(10F)
60 } else if (artSerch != null) {
61 tvSector.text=sector
62 tvCodigo.text=codigo
63 tvDeposito.text=if(artSerch!!.depSn!!.toInt() ==0)"No" else "Si"
64 tvDescripcion.text=artSerch!!.descripcion.toString()
65 tvCodigoBarras.text=artSerch!!.codBar.toString()
66 tvCodigoOrigen.text=artSerch!!.codOrigen.toString()
67 tvExiVenta.text=artSerch!!.exiVenta.toString()
68 tvExiDeposito.text=artSerch!!.exiDeposito.toString()
69 tvBal.text=artSerch!!.balanza.toString()
70 tvDE.text=artSerch!!.de.toString()
71 }
72 }
73 }
74
75 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
76
77 return inflater.inflate(R.layout.fragment_detalle_art, container, false)
78 }
79
80 suspend fun buscarCodigoDeboEnBD(sector: String?, codigo: String?): Articles? {
81 //TODO BUSQUEDA POR CODIGO DE BARRAS
82 var busqueda: Articles? = null
83 return GlobalScope.async(Dispatchers.IO) {
84 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.fetchArticuloByCodSec(sector, codigo)
85 return@async busqueda
86 }.await()
87 }
88 fun marcarInventario() {
89
90 val editor = sharedPreferences.edit()
91 editor?.putString("Inventario", Inventario.toString())
92 editor?.apply()
93 editor.commit()
94 // navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment)
95 }
96 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt
1 package com.focasoftware.deboinventariov20.ui.inventario File was deleted
2
3 import android.annotation.SuppressLint
4 import android.app.AlertDialog
5 import android.content.Context
6 import android.content.DialogInterface
7 import android.content.SharedPreferences
8 import android.graphics.Canvas
9 import android.graphics.Color
10 import android.graphics.drawable.Drawable
11 import android.os.Bundle
12 import android.text.InputType.TYPE_CLASS_NUMBER
13 import android.view.KeyEvent
14 import android.view.LayoutInflater
15 import android.view.View
16 import android.view.ViewGroup
17 import android.widget.EditText
18 import android.widget.TextView
19 import android.widget.Toast
20 import androidx.core.content.ContextCompat
21 import androidx.core.os.bundleOf
22 import androidx.fragment.app.Fragment
23 import androidx.lifecycle.lifecycleScope
24 import androidx.navigation.NavController
25 import androidx.navigation.Navigation
26 import androidx.recyclerview.widget.ItemTouchHelper
27 import androidx.recyclerview.widget.LinearLayoutManager
28 import androidx.recyclerview.widget.RecyclerView
29 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
30 import com.focasoftware.deboinventariov20.Model.Articles
31 import com.focasoftware.deboinventariov20.Model.InvBody
32 import com.focasoftware.deboinventariov20.Model.InvHead
33 import com.focasoftware.deboinventariov20.R
34 import com.focasoftware.deboinventariov20.ui.util.Base.dialogos.DialogNoEncontrado
35 import kotlinx.android.synthetic.main.fragment_inventario.*
36 import kotlinx.android.synthetic.main.ingresar_cantidad.view.*
37 import kotlinx.android.synthetic.main.login_dialog.view.*
38 import kotlinx.android.synthetic.main.login_dialog.view.btnAceptar
39 import kotlinx.coroutines.*
40 import java.time.LocalDateTime
41 import java.time.format.DateTimeFormatter
42 import java.util.*
43
44
45 class InventarioFragment : Fragment(), ProductosListAdapter.OnImageDotsClickListener {
46
47 private lateinit var sharedPreferences: SharedPreferences
48 private var iArea: Int = 0
49 private lateinit var invHead: InvHead
50 private lateinit var rcInventarios: RecyclerView
51 private lateinit var viewAdapter: RecyclerView.Adapter<*>
52 private lateinit var viewManager: RecyclerView.LayoutManager
53 private lateinit var sChangeUpper: String
54 private var listArticulos = ArrayList<ItemsRecycler>()
55 private lateinit var navController: NavController
56 private var InventarioNuevo: Int = 0
57 private var iEstado = 0
58 private var iBusquedaPor = 0
59 private var fCant = 0F
60 private var bFirst = false
61 private lateinit var deleteIcon: Drawable
62
63 override fun onCreate(savedInstanceState: Bundle?) {
64 super.onCreate(savedInstanceState)
65
66 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
67 if (sharedPreferences.contains("Inventario")) if (sharedPreferences.getString("Inventario", "").toString() != "-1") {
68 InventarioNuevo = sharedPreferences.getString("Inventario", "").toString().toInt()
69 val editor = sharedPreferences.edit()
70 editor?.putString("Inventario", "-1")
71 editor?.apply()
72 editor.commit()
73 }
74 }
75
76
77 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
78 val v = inflater.inflate(R.layout.fragment_inventario, container, false)
79 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
80 val tCodigoBarras = v.findViewById<EditText>(R.id.etCodigoBarras)
81 rcInventarios = v.findViewById(R.id.rcInventarios)
82 val tvTitulo = v.findViewById<TextView>(R.id.tvTitulo)
83
84 if (InventarioNuevo == 0) {// TODO: SI INVETNARIO NUEVO
85 GlobalScope.launch(Dispatchers.Main) {
86 //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO
87 InventarioNuevo = AppDb.getAppDb(requireActivity())?.InvHeadDAO()?.findLastInv()?.plus(1) ?: 1
88 //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO
89 invHead = InvHead(InventarioNuevo, if (SerchArea() == 0) "Ventas" else "Deposito", 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, SerchArea(), AjusteProductos(), ProdNoCont())
90 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead)
91 tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo"
92 }
93 } else {// TODO (SI VENGO DE FRAGMENT DESCRIPCION)
94 listArticulos.clear()
95 CargarDeBdInventario(InventarioNuevo)
96 tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo"
97 }
98
99 tCodigoBarras.setOnKeyListener { _, keyCode, keyEvent ->
100 if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.action == KeyEvent.ACTION_UP) {
101 sChangeUpper = tCodigoBarras.text.toString()
102 var indiceDelArtEncontrado = 0
103
104 if (tCodigoBarras.text.isNullOrBlank()) {
105 tCodigoBarras.error = "No puede estar vacio"
106 tCodigoBarras.requestFocus()
107 tCodigoBarras.hint = "No puede estar vacio"
108 } else {
109
110 //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS
111 when (iBusquedaPor) {
112 0 -> {
113 GlobalScope.launch(Dispatchers.Main) {
114 indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice
115 //TODO (Si no lo encuentra devuelve -1)
116 if (indiceDelArtEncontrado != -1) {
117 if (swSumaUno!!.isChecked) {
118 // fCant = 0F
119 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
120 // fCant += 1F
121 //TODO ACTUALIZO LA CANTIDAD EN LA BD
122 updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(),
123 listArticulos[indiceDelArtEncontrado].codigo.toString(),
124 listArticulos[indiceDelArtEncontrado].cantTomada + 1)
125 //TODO ACTUALIZO LA CANTIDAD EN EL RV
126 listArticulos[indiceDelArtEncontrado].cantTomada = listArticulos[indiceDelArtEncontrado].cantTomada + 1
127 viewAdapter.notifyDataSetChanged()
128 } else {
129 dialogoSumaResta(requireContext(), indiceDelArtEncontrado, listArticulos[indiceDelArtEncontrado].univta, false)
130 }
131
132 } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD
133
134
135 //TODO BUSCO EN BASE DE DATOS
136 val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
137 ContinuarCargaCB(artEncontrado)//TODO SE MANDA CERO POR QUE ES UN ARTICULO ESCANEADO NUEVO PARA QUE SEA COMPATIBLE
138 }
139
140
141 tCodigoBarras.focusable = View.FOCUSABLE
142 tCodigoBarras.setText("")
143 tCodigoBarras.selectAll()
144 }
145 return@setOnKeyListener true
146
147
148 }
149 1 -> {//TODO: BUSQUEDA POR DESCRIPCION**************************************************************************
150 //
151 // indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 1) //TODO :Si encuentra el articulo en el RV devuelve el indice
152 // //TODO Si no lo encuentra devuelve -1
153 // if (indiceDelArtEncontrado != -1) {
154 //// if (swSumaUno!!.isChecked) {
155 //// fCant = 0F
156 //// fCant = listArticulos[indiceDelArtEncontrado].cantTomada
157 //// fCant += 1F
158 //// listArticulos[indiceDelArtEncontrado].cantTomada = fCant
159 //// viewAdapter.notifyDataSetChanged()
160 //// } else {
161 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
162 // MaterialDialog(requireContext()).show {
163 // title(R.string.sTituloNueva)
164 // message(R.string.sCantidadNueva)
165 // input { materialDialog, charSequence ->
166 // fCant = 0F
167 // fCant = charSequence.toString().toFloat()
168 // }
169 // positiveButton(R.string.btnOk) {
170 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
171 // viewAdapter.notifyDataSetChanged()
172 // dismiss()
173 // }
174 // }.cancelOnTouchOutside(false).cornerRadius(10F)
175 //// }
176 //
177 // } else if
178 // (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD
179 GlobalScope.launch(Dispatchers.Main) {
180 val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
181 ContinuarCargaDesc(artEncontrado as ArrayList<Articles>)
182 }
183 // }
184
185 return@setOnKeyListener true
186 }
187 // 2 -> {//TODO: BUSQUEDA POR CODIGO DE ORIGEN**************************************************************************
188 // indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 3)//TODO Si encuentra el articulo en el RV devuelve el indice
189 // //TODO Si no lo encuentra devuelve -1
190 // if (indiceDelArtEncontrado != -1) {
191 // if (swSumaUno!!.isChecked) {
192 // fCant = 0F
193 // fCant = listArticulos[indiceDelArtEncontrado].cantTomada
194 // fCant += 1F
195 // //TODO ACTUALIZO LA CANTIDAD EN LA BD
196 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
197 // //TODO ACTUALIZO LA CANTIDAD EN EL RV
198 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
199 // viewAdapter.notifyDataSetChanged()
200 // } else {
201 // val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
202 // val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Producto '${listArticulos[indiceDelArtEncontrado].descripcion}', se encuentra cargado.")
203 // .setCancelable(false)
204 // mDialogView.tvCantInicial.text = listArticulos[indiceDelArtEncontrado].cantTomada.toString()
205 // val mAlertDialog = mBuilder.show()
206 // mDialogView.rbSumar.setOnClickListener {
207 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
208 // mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
209 // }
210 // }
211 // mDialogView.rbRestar.setOnClickListener {
212 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
213 // if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
214 // mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
215 // }
216 // }
217 // }
218 // mDialogView.rbMdodificar.setOnClickListener {
219 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
220 // mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
221 // }
222 // }
223 // mDialogView.btnAceptar.setOnClickListener {
224 // mAlertDialog.dismiss()
225 // val name = mDialogView.tvgenerico4.text.toString().toFloat()
226 // fCant = 0F
227 // fCant = name
228 // listArticulos[indiceDelArtEncontrado].cantTomada = fCant
229 // updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
230 // viewAdapter.notifyDataSetChanged()
231 // }
232 // mDialogView.dialogCancelBtn.setOnClickListener {
233 // mAlertDialog.dismiss()
234 // }
235 //// fCant = listArticulos[indiceDelArtEncontrado].cantTomada
236 //// val type = InputType.TYPE_CLASS_NUMBER
237 //// MaterialDialog(requireContext()).show {
238 ////
239 //// title(text = "Producto '$sChangeUpper', se encuentra cargado.")
240 //// message(R.string.sCantidadNueva)
241 //// input(waitForPositiveButton = false, hint = "99.99", inputType = type) { materialDialog, charSequence ->
242 //// fCant = 0F
243 //// fCant = charSequence.toString().toFloat()
244 //// }
245 //// positiveButton(R.string.btnOk) {
246 //// //TODO ACTUALIZO CANTIADAD EN BD
247 //// updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant)
248 //// //TODO ACTUALIZO CANTIDAD EN RV
249 //// listArticulos[indiceDelArtEncontrado].cantTomada = fCant
250 //// viewAdapter.notifyDataSetChanged()
251 //// dismiss()
252 //// }
253 //// }.cancelOnTouchOutside(false).cornerRadius(10F)
254 // }
255 // } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD
256 //
257 // GlobalScope.launch(Dispatchers.Main) {
258 // //TODO BUSCO EN BASE DE DATOS
259 // listArticulos[indiceDelArtEncontrado].cantTomada
260 // val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT))
261 // ContinuarCargaCB(artEncontrado)
262 // }
263 // }
264 // return@setOnKeyListener true
265 // }
266 }
267 }
268 }
269 return@setOnKeyListener false
270 }
271 return v
272 }
273
274 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
275 super.onViewCreated(view, savedInstanceState)
276 navController = Navigation.findNavController(view)
277 etCodigoBarras.requestFocus()
278 // val modalDialog = NoEncontradoSimple()
279 // modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
280
281 btnBorrarInv.setOnClickListener {
282 AlertDialog.Builder(requireContext()).setTitle("Eliminaciรณn de Inventarios").setMessage("ยฟConfirma que desea eliminar el inventario?")
283 .setPositiveButton(R.string.btnOk, DialogInterface.OnClickListener { dialog, which ->
284 BorrarInvActual()
285 Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show()
286 navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
287 InventarioNuevo = 0
288
289 }).setNegativeButton(R.string.btnCancelar, DialogInterface.OnClickListener { dialog, which ->
290 //botรณn cancel pulsado
291 }).show()
292 }
293
294 btnExportarInv.setOnClickListener {
295 AlertDialog.Builder(requireContext()).setTitle(R.string.sTituloExportar).setMessage(R.string.sMensajeExportar)
296 .setPositiveButton(R.string.btnOk, DialogInterface.OnClickListener { dialog, which ->
297 BorrarInvActual()
298 Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show()
299 navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
300 InventarioNuevo = 0
301
302 }).setNegativeButton(R.string.btnCancelar, DialogInterface.OnClickListener { dialog, which ->
303 //botรณn cancel pulsado
304 }).show()
305
306 // MaterialDialog(requireContext()).show {
307 // title(R.string.sTituloExportar)
308 // message(R.string.sMensajeExportar)
309 // positiveButton(R.string.btnOk) {
310 // BorrarInvActual()
311 // Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show()
312 // navController.navigate(R.id.action_inventarioFragment_to_mainFragment2)
313 // InventarioNuevo = 0
314 // dismiss()
315 // }
316 // negativeButton {
317 // dismiss()
318 // }
319 // }.cancelOnTouchOutside(false).cornerRadius(10F)
320 }
321 ivCamara.setOnClickListener {
322 if (!bFirst) {
323 iEstado = 1
324 bFirst = true
325 }
326
327 when (iEstado) {
328 0 -> {
329 ivCamara.setImageResource(R.drawable.codbar)
330 etCodigoBarras.hint = "Busqueda por C. Barras"
331 swSumaUno.visibility = View.VISIBLE
332 iBusquedaPor = 0
333 iEstado = 1
334 }
335 1 -> {
336 ivCamara.setImageResource(R.drawable.desc)
337 etCodigoBarras.hint = "Busqueda por Descripciรณn"
338 swSumaUno.visibility = View.GONE
339 iBusquedaPor = 1
340 iEstado = 2
341 }
342 2 -> {
343 ivCamara.setImageResource(R.drawable.cod_origen)
344 etCodigoBarras.hint = "Busqueda por C. Origen"
345 swSumaUno.visibility = View.GONE
346 iBusquedaPor = 2
347 iEstado = 0
348 }
349 }
350 }
351 }
352
353 private fun BorrarInvActual() {
354 lifecycleScope.launch {
355 withContext(Dispatchers.IO) {
356 AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.deleteinvHead(InventarioNuevo)
357 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.deleteInvBody(InventarioNuevo)
358 }
359 }
360 }
361
362 private fun CargarDeBdInventario(ultimoInv: Int) {
363 GlobalScope.launch(Dispatchers.Main) {
364 val invbody = cargarInventario(ultimoInv)
365 for ((i, item) in invbody!!.withIndex()) {
366 val art = Articles(invbody[i].sector,
367 invbody[i].codigo,
368 invbody[i].descripcion,
369 invbody[i].codBar,
370 invbody[i].codOrigen,
371 invbody[i].precio,
372 invbody[i].costo,
373 "",
374 "",
375 "",
376 invbody[i].balanza,
377 invbody[i].depSn,
378 invbody[i].costo)
379 cargarRecicler(art, invbody[i].cantTomada!!.toFloat())
380 }
381 }
382
383 }
384
385 @SuppressLint("RestrictedApi")
386 private fun ContinuarCargaDesc(artAcargar: ArrayList<Articles>) {
387 //TODO DESPUES DE INGRESAR LA DESCRIPCION Y DE BUSCAR LOS CAINCIDENCIAS EN LA BASE SE VA A MOSTRAR LAS MISMAS
388 //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV
389
390 if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD
391 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
392 // fCant = 0F
393 // fCant += 1F
394 // // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
395 // val acargarPorDesc = Articles(artAcargar[0].sector,
396 // artAcargar[0].codigo,
397 // artAcargar[0].descripcion,
398 // artAcargar[0].codBar,
399 // artAcargar[0].codOrigen,
400 // artAcargar[0].precio,
401 // artAcargar[0].costo,
402 // "",
403 // "",
404 // "",
405 // artAcargar[0].balanza,
406 // artAcargar[0].depSn,
407 // "")
408 // // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
409 // cargarArtEnBd(acargarPorDesc, fCant)
410 // cargarRecicler(acargarPorDesc, fCant)
411 // } else {
412 var bundle = Bundle()
413 bundle = bundleOf("ArrayDesc" to artAcargar)
414 bundle.putInt("numeroInv", InventarioNuevo)
415 navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle)
416 //navController.backStack.removeLast()
417 // }
418 // } else {//SI NO ESTA +1
419 // if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV
420 // fCant = listArticulos[0].cantTomada
421 // MaterialDialog(requireContext()).show {
422 // title(R.string.sTituloNueva)
423 // message(R.string.sCantidadNueva)
424 // input { materialDialog, charSequence ->
425 // fCant = 0F
426 // fCant = charSequence.toString().toFloat()
427 // }
428 // positiveButton(R.string.btnOk) {
429 // listArticulos[0].cantTomada = fCant
430 // viewAdapter.notifyDataSetChanged()
431 // dismiss()
432 // }
433 // }.cancelOnTouchOutside(false).cornerRadius(10F)
434 // // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV
435 // val acargarPorDesc = Articles(artAcargar[0].sector,
436 // artAcargar[0].codigo,
437 // artAcargar[0].descripcion,
438 // artAcargar[0].codBar,
439 // artAcargar[0].cod_origen,
440 // artAcargar[0].precio,
441 // artAcargar[0].costo,
442 // artAcargar[0].balanza,
443 // artAcargar[0].depSn,
444 // "")
445 // // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD
446 // cargarArtEnBd(acargarPorDesc, fCant)
447 // cargarRecicler(acargarPorDesc, fCant)
448 // } else {
449 // var bundle = Bundle()
450 // bundle = bundleOf("ArrayDesc" to artAcargar)
451 // bundle.putInt("numeroInv", InventarioNuevo)
452 // navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle)
453 // }
454 // }
455 } else {//TODO si no lo encuentra en la BD
456 val modalDialog = DialogNoEncontrado()
457 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
458 }
459 etCodigoBarras.focusable = View.FOCUSABLE
460 etCodigoBarras.setText("")
461 etCodigoBarras.selectAll()
462 }
463
464 private fun ContinuarCargaCB(artAcargar: Articles?) {
465
466 if (artAcargar != null) {// TODO: Si lo encuentra en la BD
467 if (swSumaUno!!.isChecked) {//TODO: SI ESTA +1, PONE CANTIDAD 1
468 fCant = 0F
469 fCant += 1F
470 cargarArtEnBd(artAcargar, String.format("%.3f", fCant))
471 cargarRecicler(artAcargar, fCant)
472 } else {//SI NO ESTA +1 PREGUNTA CANTIDAD
473
474 DialogingresarCantidad(requireContext(), artAcargar)
475 }
476 } else {// TODO si no lo encuentra en la BD
477 val modalDialog = DialogNoEncontrado()
478 modalDialog.show(requireActivity().supportFragmentManager, "confirmDialog")
479 }
480 etCodigoBarras.focusable = View.FOCUSABLE
481 etCodigoBarras.setText("")
482 etCodigoBarras.selectAll()
483 }
484
485 fun DialogingresarCantidad(cnxt: Context, artAcargar: Articles?) {
486 val mDialogView = LayoutInflater.from(cnxt).inflate(R.layout.ingresar_cantidad, null)
487 val mBuilder = AlertDialog.Builder(cnxt).setView(mDialogView).setCancelable(false)
488 if (artAcargar!!.balanza!!.toInt() == 1 || artAcargar.balanza!!.toInt() == 3 || artAcargar.balanza!!.toInt() == 7) mDialogView.etCantidad.inputType = TYPE_CLASS_NUMBER
489 mDialogView.tvTitulo.text = artAcargar.descripcion.toString()
490 val mAlertDialog = mBuilder.show()
491 mDialogView.btnAceptar.setOnClickListener {
492 if (mDialogView.etCantidad.text.isNullOrEmpty()) {
493 mDialogView.etCantidad.error = "No vacio"
494 mDialogView.etCantidad.requestFocus()
495 mDialogView.etCantidad.hint = "Ingrese un valor"
496 } else if (!mDialogView.etCantidad.text.isNullOrEmpty()) {
497 mAlertDialog.dismiss()
498 cargarArtEnBd(artAcargar, String.format("%.2f", mDialogView.etCantidad.text.toString().toFloat()))
499 cargarRecicler(artAcargar, mDialogView.etCantidad.text.toString().toFloat())
500 }
501 }
502 }
503
504 fun dialogoSumaResta(context: Context, indiceDelArtEncontrado: Int, univta: String, cancelable: Boolean) {
505 val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
506 val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[indiceDelArtEncontrado].descripcion} se encuentra cargado.").setCancelable(cancelable)
507 // TODO: SI PERMITE QUE INGRESE DECIMALES
508 if (univta.contains("1") || univta.contains("3") || univta.contains("7")) mDialogView.tvNuevaCantidad.inputType = TYPE_CLASS_NUMBER
509
510 mDialogView.tvCantInicial.text = String.format("%.2f", listArticulos[indiceDelArtEncontrado].cantTomada)
511 val mAlertDialog = mBuilder.show()
512 mDialogView.rbSumar.setOnClickListener {
513 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
514 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat())
515 mDialogView.tvNuevaCantidad.isEnabled = false
516 }
517 }
518 mDialogView.rbRestar.setOnClickListener {
519 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
520 if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
521 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat())
522 mDialogView.tvNuevaCantidad.isEnabled = false
523 } else {
524 mDialogView.tvResultado.text = ""
525 mDialogView.tvResultado.error = "Operaciรณn No Valida"
526 mDialogView.tvResultado.requestFocus()
527 mDialogView.tvResultado.hint = "Error"
528 }
529 }
530 }
531 mDialogView.rbMdodificar.setOnClickListener {
532 if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
533 mDialogView.tvResultado.text = String.format("%.2f", mDialogView.tvNuevaCantidad.text.toString().toFloat())
534 mDialogView.tvNuevaCantidad.isEnabled = false
535 }
536 }
537 mDialogView.btnAceptar.setOnClickListener {
538 if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || !mDialogView.tvNuevaCantidad.text.isBlank()) {
539 if (mDialogView.tvResultado.text.isNotEmpty() || !mDialogView.tvResultado.text.isBlank()) {
540 mAlertDialog.dismiss()
541 listArticulos[indiceDelArtEncontrado].cantTomada = String.format("%.2f", mDialogView.tvResultado.text.toString().toFloat()).toFloat()
542 updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(),
543 String.format("%.2f", mDialogView.tvResultado.text.toString().toFloat()).toFloat())
544
545 viewAdapter.notifyDataSetChanged()
546 } else if (mDialogView.tvNuevaCantidad.text.isNotEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
547 mDialogView.tvResultado.error = "Operaciรณn Requerida"
548 mDialogView.tvResultado.requestFocus()
549 mDialogView.tvResultado.hint = "Seleccione Operaciรณn"
550 }
551 } else if (mDialogView.tvNuevaCantidad.text.isEmpty() || mDialogView.tvNuevaCantidad.text.isBlank()) {
552 mDialogView.tvNuevaCantidad.error = "Completar"
553 mDialogView.tvNuevaCantidad.requestFocus()
554 mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
555 }
556 }
557 mDialogView.dialogCancelBtn.setOnClickListener {
558 mAlertDialog.dismiss()
559 }
560 }
561
562 suspend fun buscarCBEnBD(CodigoBarras: String): Articles? {
563 //TODO BUSQUEDA POR CODIGO DE BARRAS
564 var busqueda: Articles? = null
565 return GlobalScope.async(Dispatchers.IO) {
566 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, SerchArea())
567 return@async busqueda
568 }.await()
569 }
570
571 suspend fun buscarDescEnBD(descripcion: String): List<Articles>? {
572 //TODO BUSQUEDA POR DESCRIPCION
573 var busqueda: List<Articles>? = null
574 return GlobalScope.async(Dispatchers.IO) {
575 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, SerchArea())
576 return@async busqueda
577 }.await()
578 }
579
580 suspend fun borrarArticulo(sector: String, codigo: String, inventario: String): Int? {
581 //TODO BUSQUEDA POR DESCRIPCION
582 var result: Int
583 return GlobalScope.async(Dispatchers.IO) {
584 result = AppDb.getAppDb(requireContext())!!.InvBodyDAO()!!.deleteItemFromInvBody(sector, codigo, inventario)
585 return@async result
586 }.await()
587 }
588
589 private suspend fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int {
590
591 return GlobalScope.async(Dispatchers.IO) {
592 var indice = 0
593 var bEncontrado = false
594 if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS
595 // TODO CAMBIO DE CB A CODIGO DEBO
596 val any = cambioCBporCodigoDebo(codigoBarras)
597 if (any != null) {
598 for (item in listArticulos) {
599 if (item.sector!!.toInt() == any.sector!!.toInt() && item.codigo!!.toInt() == any.codigo!!.toInt()) {
600 bEncontrado = true
601 break
602 }
603 indice += 1
604 }
605 }
606
607 } else if (sTipoBusqueda == 1) {//TODO BUSQUEDA POR DESCRIPCION
608 for (item in listArticulos) {
609 if (item.descripcion!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) {
610 bEncontrado = true
611 break
612 }
613 indice += 1
614 }
615 } else if (sTipoBusqueda == 2) {//TODO BUSQUEDA POR CODIGO DE ORIGEN
616 for (item in listArticulos) {
617 if (item.codigoOrigen!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) {
618 bEncontrado = true
619 break
620 }
621 indice += 1
622 }
623 }
624 return@async if (bEncontrado) indice else -1
625 }.await()
626 }
627
628 suspend fun cambioCBporCodigoDebo(codigoBarras: String): Articles? {
629 //TODO BUSQUEDA POR DESCRIPCION
630 var busqueda: Articles? = null
631 return GlobalScope.async(Dispatchers.IO) {
632 busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(codigoBarras, SerchArea())
633 return@async busqueda
634 }.await()
635 }
636
637 private fun cargarArtEnBd(articulos: Articles, cant: String) {
638 val body = InvBody(InventarioNuevo,// TODO PREPARO PARA MANDAR A CARGAR EN LA BD
639 articulos.sector,
640 articulos.codigo,
641 articulos.descripcion,
642 cant,
643 articulos.codBar,
644 articulos.codOrigen,
645 articulos.precio,
646 articulos.precio,
647 articulos.balanza,
648 articulos.depSn,
649 ObtenerFechaActual(),
650 ObtenerFechaActual())
651 InsertarArtEnDB(body)// TODO MANDO A CARGAR A LA BASE DE DATOS
652 }
653
654 fun cargarRecicler(articulos: Articles, cant: Float) {
655 //TODO CARGO EN LE RV
656 val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar, articulos.codOrigen, articulos.balanza.toString(), articulos.de.toString())
657 listArticulos.add(item)
658
659 viewAdapter = ProductosListAdapter(requireContext(), listArticulos, this)
660 viewManager = LinearLayoutManager(requireContext())
661 deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!!
662 rcInventarios.apply {
663 adapter = viewAdapter
664 layoutManager = viewManager
665 }
666 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
667 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
668 return false
669 }
670
671 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
672
673 GlobalScope.launch(Dispatchers.Main) {
674 borrarArticulo(listArticulos[viewHolder.adapterPosition].sector.toString(), listArticulos[viewHolder.adapterPosition].codigo.toString(), InventarioNuevo.toString())
675 (viewAdapter as ProductosListAdapter).removeItem(viewHolder)
676 viewAdapter.notifyDataSetChanged()
677 }
678 }
679
680 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
681 val itemView = viewHolder.itemView
682 val iconMargin = (itemView.height - deleteIcon.intrinsicHeight) / 2
683 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
684
685 if (dX > 0) {
686
687 if (dX < c.width / 2) c.drawColor(Color.GREEN)
688 else c.drawColor(Color.RED)
689 deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom - iconMargin)
690 } else {
691 }
692
693 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
694 deleteIcon.draw(c)
695 }
696 }
697
698 val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback)
699 itemTouchHelper.attachToRecyclerView(rcInventarios)
700 }
701
702 private fun ProdNoCont(): Int? {
703 var mostrarStock = 0
704 if (sharedPreferences.contains("cbMostrarStock")) if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") mostrarStock = 1
705 return mostrarStock
706 }
707
708 private fun AjusteProductos(): Int? {
709 var prodInclu = 0
710 if (sharedPreferences.contains("rbProInclu")) if (sharedPreferences.getString("rbProInclu", "").toString() == "1") prodInclu = 1
711
712 if (sharedPreferences.contains("rbProNoInclu")) if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") prodInclu = 0
713 return prodInclu
714 }
715
716 private fun SerchArea(): Int {
717 if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0
718 if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1
719 return iArea
720 }
721
722 fun ObtenerFechaActual(): String? {
723 //TODO OBTENGO FECHA Y HORA ACTUAL PARA LA CABECERA DEL INVENTARIO Y PARA CADA ITEM QUE SE INSERTA EN LA BD
724 val current = LocalDateTime.now()
725 val formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm:ss")
726 val dFechaHora = current.format(formatter)
727 return dFechaHora.toString()
728 }
729
730 fun InsertarArtEnDB(cuarpoInventario: InvBody) {
731 lifecycleScope.launch {
732 withContext(Dispatchers.IO) {
733 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario)
734 }
735 }
736 }
737
738 fun updateCantidad(sector: String, codigo: String, cantidad: Float) {
739 lifecycleScope.launch {
740 withContext(Dispatchers.IO) {
741 AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo)
742 }
743 }
744 }
745
746 suspend fun cargarInventario(inventario: Int): List<InvBody>? {
747 return GlobalScope.async(Dispatchers.IO) {
748 return@async AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.fetchAllInvBody(inventario)
749 }.await()
750 }
751
752 override fun onImageDotsClick(sector: String?, codigo: String?) {
753 val bundle = Bundle()
754 bundle.putString("sector", sector)
755 bundle.putString("codigo", codigo)
756 bundle.putInt("numeroInv", InventarioNuevo)
757 navController.navigate(R.id.action_inventarioFragment_to_detalleArtFragment, bundle)
758 }
759
760 override fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String) {
761 dialogoSumaResta(requireContext(), position.toInt(), listArticulos[position.toInt()].univta, true)
762
763 // val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null)
764 // val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("${listArticulos[position.toInt()].descripcion}")
765 //// .setCancelable(false)
766 // mDialogView.tvCantInicial.text = cantidad
767 // val mAlertDialog = mBuilder.show()
768 // mDialogView.rbSumar.setOnClickListener {
769 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
770 // mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() + mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
771 // mDialogView.tvNuevaCantidad.isEnabled=false
772 // }
773 // }
774 // mDialogView.rbRestar.setOnClickListener {
775 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
776 // if (mDialogView.tvCantInicial.text.toString().toFloat() >= mDialogView.tvNuevaCantidad.text.toString().toFloat()) {
777 // mDialogView.tvgenerico4.text = (mDialogView.tvCantInicial.text.toString().toFloat() - mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
778 // mDialogView.tvNuevaCantidad.isEnabled=false
779 // }
780 // }
781 // }
782 // mDialogView.rbMdodificar.setOnClickListener {
783 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
784 // mDialogView.tvgenerico4.text = (mDialogView.tvNuevaCantidad.text.toString().toFloat()).toString()
785 // mDialogView.tvNuevaCantidad.isEnabled=false
786 // }
787 // }
788 // mDialogView.btnAceptar.setOnClickListener {
789 // if (!mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
790 // mAlertDialog.dismiss()
791 // val name = mDialogView.tvgenerico4.text.toString().toFloat()
792 // fCant = 0F
793 // fCant = name
794 // listArticulos[position.toInt()].cantTomada = fCant
795 // updateCantidad(listArticulos[position.toInt()].sector.toString(), listArticulos[position.toInt()].codigo.toString(), fCant)
796 // viewAdapter.notifyDataSetChanged()
797 // } else if (mDialogView.tvNuevaCantidad.text.isNullOrEmpty()) {
798 // mDialogView.tvNuevaCantidad.error = "No vacio"
799 // mDialogView.tvNuevaCantidad.requestFocus()
800 // mDialogView.tvNuevaCantidad.hint = "Ingrese un valor"
801 // }
802 // }
803 // mDialogView.dialogCancelBtn.setOnClickListener {
804 // mAlertDialog.dismiss()
805 // }
806 }
807 }
808
809
810
811
812
813
814
815
816
817
818
819
820 1 package com.focasoftware.deboinventariov20.ui.inventario
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt
1 package com.focasoftware.deboinventariov20.ui.inventario File was deleted
2
3 import android.widget.ImageView
4
5 data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?, val codigoOrigen: String?,val univta: String,val dev:String) {
6
7 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt
1 package com.focasoftware.deboinventariov20.ui.inventario File was deleted
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.R
9 import com.focasoftware.deboinventariov20.ui.main.ItemInventario
10 import com.focasoftware.deboinventariov20.ui.util.Base.BaseViewHolder
11 import com.google.android.material.snackbar.Snackbar
12 import kotlinx.android.synthetic.main.item.view.*
13
14
15 class ProductosListAdapter(private val context: Context,private val productos: ArrayList<ItemsRecycler>, private val itemImageClickListener: OnImageDotsClickListener) :
16 RecyclerView.Adapter<BaseViewHolder<*>>() {
17
18 private var removePosition: Int = 0
19 private var removedItem: ItemsRecycler? = null
20
21 interface OnImageDotsClickListener {
22 fun onImageDotsClick(sector: String?,codigo: String?)
23 fun onImagePenClick(sector: String?, codigo: String?, cantidad: String?, position: String)
24 }
25
26 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item, parent, false))
27
28 override fun getItemCount() = productos.size
29
30 override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
31 when (holder) {
32 is ItemsViewHolder -> { holder.bind(productos[position], position) }
33
34 }
35 }
36 inner class ItemsViewHolder (itemView: View) : BaseViewHolder<ItemsRecycler>(itemView) {
37 override fun bind(item: ItemsRecycler, position: Int) {
38 itemView.ivDots.setOnClickListener {itemImageClickListener.onImageDotsClick(item.sector,item.codigo) }
39 itemView.ivPen.setOnClickListener {itemImageClickListener.onImagePenClick(item.sector,item.codigo,item.cantTomada.toString(),adapterPosition.toString()) }
40
41 itemView.tvSector.text=item.sector
42 itemView.tvCodigo.text=item.codigo
43 itemView.tvDescripcion.text=item.descripcion
44 itemView.tvCantidad.text=item.cantTomada.toString()
45 itemView.tvCodigoBarras.text=item.sector
46 itemView.tvCodigoOrigen.text=item.sector
47 itemView.ivPen.setImageResource(R.drawable.pen)
48 itemView.ivDots.setImageResource(R.drawable.more)
49 }
50 }
51
52 fun removeItem(viewHolder: RecyclerView.ViewHolder) {
53 removePosition = viewHolder.adapterPosition
54 removedItem = productos[viewHolder.adapterPosition]
55
56 productos.removeAt(viewHolder.adapterPosition)
57 notifyItemRemoved(viewHolder.adapterPosition)
58 }
59
60
61 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt
1 package com.focasoftware.deboinventariov20.ui.main File was deleted
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.Model.InvHead
9 import com.focasoftware.deboinventariov20.R
10 import com.focasoftware.deboinventariov20.ui.util.Base.BaseViewHolder
11 import kotlinx.android.synthetic.main.item_principal.view.*
12
13 class InventarioListAdapter(private val context: Context, private val inv: List<InvHead>, private val itemClickListener: OnInventarioClickListener) :
14 RecyclerView.Adapter<BaseViewHolder<*>>() {
15
16 interface OnInventarioClickListener {
17 fun onItemClick(inventario: String?)
18 }
19
20 override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(context).inflate(R.layout.item_principal, parent, false))
21
22 override fun getItemCount() = inv.size
23
24
25 inner class ItemsViewHolder(itemView: View) : BaseViewHolder<InvHead>(itemView) {
26 override fun bind(item: InvHead, position: Int) {
27 itemView.setOnClickListener {itemClickListener.onItemClick(item.invNum.toString())}
28 itemView.tvPrincipalinventario.text = if ( item.invNum < 10) "0${ item.invNum.toString()}" else item.invNum.toString()
29
30 itemView.tvDescription.text=item.descripcion.toString()
31 itemView.tvFecha.text=item.fechaInicio.toString()
32 itemView.tvCantContada.text=item.prodContados.toString()
33 }
34 }
35
36 override fun onBindViewHolder(holder: BaseViewHolder<*>, position: Int) {
37 when (holder) {
38 is ItemsViewHolder -> holder.bind(inv[position], position)
39 else -> IllegalArgumentException("No se pudo pasar el ViewHolder")
40 }
41 }
42
43
44 }
45
46
47
48 1 package com.focasoftware.deboinventariov20.ui.main
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/ItemPrincipal.kt
1 package com.focasoftware.deboinventariov20.ui.main File was deleted
2
3 data class ItemInventario(val inventario: String?, val descripcion: String?)
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt
1 package com.focasoftware.deboinventariov20.ui.main File was deleted
2
3 import android.content.Context
4 import android.content.SharedPreferences
5 import android.os.Bundle
6 import android.view.LayoutInflater
7 import android.view.View
8 import android.view.ViewGroup
9 import android.widget.*
10 import androidx.fragment.app.Fragment
11 import androidx.navigation.NavController
12 import androidx.navigation.Navigation
13 import androidx.recyclerview.widget.LinearLayoutManager
14 import androidx.recyclerview.widget.RecyclerView
15 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
16 import com.focasoftware.deboinventariov20.Model.InvHead
17 import com.focasoftware.deboinventariov20.R
18 import com.focasoftware.deboinventariov20.ui.inventario.ItemsRecycler
19 import kotlinx.coroutines.Dispatchers
20 import kotlinx.coroutines.GlobalScope
21 import kotlinx.coroutines.async
22 import kotlinx.coroutines.launch
23 import java.util.*
24
25 class MainFragment : Fragment(), InventarioListAdapter.OnInventarioClickListener {
26 private lateinit var inventarios: List<InvHead>
27 private lateinit var ordenado: List<InvHead>
28 private lateinit var rcInventario: RecyclerView
29 private lateinit var viewAdapter: RecyclerView.Adapter<*>
30 private lateinit var viewManager: RecyclerView.LayoutManager
31 // private var listIvn2 = List<InvHead>()
32 private var listIvn2 = ArrayList<InvHead>()
33 private lateinit var navController: NavController
34 private lateinit var sharedPreferences: SharedPreferences
35 private var cantidadInventarios: Int = 0
36
37 override fun onCreate(savedInstanceState: Bundle?) {
38 super.onCreate(savedInstanceState)
39 sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE)
40 }
41
42 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
43 var bAbiertoCerrado = false
44 val v = inflater.inflate(R.layout.fragment_main, container, false)
45 val tvInvDinamicos = v.findViewById<TextView>(R.id.tvInvDinamicos)
46 val txtDeposito = v.findViewById<TextView>(R.id.txtDeposito)
47 val ivSort19= v.findViewById<ImageButton>(R.id.ivSort19)
48 val ivSort91= v.findViewById<ImageButton>(R.id.ivSort91)
49 val cbVentas= v.findViewById<CheckBox>(R.id.cbVentas)
50 val cbDeposito= v.findViewById<CheckBox>(R.id.cbDeposito)
51 val tvTipo = v.findViewById<TextView>(R.id.tvTipo)
52 rcInventario = v.findViewById(R.id.rcInventario)
53
54 GlobalScope.launch(Dispatchers.Main) {
55 inventarios = buscarEnBDInvHead()
56 for ((i, item) in inventarios.withIndex()) {
57 val inv = InvHead(inventarios[i].invNum,
58 inventarios[i].descripcion,
59 inventarios[i].estado,
60 inventarios[i].fechaInicio,
61 inventarios[i].fechaFinal,
62 inventarios[i].prodContados,
63 inventarios[i].lugar,
64 inventarios[i].stDesc,
65 inventarios[i].proNoCont)
66 cargarRecicler(inv)
67 cantidadInventarios = i + 1
68 }
69 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
70 tvInvDinamicos.setOnClickListener {
71 if (!bAbiertoCerrado) {
72 bAbiertoCerrado = true
73 txtDeposito.visibility = View.GONE
74 rcInventario.visibility = View.VISIBLE
75 ivSort91.visibility = View.INVISIBLE
76 ivSort19.visibility = View.VISIBLE
77 cbVentas.visibility = View.VISIBLE
78 cbDeposito.visibility = View.VISIBLE
79 tvTipo.visibility = View.VISIBLE
80 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) -"
81 } else {
82 bAbiertoCerrado = false
83 rcInventario.visibility = View.GONE
84 ivSort91.visibility = View.GONE
85 ivSort19.visibility = View.GONE
86 txtDeposito.visibility = View.VISIBLE
87 cbVentas.visibility = View.GONE
88 cbDeposito.visibility = View.GONE
89 tvTipo.visibility = View.GONE
90 tvInvDinamicos.text = "Inventarios Dinamicos (${cantidadInventarios.toString()}) +"
91 }
92 }
93 ivSort19.setOnClickListener {
94 ordenado= inventarios.sortedByDescending {
95 it.invNum
96 }
97 viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
98 viewManager = LinearLayoutManager(requireContext())
99
100 rcInventario.apply {
101 adapter = viewAdapter
102 layoutManager = viewManager
103 }
104 viewAdapter.notifyDataSetChanged()
105 ivSort19.visibility=View.INVISIBLE
106 ivSort91.visibility=View.VISIBLE
107 }
108 ivSort91.setOnClickListener {
109 ordenado= inventarios.sortedBy {
110 it.invNum
111 }
112 viewAdapter = InventarioListAdapter(requireContext(), ordenado, this@MainFragment)
113 viewManager = LinearLayoutManager(requireContext())
114
115 rcInventario.apply {
116 adapter = viewAdapter
117 layoutManager = viewManager
118 }
119 viewAdapter.notifyDataSetChanged()
120 ivSort91.visibility=View.INVISIBLE
121 ivSort19.visibility=View.VISIBLE
122 }
123 }
124 return v
125 }
126
127 suspend fun buscarEnBDInvHead(): List<InvHead> {
128 //TODO BUSQUEDA POR DESCRIPCION
129 var busqueda: List<InvHead>
130 return GlobalScope.async(Dispatchers.IO) {
131 busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead()
132 return@async busqueda
133 }.await()
134 }
135
136 fun cargarRecicler(inv: InvHead) {
137 //TODO CARGO EN LE RV
138
139 // val number = if (inv.invNum.toLong() < 10) "0${inv.invNum.toLong()}" else inv.invNum.toString()
140 // val item = ItemInventario("Nยฐ $number ${inv.descripcion}. Fecha: ${inv.fechaFinal}")
141
142 // listIvn.add(item)
143 listIvn2.add(inv)
144 viewAdapter = InventarioListAdapter(requireContext(), listIvn2, this)
145 viewManager = LinearLayoutManager(requireContext())
146
147 rcInventario.apply {
148 adapter = viewAdapter
149 layoutManager = viewManager
150 }
151 }
152
153 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
154 super.onViewCreated(view, savedInstanceState)
155 navController = Navigation.findNavController(view)
156 listIvn2.clear()
157 }
158
159 override fun onItemClick(inventario: String?) {
160
161 val editor = sharedPreferences.edit()
162 // var invSel: String = inventario.toString()
163 // invSel = invSel.substring(3, 5)
164 editor?.putString("Inventario", inventario)
165 editor?.apply()
166 editor.commit()
167 navController.navigate(R.id.action_mainFragment2_to_inventarioFragment)
168 }
169
170
171 }
172
173 1 package com.focasoftware.deboinventariov20.ui.main
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/AdapterServidores.kt
1 package com.focasoftware.deboinventariov20.ui.servidores File was deleted
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import androidx.recyclerview.widget.RecyclerView
8 import com.focasoftware.deboinventariov20.R
9 import com.focasoftware.deboinventariov20.ui.inventario.ItemsRecycler
10 import com.google.android.material.snackbar.Snackbar
11 import kotlinx.android.synthetic.main.item_servidores.view.*
12
13 class AdapterServidores(private val servidor: ArrayList<ItemsServidores>, private var contexto: Context) :
14 RecyclerView.Adapter<AdapterServidores.ViewHolder>() {
15 private var removePosition: Int = 0
16 private var removedItem: ItemsServidores? = null
17
18 class ViewHolder(var vista: View) : RecyclerView.ViewHolder(vista) {
19 fun bind(itemsServidores: ItemsServidores) {
20 vista.tvDescServidor.text = itemsServidores.descripcion
21 vista.tvDireccionServidor.text = itemsServidores.direccion
22
23 }
24 }
25
26 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
27 return ViewHolder(
28 LayoutInflater.from(parent.context).inflate(R.layout.item_servidores, parent, false)
29 )
30 }
31
32 override fun getItemCount(): Int {
33 return servidor.size
34 }
35
36 override fun onBindViewHolder(holder: ViewHolder, position: Int) {
37 holder.bind(servidor[position])
38 }
39 fun removeItem(viewHolder: RecyclerView.ViewHolder) {
40 removePosition = viewHolder.adapterPosition
41 removedItem = servidor[viewHolder.adapterPosition]
42
43 servidor.removeAt(viewHolder.adapterPosition)
44 notifyItemRemoved(viewHolder.adapterPosition)
45 }
46 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt
1 package com.focasoftware.deboinventariov20.ui.servidores File was deleted
2
3 data class ItemsServidores(val descripcion: String?, var direccion: String?, var predeterminado: String?)
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt
1 package com.focasoftware.deboinventariov20.ui.servidores File was deleted
2
3 import android.graphics.Canvas
4 import android.graphics.Color
5 import android.graphics.drawable.Drawable
6 import android.os.Bundle
7 import android.view.LayoutInflater
8 import android.view.View
9 import android.view.ViewGroup
10 import android.widget.Toast
11 import androidx.core.content.ContextCompat
12 import androidx.fragment.app.Fragment
13 import androidx.lifecycle.lifecycleScope
14 import androidx.recyclerview.widget.ItemTouchHelper
15 import androidx.recyclerview.widget.LinearLayoutManager
16 import androidx.recyclerview.widget.RecyclerView
17 import com.focasoftware.deboinventariov20.DB.DataBase.AppDb
18 import com.focasoftware.deboinventariov20.Model.ServeInv
19 import com.focasoftware.deboinventariov20.R
20 import kotlinx.android.synthetic.main.fragment_servidores.*
21 import kotlinx.coroutines.*
22
23 class ServidoresFragment : Fragment() {
24
25 private lateinit var rvServidores: RecyclerView
26 private lateinit var viewAdapter: RecyclerView.Adapter<*>
27 private lateinit var viewManager: RecyclerView.LayoutManager
28 private var listServ = ArrayList<ItemsServidores>()
29 private lateinit var servidores: List<ServeInv>
30 private lateinit var deleteIcon: Drawable
31
32 override fun onCreate(savedInstanceState: Bundle?) {
33 super.onCreate(savedInstanceState)
34 CargarRV()
35 }
36
37 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
38 super.onViewCreated(view, savedInstanceState)
39
40 btnGuardarServidores.setOnClickListener {
41 if (etNombreServidor.text.isNullOrBlank()) {
42 etNombreServidor.error = "Nombre no valido"
43 etNombreServidor.requestFocus()
44 etNombreServidor.hint = "Nombre no valido"
45 }
46 if (etDireccionServidor.text.isNullOrBlank()) {
47 etDireccionServidor.error = "Direcciรณn no valida"
48 etDireccionServidor.requestFocus()
49 etDireccionServidor.hint = "Direcciรณn no valida"
50 }
51 if (!etDireccionServidor.text.isNullOrBlank() || !etNombreServidor.text.isNullOrBlank()) {
52 // GlobalScope.launch(Dispatchers.Main) {
53 // ServerNew =AppDb.getAppDb(requireContext())?.ServeInvDao()?.findLastServer()?.plus(1) ?: 1
54 val servidor = ServeInv(etNombreServidor.text.toString(), "http://${etDireccionServidor.text}/", 0)
55 ingresarDatos(servidor)
56 cargarRecicler(servidor)
57 Toast.makeText(requireContext(), "Servidor ${etNombreServidor.text} Guardado", Toast.LENGTH_LONG).show()
58 etNombreServidor.text.clear()
59 etDireccionServidor.text.clear()
60 // }
61 }
62 }
63 }
64
65 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
66 val v = inflater.inflate(R.layout.fragment_servidores, container, false)
67 rvServidores = v.findViewById(R.id.rvServidores)
68 return v
69 }
70
71 fun ingresarDatos(servidor: ServeInv) {
72 val Job = GlobalScope.launch {
73 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.insertServer(servidor)
74 }
75 }
76
77 suspend fun buscarEnBD(): List<ServeInv> {
78 var busqueda: List<ServeInv>
79 return GlobalScope.async(Dispatchers.IO) {
80 busqueda = AppDb.getAppDb(requireContext())!!.ServeInvDao()!!.fetchAllServers()
81 return@async busqueda
82 }.await()
83 }
84
85 fun CargarRV() {
86 GlobalScope.launch(Dispatchers.Main) {
87 servidores = buscarEnBD()
88 for ((i, item) in servidores.withIndex()) {
89 val ser = ServeInv(servidores[i].descripcion, servidores[i].direccion, servidores[i].predeterminado)
90 cargarRecicler(ser)
91 }
92 }
93 }
94
95 fun cargarRecicler(ser: ServeInv) {
96 //TODO CARGO EN LE RV
97 deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!!
98 val item = ItemsServidores(ser.descripcion, ser.direccion, ser.predeterminado.toString())
99
100 listServ.add(item)
101
102 viewAdapter = AdapterServidores(listServ, requireContext())
103 viewManager = LinearLayoutManager(requireContext())
104
105 rvServidores.apply {
106 adapter = viewAdapter
107 layoutManager = viewManager
108 }
109 val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
110 override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
111 return false
112 }
113
114 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) {
115 GlobalScope.launch(Dispatchers.Main) {
116 deleteServer(listServ[viewHolder.adapterPosition].descripcion.toString(), listServ[viewHolder.adapterPosition].direccion.toString())
117
118 (viewAdapter as AdapterServidores).removeItem(viewHolder)
119 viewAdapter.notifyDataSetChanged()
120 }
121 }
122
123 override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
124 val itemView = viewHolder.itemView
125 val iconMargin = (itemView.height - deleteIcon.intrinsicHeight) / 2
126 c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat())
127
128 if (dX > 0) {
129
130 if (dX < c.width / 2) c.drawColor(Color.GREEN)
131 else c.drawColor(Color.RED)
132 deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom - iconMargin)
133 } else {
134 }
135 super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
136 deleteIcon.draw(c)
137 }
138 }
139
140 val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback)
141 itemTouchHelper.attachToRecyclerView(rvServidores)
142 }
143
144 suspend fun deleteServer(serverName: String, serverDir: String) {
145 lifecycleScope.launch {
146 withContext(Dispatchers.IO) {
147 AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.deleteServer(serverName, serverDir)
148 }
149 }
150 }
151 }
152 1 package com.focasoftware.deboinventariov20.ui.servidores
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/SpinnerAdapter.kt
1 package com.focasoftware.deboinventariov20.ui.servidores File was deleted
2
3 import android.content.Context
4 import android.view.LayoutInflater
5 import android.view.View
6 import android.view.ViewGroup
7 import android.widget.BaseAdapter
8 import android.widget.TextView
9 import com.focasoftware.deboinventariov20.Model.ServeInv
10 import com.focasoftware.deboinventariov20.R
11
12
13 class SpinnerAdapterServidor internal constructor(internal var context: Context, internal var list: List<ServeInv>) : BaseAdapter() {
14 override fun getCount(): Int {
15 return list.size
16 }
17
18 override fun getItem(i: Int): Any? {
19 return null
20 }
21
22 override fun getItemId(i: Int): Long {
23 return 0
24 }
25
26 override fun getView(i: Int, view1: View?, viewGroup: ViewGroup): View {
27 var views=view1
28 if (views == null) {
29 val inflater = LayoutInflater.from(context)
30
31 views = inflater.inflate(R.layout.item_spinner, viewGroup, false)
32 }
33
34 val tvServidorDesc = views!!.findViewById<TextView>(R.id.tvServidorDesc)
35 tvServidorDesc.text=list[i].descripcion
36 return tvServidorDesc
37
38 }
39 }
40
41 1 package com.focasoftware.deboinventariov20.ui.servidores
app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/BaseViewHolder.kt
1 package com.focasoftware.deboinventariov20.ui.util.Base File was deleted
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.os.Bundle
6 import android.view.View
7 import androidx.fragment.app.DialogFragment
8 import androidx.recyclerview.widget.RecyclerView
9
10 abstract class BaseViewHolder<T>(itemView:View):RecyclerView.ViewHolder(itemView) {
11 abstract fun bind(item:T, position:Int)
12 }
13 class NoEncontradoSimple : DialogFragment() {
14
15 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
16 return activity?.let {
17 val title = ""
18 val content = "ยกEl producto buscado NO fue encontrado!"
19 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
20 builder.setTitle(title).setMessage(content)
21 .setPositiveButton(android.R.string.ok) { _, _ ->
22 //Todo OK click
23 }
24
25 return builder.create()
26 } ?: throw IllegalStateException("Activity cannot be null")
27 }
28
29 }
30
31 class AlertDialogBorrarInv : DialogFragment() {
32
33 interface OnBorrarInvClickListener {
34 fun onPositiveClick()
35 fun onCancelClick()
36 }
37
38 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
39 return activity?.let {
40 val title = "Borrar Inventario"
41 val content = "ยฟSeguro que desea Borrar el inventario?"
42 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
43 builder.setTitle(title).setMessage(content)
44 .setPositiveButton(android.R.string.ok) { _, _ ->
45 val listener = activity as OnBorrarInvClickListener?
46 listener!!.onPositiveClick()
47 }
48 .setNegativeButton(android.R.string.cancel) { _, _ ->
49 val listener = activity as OnBorrarInvClickListener?
50 listener!!.onCancelClick()
51 }
52 return builder.create()
53 } ?: throw IllegalStateException("Activity cannot be null")
54 }
55
56 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/dialogos/DialogNoEncontrado.kt
1 package com.focasoftware.deboinventariov20.ui.util.Base.dialogos File was deleted
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.os.Bundle
6 import androidx.fragment.app.DialogFragment
7
8 class DialogNoEncontrado : DialogFragment() {
9 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
10 return activity?.let {
11 val title = "Busqueda de Productos"
12 val content = "Producto no encotrado."
13 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
14 builder.setTitle(title).setMessage(content).setPositiveButton(android.R.string.ok) { _, _ ->
15 //Todo OK click
16 }
17 return builder.create()
18 } ?: throw IllegalStateException("Activity cannot be null")
19 }
20 }
21 1 package com.focasoftware.deboinventariov20.ui.util.Base.dialogos
app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/dialogos/DialogoLogin.kt
1 package com.focasoftware.deboinventariov20.ui.util.Base.dialogos File was deleted
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.content.SharedPreferences
6 import android.os.Bundle
7 import androidx.fragment.app.DialogFragment
8 import com.focasoftware.deboinventariov20.R
9
10 class DialogoLogin() : DialogFragment() {
11 private lateinit var sharedPreferences: SharedPreferences
12
13 interface OnContinueCancelClickListener {
14 fun onPositiveClick()
15 fun onCancelClick()
16 }
17
18 fun newInstance(s: String): DialogoLogin? {
19 val dialog = DialogoLogin()
20
21 val args = Bundle()
22 args.putString("title", s)
23 dialog.arguments = args
24
25 return dialog
26 }
27
28 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
29 return activity?.let {
30 val builder = AlertDialog.Builder(it)
31
32 val inflater = requireActivity().layoutInflater;
33
34 builder.setView(inflater.inflate(R.layout.login_dialog, null)).setTitle("El producto ya fue escaneado").setPositiveButton(android.R.string.ok) { _, _ ->
35 val listener = activity as OnContinueCancelClickListener?
36 listener!!.onPositiveClick()
37 }.setNegativeButton(android.R.string.cancel) { _, _ ->
38 val listener = activity as OnContinueCancelClickListener?
39 listener!!.onCancelClick()
40 }
41 builder.create()
42 } ?: throw IllegalStateException("Activity cannot be null")
43 }
44 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/dialogos/InsertCant.kt
1 package com.focasoftware.deboinventariov20.ui.util.Base.dialogos File was deleted
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.content.SharedPreferences
6 import android.os.Bundle
7 import androidx.fragment.app.DialogFragment
8 import com.focasoftware.deboinventariov20.R
9
10 class InsertCant() : DialogFragment() {
11
12 private lateinit var sharedPreferences: SharedPreferences
13
14 interface OnContinueCancelClickListener {
15 fun onPositiveClick()
16 fun onCancelClick()
17 }
18
19 fun newInstance(s: String): InsertCant? {
20 val dialog = InsertCant()
21
22 val args = Bundle()
23 args.putString("title", s)
24 dialog.arguments = args
25
26 return dialog
27 }
28
29 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
30 return activity?.let {
31 val builder = AlertDialog.Builder(it)
32
33 val inflater = requireActivity().layoutInflater;
34
35 builder.setView(inflater.inflate(R.layout.ingresar_cantidad, null)).setTitle("").setPositiveButton(android.R.string.ok) { _, _ ->
36 val listener = activity as OnContinueCancelClickListener?
37 listener!!.onPositiveClick()
38 }.setNegativeButton(android.R.string.cancel) { _, _ ->
39 val listener = activity as OnContinueCancelClickListener?
40 listener!!.onCancelClick()
41 }
42 builder.create()
43 } ?: throw IllegalStateException("Activity cannot be null")
44 }
45 }
app/src/main/java/com/focasoftware/deboinventariov20/ui/util/Base/dialogos/SingleChoiceAlertDialog.kt
1 package com.focasoftware.deboinventariov20.ui.util.Base.dialogos File was deleted
2
3 import android.app.AlertDialog
4 import android.app.Dialog
5 import android.os.Bundle
6 import androidx.fragment.app.DialogFragment
7
8 class SingleChoiceAlertDialog : DialogFragment() {
9
10 interface OnDialogSelectorListener {
11 fun onSelectedOption(dialogId: Int)
12 }
13
14
15 var mDialogSelectorCallback: OnDialogSelectorListener? = null
16
17 fun newInstance(title: String, values: Array<String>, selected: Int = -1): SingleChoiceAlertDialog? {
18 val dialog = SingleChoiceAlertDialog()
19
20 val args = Bundle()
21 args.putString("title", title)
22 args.putStringArray("values", values)
23 args.putInt("selected", selected)
24 dialog.arguments = args
25
26 return dialog
27
28 }
29
30 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
31
32 return activity?.let {
33
34 val args = requireArguments()
35 val title = args.getString("title")
36 val values = args.getStringArray("values")
37 val selectedIndex = args.getInt("selected")
38
39 val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity())
40
41 builder.setSingleChoiceItems(values, selectedIndex) { _, which ->
42 //val item = values?.get(which)
43 mDialogSelectorCallback?.onSelectedOption(which)
44 dialog?.dismiss()
45 }
46 builder.setTitle(title)
47
48 return builder.create()
49 } ?: throw IllegalStateException("Activity cannot be null")
50 }
51
52
53 }
app/src/main/res/layout-land/fragment_configuracion.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <ScrollView 2 <ScrollView
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 tools:context=".ui.configuracion.ConfiguracionFragment" 5 tools:context=".UI.configuracion.ConfiguracionFragment"
6 xmlns:android="http://schemas.android.com/apk/res/android" 6 xmlns:android="http://schemas.android.com/apk/res/android"
7 android:layout_width="match_parent" 7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"> 8 android:layout_height="wrap_content">
9 9
10 <androidx.constraintlayout.widget.ConstraintLayout 10 <androidx.constraintlayout.widget.ConstraintLayout
11 android:layout_width="match_parent" 11 android:layout_width="match_parent"
12 android:layout_height="wrap_content"> 12 android:layout_height="wrap_content">
13 13
14 <androidx.appcompat.widget.AppCompatTextView 14 <androidx.appcompat.widget.AppCompatTextView
15 android:id="@+id/textView2" 15 android:id="@+id/textView2"
16 android:layout_width="match_parent" 16 android:layout_width="match_parent"
17 android:layout_height="wrap_content" 17 android:layout_height="wrap_content"
18 android:layout_marginTop="@dimen/MarginTopTitulos" 18 android:layout_marginTop="@dimen/MarginTopTitulos"
19 android:gravity="center" 19 android:gravity="center"
20 android:lines="1" 20 android:lines="1"
21 android:text="@string/tvTituloConf" 21 android:text="@string/tvTituloConf"
22 android:textColor="@color/colorAccent" 22 android:textColor="@color/colorAccent"
23 android:textSize="@dimen/Titulos" 23 android:textSize="@dimen/Titulos"
24 app:fontFamily="sans-serif-condensed" 24 app:fontFamily="sans-serif-condensed"
25 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor" 25 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor"
26 app:layout_constraintEnd_toEndOf="parent" 26 app:layout_constraintEnd_toEndOf="parent"
27 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintStart_toStartOf="parent"
28 app:layout_constraintTop_toTopOf="parent" /> 28 app:layout_constraintTop_toTopOf="parent" />
29 29
30 <TextView 30 <TextView
31 android:id="@+id/tvSeleccioneServidor" 31 android:id="@+id/tvSeleccioneServidor"
32 android:layout_width="0dp" 32 android:layout_width="0dp"
33 android:layout_height="wrap_content" 33 android:layout_height="wrap_content"
34 34
35 android:layout_marginStart="@dimen/MarginBotAgreSer" 35 android:layout_marginStart="@dimen/MarginBotAgreSer"
36 android:layout_marginTop="@dimen/MarginTopSubTitulos" 36 android:layout_marginTop="@dimen/MarginTopSubTitulos"
37 android:gravity="start" 37 android:gravity="start"
38 android:lines="1" 38 android:lines="1"
39 android:text="@string/tvSeleccioneServidor" 39 android:text="@string/tvSeleccioneServidor"
40 android:textColor="@android:color/black" 40 android:textColor="@android:color/black"
41 android:textSize="@dimen/SubTitulos" 41 android:textSize="@dimen/SubTitulos"
42 app:fontFamily="sans-serif-condensed" 42 app:fontFamily="sans-serif-condensed"
43 app:layout_constraintBottom_toTopOf="@+id/spServidor" 43 app:layout_constraintBottom_toTopOf="@+id/spServidor"
44 app:layout_constraintEnd_toEndOf="parent" 44 app:layout_constraintEnd_toEndOf="parent"
45 app:layout_constraintStart_toStartOf="parent" 45 app:layout_constraintStart_toStartOf="parent"
46 app:layout_constraintTop_toBottomOf="@+id/textView2" /> 46 app:layout_constraintTop_toBottomOf="@+id/textView2" />
47 47
48 <Spinner 48 <Spinner
49 android:id="@+id/spServidor" 49 android:id="@+id/spServidor"
50 android:layout_width="0dp" 50 android:layout_width="0dp"
51 android:layout_height="wrap_content" 51 android:layout_height="wrap_content"
52 android:backgroundTint="@color/LightGray" 52 android:backgroundTint="@color/LightGray"
53 android:elevation="5dp" 53 android:elevation="5dp"
54 android:fadeScrollbars="true" 54 android:fadeScrollbars="true"
55 android:foregroundTint="@android:color/holo_orange_dark" 55 android:foregroundTint="@android:color/holo_orange_dark"
56 android:soundEffectsEnabled="true" 56 android:soundEffectsEnabled="true"
57 android:spinnerMode="dialog" 57 android:spinnerMode="dialog"
58 android:splitMotionEvents="false" 58 android:splitMotionEvents="false"
59 android:textAlignment="center" 59 android:textAlignment="center"
60 android:textSize="@dimen/NormalText" 60 android:textSize="@dimen/NormalText"
61 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" 61 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor"
62 app:layout_constraintEnd_toStartOf="@+id/btnValidarServidor" 62 app:layout_constraintEnd_toStartOf="@+id/btnValidarServidor"
63 app:layout_constraintHorizontal_chainStyle="packed" 63 app:layout_constraintHorizontal_chainStyle="packed"
64 app:layout_constraintStart_toStartOf="parent" 64 app:layout_constraintStart_toStartOf="parent"
65 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" 65 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor"
66 android:entries="@array/spinnerServidor" 66 android:entries="@array/spinnerServidor"
67 android:prompt="@string/leyendaSpinner"/> 67 android:prompt="@string/leyendaSpinner"/>
68 68
69 <Button 69 <Button
70 android:id="@+id/btnValidarServidor" 70 android:id="@+id/btnValidarServidor"
71 android:layout_width="wrap_content" 71 android:layout_width="wrap_content"
72 android:layout_height="wrap_content" 72 android:layout_height="wrap_content"
73 android:textColor="@android:color/white" 73 android:textColor="@android:color/white"
74 android:padding="10dp" 74 android:padding="10dp"
75 android:background="@drawable/boton_borde_redondeado" 75 android:background="@drawable/boton_borde_redondeado"
76 android:text="@string/btnValidarServidor" 76 android:text="@string/btnValidarServidor"
77 android:textSize="@dimen/NormalText" 77 android:textSize="@dimen/NormalText"
78 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" 78 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor"
79 app:layout_constraintEnd_toEndOf="parent" 79 app:layout_constraintEnd_toEndOf="parent"
80 app:layout_constraintHorizontal_chainStyle="packed" 80 app:layout_constraintHorizontal_chainStyle="packed"
81 app:layout_constraintStart_toEndOf="@id/spServidor" 81 app:layout_constraintStart_toEndOf="@id/spServidor"
82 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" /> 82 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" />
83 83
84 <Button 84 <Button
85 android:id="@+id/btnAgregarServidor" 85 android:id="@+id/btnAgregarServidor"
86 android:layout_width="0dp" 86 android:layout_width="0dp"
87 android:layout_height="wrap_content" 87 android:layout_height="wrap_content"
88 android:layout_marginStart="@dimen/MarginBotAgreSer" 88 android:layout_marginStart="@dimen/MarginBotAgreSer"
89 android:layout_marginEnd="@dimen/MarginBotAgreSer" 89 android:layout_marginEnd="@dimen/MarginBotAgreSer"
90 android:text="@string/btnAgregarServidor" 90 android:text="@string/btnAgregarServidor"
91 android:textSize="@dimen/NormalText" 91 android:textSize="@dimen/NormalText"
92 android:textColor="@android:color/white" 92 android:textColor="@android:color/white"
93 android:padding="10dp" 93 android:padding="10dp"
94 android:background="@drawable/boton_borde_redondeado" 94 android:background="@drawable/boton_borde_redondeado"
95 app:layout_constraintBottom_toTopOf="@+id/tvUbicacionCarpetas" 95 app:layout_constraintBottom_toTopOf="@+id/tvUbicacionCarpetas"
96 app:layout_constraintEnd_toEndOf="parent" 96 app:layout_constraintEnd_toEndOf="parent"
97 app:layout_constraintStart_toStartOf="parent" 97 app:layout_constraintStart_toStartOf="parent"
98 app:layout_constraintTop_toBottomOf="@+id/btnValidarServidor" /> 98 app:layout_constraintTop_toBottomOf="@+id/btnValidarServidor" />
99 99
100 100
101 <TextView 101 <TextView
102 android:id="@+id/tvUbicacionCarpetas" 102 android:id="@+id/tvUbicacionCarpetas"
103 android:layout_width="0dp" 103 android:layout_width="0dp"
104 android:layout_height="wrap_content" 104 android:layout_height="wrap_content"
105 105
106 android:layout_marginStart="@dimen/MarginBotAgreSer" 106 android:layout_marginStart="@dimen/MarginBotAgreSer"
107 android:layout_marginTop="@dimen/MarginTopSubTitulos" 107 android:layout_marginTop="@dimen/MarginTopSubTitulos"
108 android:gravity="start" 108 android:gravity="start"
109 android:lines="1" 109 android:lines="1"
110 android:text="@string/tvUbicacionCarpetas" 110 android:text="@string/tvUbicacionCarpetas"
111 android:textColor="@android:color/black" 111 android:textColor="@android:color/black"
112 android:textSize="@dimen/SubTitulos" 112 android:textSize="@dimen/SubTitulos"
113 app:fontFamily="sans-serif-condensed" 113 app:fontFamily="sans-serif-condensed"
114 app:layout_constraintBottom_toTopOf="@+id/ibSearch" 114 app:layout_constraintBottom_toTopOf="@+id/ibSearch"
115 app:layout_constraintEnd_toEndOf="parent" 115 app:layout_constraintEnd_toEndOf="parent"
116 app:layout_constraintStart_toStartOf="parent" 116 app:layout_constraintStart_toStartOf="parent"
117 app:layout_constraintTop_toBottomOf="@+id/btnAgregarServidor" /> 117 app:layout_constraintTop_toBottomOf="@+id/btnAgregarServidor" />
118 118
119 <ImageButton 119 <ImageButton
120 android:id="@+id/ibSearch" 120 android:id="@+id/ibSearch"
121 android:layout_width="36dp" 121 android:layout_width="36dp"
122 android:layout_height="37dp" 122 android:layout_height="37dp"
123 android:layout_margin="10dp" 123 android:layout_margin="10dp"
124 android:src="@drawable/search" 124 android:src="@drawable/search"
125 android:textColor="@android:color/white" 125 android:textColor="@android:color/white"
126 android:padding="10dp" 126 android:padding="10dp"
127 android:background="@drawable/boton_borde_redondeado" 127 android:background="@drawable/boton_borde_redondeado"
128 app:layout_constraintEnd_toStartOf="@+id/etRuta" 128 app:layout_constraintEnd_toStartOf="@+id/etRuta"
129 app:layout_constraintStart_toStartOf="parent" 129 app:layout_constraintStart_toStartOf="parent"
130 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> 130 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" />
131 131
132 <EditText 132 <EditText
133 android:id="@+id/etRuta" 133 android:id="@+id/etRuta"
134 android:layout_width="0dp" 134 android:layout_width="0dp"
135 android:layout_height="wrap_content" 135 android:layout_height="wrap_content"
136 android:layout_marginTop="10dp" 136 android:layout_marginTop="10dp"
137 android:layout_marginEnd="10dp" 137 android:layout_marginEnd="10dp"
138 android:clickable="true" 138 android:clickable="true"
139 android:ems="10" 139 android:ems="10"
140 android:focusable="true" 140 android:focusable="true"
141 android:inputType="textPersonName" 141 android:inputType="textPersonName"
142 android:lines="1" 142 android:lines="1"
143 android:text="" 143 android:text=""
144 android:textSize="@dimen/NormalText" 144 android:textSize="@dimen/NormalText"
145 app:layout_constraintEnd_toEndOf="parent" 145 app:layout_constraintEnd_toEndOf="parent"
146 app:layout_constraintStart_toEndOf="@id/ibSearch" 146 app:layout_constraintStart_toEndOf="@id/ibSearch"
147 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> 147 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" />
148 148
149 <TextView 149 <TextView
150 android:id="@+id/tvActuFecha" 150 android:id="@+id/tvActuFecha"
151 android:layout_width="0dp" 151 android:layout_width="0dp"
152 android:layout_height="wrap_content" 152 android:layout_height="wrap_content"
153 android:layout_marginStart="@dimen/MarginBotAgreSer" 153 android:layout_marginStart="@dimen/MarginBotAgreSer"
154 android:layout_marginTop="@dimen/MarginTopSubTitulos" 154 android:layout_marginTop="@dimen/MarginTopSubTitulos"
155 android:gravity="start" 155 android:gravity="start"
156 android:lines="1" 156 android:lines="1"
157 android:text="@string/tvTituloArea" 157 android:text="@string/tvTituloArea"
158 android:textColor="@android:color/black" 158 android:textColor="@android:color/black"
159 android:textSize="@dimen/SubTitulos" 159 android:textSize="@dimen/SubTitulos"
160 app:fontFamily="sans-serif-condensed" 160 app:fontFamily="sans-serif-condensed"
161 app:layout_constraintEnd_toEndOf="parent" 161 app:layout_constraintEnd_toEndOf="parent"
162 app:layout_constraintStart_toStartOf="parent" 162 app:layout_constraintStart_toStartOf="parent"
163 app:layout_constraintTop_toBottomOf="@+id/etRuta" /> 163 app:layout_constraintTop_toBottomOf="@+id/etRuta" />
164 164
165 <RadioGroup 165 <RadioGroup
166 android:id="@+id/rgFechaHora" 166 android:id="@+id/rgFechaHora"
167 android:layout_width="0dp" 167 android:layout_width="0dp"
168 android:layout_height="wrap_content" 168 android:layout_height="wrap_content"
169 169
170 android:gravity="center" 170 android:gravity="center"
171 android:orientation="horizontal" 171 android:orientation="horizontal"
172 app:layout_constraintEnd_toEndOf="parent" 172 app:layout_constraintEnd_toEndOf="parent"
173 app:layout_constraintStart_toStartOf="parent" 173 app:layout_constraintStart_toStartOf="parent"
174 app:layout_constraintTop_toBottomOf="@+id/tvActuFecha"> 174 app:layout_constraintTop_toBottomOf="@+id/tvActuFecha">
175 175
176 <RadioButton 176 <RadioButton
177 android:id="@+id/rbVentas" 177 android:id="@+id/rbVentas"
178 android:layout_width="wrap_content" 178 android:layout_width="wrap_content"
179 android:layout_height="wrap_content" 179 android:layout_height="wrap_content"
180 android:layout_margin="5dp" 180 android:layout_margin="5dp"
181 android:checked="true" 181 android:checked="true"
182 android:padding="5dp" 182 android:padding="5dp"
183 android:text="@string/rbVentas" 183 android:text="@string/rbVentas"
184 android:textSize="@dimen/NormalText" /> 184 android:textSize="@dimen/NormalText" />
185 185
186 <RadioButton 186 <RadioButton
187 android:id="@+id/rbDeposito" 187 android:id="@+id/rbDeposito"
188 android:layout_width="wrap_content" 188 android:layout_width="wrap_content"
189 android:layout_height="wrap_content" 189 android:layout_height="wrap_content"
190 android:layout_margin="5dp" 190 android:layout_margin="5dp"
191 android:checked="false" 191 android:checked="false"
192 android:padding="5dp" 192 android:padding="5dp"
193 android:text="@string/rbDeposito" 193 android:text="@string/rbDeposito"
194 android:textSize="@dimen/NormalText" /> 194 android:textSize="@dimen/NormalText" />
195 195
196 </RadioGroup> 196 </RadioGroup>
197 197
198 <TextView 198 <TextView
199 android:id="@+id/tvLosProductos" 199 android:id="@+id/tvLosProductos"
200 android:layout_width="0dp" 200 android:layout_width="0dp"
201 android:layout_height="wrap_content" 201 android:layout_height="wrap_content"
202 202
203 android:layout_marginStart="@dimen/MarginBotAgreSer" 203 android:layout_marginStart="@dimen/MarginBotAgreSer"
204 android:layout_marginEnd="@dimen/MarginTopSubTitulos" 204 android:layout_marginEnd="@dimen/MarginTopSubTitulos"
205 android:gravity="start" 205 android:gravity="start"
206 android:lines="1" 206 android:lines="1"
207 android:text="@string/tvLosProductos" 207 android:text="@string/tvLosProductos"
208 android:textColor="@android:color/black" 208 android:textColor="@android:color/black"
209 android:textSize="@dimen/SubTitulos" 209 android:textSize="@dimen/SubTitulos"
210 app:fontFamily="sans-serif-condensed" 210 app:fontFamily="sans-serif-condensed"
211 app:layout_constraintEnd_toEndOf="parent" 211 app:layout_constraintEnd_toEndOf="parent"
212 app:layout_constraintStart_toStartOf="parent" 212 app:layout_constraintStart_toStartOf="parent"
213 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> 213 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" />
214 214
215 <RadioGroup 215 <RadioGroup
216 android:id="@+id/rgLosProductos" 216 android:id="@+id/rgLosProductos"
217 android:layout_width="0dp" 217 android:layout_width="0dp"
218 android:layout_height="wrap_content" 218 android:layout_height="wrap_content"
219 219
220 android:gravity="center" 220 android:gravity="center"
221 android:orientation="vertical" 221 android:orientation="vertical"
222 app:layout_constraintEnd_toEndOf="parent" 222 app:layout_constraintEnd_toEndOf="parent"
223 app:layout_constraintStart_toStartOf="parent" 223 app:layout_constraintStart_toStartOf="parent"
224 app:layout_constraintTop_toBottomOf="@+id/tvLosProductos"> 224 app:layout_constraintTop_toBottomOf="@+id/tvLosProductos">
225 225
226 <RadioButton 226 <RadioButton
227 android:id="@+id/rbProInclu" 227 android:id="@+id/rbProInclu"
228 android:layout_width="match_parent" 228 android:layout_width="match_parent"
229 android:layout_height="wrap_content" 229 android:layout_height="wrap_content"
230 230
231 android:layout_margin="@dimen/PadingCbyRb" 231 android:layout_margin="@dimen/PadingCbyRb"
232 android:checked="true" 232 android:checked="true"
233 android:padding="@dimen/PadingCbyRb" 233 android:padding="@dimen/PadingCbyRb"
234 android:text="@string/rbProInclu" 234 android:text="@string/rbProInclu"
235 android:textSize="@dimen/NormalText" /> 235 android:textSize="@dimen/NormalText" />
236 236
237 <RadioButton 237 <RadioButton
238 android:id="@+id/rbProNoInclu" 238 android:id="@+id/rbProNoInclu"
239 android:layout_width="match_parent" 239 android:layout_width="match_parent"
240 android:layout_height="wrap_content" 240 android:layout_height="wrap_content"
241 android:layout_margin="@dimen/PadingCbyRb" 241 android:layout_margin="@dimen/PadingCbyRb"
242 android:checked="false" 242 android:checked="false"
243 android:padding="@dimen/PadingCbyRb" 243 android:padding="@dimen/PadingCbyRb"
244 android:text="@string/rbProNoInclu" 244 android:text="@string/rbProNoInclu"
245 android:textSize="@dimen/NormalText" /> 245 android:textSize="@dimen/NormalText" />
246 246
247 </RadioGroup> 247 </RadioGroup>
248 248
249 <CheckBox 249 <CheckBox
250 android:id="@+id/cbHabiLectura" 250 android:id="@+id/cbHabiLectura"
251 android:layout_width="0dp" 251 android:layout_width="0dp"
252 android:layout_height="wrap_content" 252 android:layout_height="wrap_content"
253 android:layout_margin="@dimen/PadingCbyRb" 253 android:layout_margin="@dimen/PadingCbyRb"
254 android:padding="@dimen/PadingCbyRb" 254 android:padding="@dimen/PadingCbyRb"
255 android:text="@string/cbHabiLectura" 255 android:text="@string/cbHabiLectura"
256 android:textSize="@dimen/NormalText" 256 android:textSize="@dimen/NormalText"
257 app:layout_constraintEnd_toEndOf="parent" 257 app:layout_constraintEnd_toEndOf="parent"
258 app:layout_constraintStart_toStartOf="parent" 258 app:layout_constraintStart_toStartOf="parent"
259 app:layout_constraintTop_toBottomOf="@+id/rgLosProductos" /> 259 app:layout_constraintTop_toBottomOf="@+id/rgLosProductos" />
260 260
261 <CheckBox 261 <CheckBox
262 android:id="@+id/cbMostrarStock" 262 android:id="@+id/cbMostrarStock"
263 android:layout_width="0dp" 263 android:layout_width="0dp"
264 android:layout_height="wrap_content" 264 android:layout_height="wrap_content"
265 android:layout_margin="@dimen/PadingCbyRb" 265 android:layout_margin="@dimen/PadingCbyRb"
266 android:padding="@dimen/PadingCbyRb" 266 android:padding="@dimen/PadingCbyRb"
267 android:text="@string/cbMostrarStock" 267 android:text="@string/cbMostrarStock"
268 android:textSize="@dimen/NormalText" 268 android:textSize="@dimen/NormalText"
269 app:layout_constraintEnd_toEndOf="parent" 269 app:layout_constraintEnd_toEndOf="parent"
270 app:layout_constraintStart_toStartOf="parent" 270 app:layout_constraintStart_toStartOf="parent"
271 app:layout_constraintTop_toBottomOf="@+id/cbHabiLectura" /> 271 app:layout_constraintTop_toBottomOf="@+id/cbHabiLectura" />
272 272
273 <TextView 273 <TextView
274 android:id="@+id/tvColumMostrar" 274 android:id="@+id/tvColumMostrar"
275 android:layout_width="0dp" 275 android:layout_width="0dp"
276 android:layout_height="wrap_content" 276 android:layout_height="wrap_content"
277 277
278 android:layout_marginStart="@dimen/MarginBotAgreSer" 278 android:layout_marginStart="@dimen/MarginBotAgreSer"
279 android:layout_marginEnd="@dimen/MarginTopSubTitulos" 279 android:layout_marginEnd="@dimen/MarginTopSubTitulos"
280 android:gravity="start" 280 android:gravity="start"
281 android:lines="1" 281 android:lines="1"
282 android:text="@string/tvColumMostrar" 282 android:text="@string/tvColumMostrar"
283 android:textColor="@android:color/black" 283 android:textColor="@android:color/black"
284 android:textSize="@dimen/SubTitulos" 284 android:textSize="@dimen/SubTitulos"
285 app:fontFamily="sans-serif-condensed" 285 app:fontFamily="sans-serif-condensed"
286 app:layout_constraintEnd_toEndOf="parent" 286 app:layout_constraintEnd_toEndOf="parent"
287 app:layout_constraintStart_toStartOf="parent" 287 app:layout_constraintStart_toStartOf="parent"
288 app:layout_constraintTop_toBottomOf="@+id/cbMostrarStock" /> 288 app:layout_constraintTop_toBottomOf="@+id/cbMostrarStock" />
289 289
290 <RadioGroup 290 <RadioGroup
291 android:id="@+id/rgCodigosMostrar" 291 android:id="@+id/rgCodigosMostrar"
292 android:layout_width="0dp" 292 android:layout_width="0dp"
293 android:layout_height="wrap_content" 293 android:layout_height="wrap_content"
294 294
295 android:gravity="center" 295 android:gravity="center"
296 android:orientation="horizontal" 296 android:orientation="horizontal"
297 app:layout_constraintEnd_toEndOf="parent" 297 app:layout_constraintEnd_toEndOf="parent"
298 app:layout_constraintStart_toStartOf="parent" 298 app:layout_constraintStart_toStartOf="parent"
299 app:layout_constraintTop_toBottomOf="@+id/tvColumMostrar"> 299 app:layout_constraintTop_toBottomOf="@+id/tvColumMostrar">
300 300
301 <RadioButton 301 <RadioButton
302 android:id="@+id/rbCodigoDebo" 302 android:id="@+id/rbCodigoDebo"
303 android:layout_width="wrap_content" 303 android:layout_width="wrap_content"
304 android:layout_height="wrap_content" 304 android:layout_height="wrap_content"
305 android:layout_margin="5dp" 305 android:layout_margin="5dp"
306 android:checked="true" 306 android:checked="true"
307 android:padding="5dp" 307 android:padding="5dp"
308 android:text="@string/rbCodigoDebo" 308 android:text="@string/rbCodigoDebo"
309 android:textSize="@dimen/NormalText" /> 309 android:textSize="@dimen/NormalText" />
310 310
311 <RadioButton 311 <RadioButton
312 android:id="@+id/rbCodigoOrigen" 312 android:id="@+id/rbCodigoOrigen"
313 android:layout_width="wrap_content" 313 android:layout_width="wrap_content"
314 android:layout_height="wrap_content" 314 android:layout_height="wrap_content"
315 android:layout_margin="5dp" 315 android:layout_margin="5dp"
316 android:checked="false" 316 android:checked="false"
317 android:padding="5dp" 317 android:padding="5dp"
318 android:text="@string/rbCodigoOrigen" 318 android:text="@string/rbCodigoOrigen"
319 android:textSize="@dimen/NormalText" /> 319 android:textSize="@dimen/NormalText" />
320 320
321 <RadioButton 321 <RadioButton
322 android:id="@+id/rbCodigoBarras" 322 android:id="@+id/rbCodigoBarras"
323 android:layout_width="wrap_content" 323 android:layout_width="wrap_content"
324 android:layout_height="wrap_content" 324 android:layout_height="wrap_content"
325 android:layout_margin="5dp" 325 android:layout_margin="5dp"
326 android:padding="5dp" 326 android:padding="5dp"
327 android:text="@string/rbCodigoBarras" 327 android:text="@string/rbCodigoBarras"
328 android:textSize="@dimen/NormalText" /> 328 android:textSize="@dimen/NormalText" />
329 </RadioGroup> 329 </RadioGroup>
330 330
331 <CheckBox 331 <CheckBox
332 android:id="@+id/cbMostrarExistencia" 332 android:id="@+id/cbMostrarExistencia"
333 android:layout_width="wrap_content" 333 android:layout_width="wrap_content"
334 android:layout_height="wrap_content" 334 android:layout_height="wrap_content"
335 android:layout_margin="@dimen/PadingCbyRb" 335 android:layout_margin="@dimen/PadingCbyRb"
336 android:padding="@dimen/PadingCbyRb" 336 android:padding="@dimen/PadingCbyRb"
337 android:text="@string/cbMostrarExistencia" 337 android:text="@string/cbMostrarExistencia"
338 android:textSize="@dimen/NormalText" 338 android:textSize="@dimen/NormalText"
339 android:checked="false" 339 android:checked="false"
340 app:layout_constraintEnd_toStartOf="@+id/cbMostrarPrecio" 340 app:layout_constraintEnd_toStartOf="@+id/cbMostrarPrecio"
341 app:layout_constraintStart_toStartOf="parent" 341 app:layout_constraintStart_toStartOf="parent"
342 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> 342 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" />
343 343
344 <CheckBox 344 <CheckBox
345 android:id="@+id/cbMostrarPrecio" 345 android:id="@+id/cbMostrarPrecio"
346 android:layout_width="wrap_content" 346 android:layout_width="wrap_content"
347 android:layout_height="wrap_content" 347 android:layout_height="wrap_content"
348 android:layout_margin="@dimen/PadingCbyRb" 348 android:layout_margin="@dimen/PadingCbyRb"
349 android:padding="@dimen/PadingCbyRb" 349 android:padding="@dimen/PadingCbyRb"
350 android:text="@string/cbMostrarPrecio" 350 android:text="@string/cbMostrarPrecio"
351 android:textSize="@dimen/NormalText" 351 android:textSize="@dimen/NormalText"
352 android:checked="false" 352 android:checked="false"
353 app:layout_constraintEnd_toEndOf="parent" 353 app:layout_constraintEnd_toEndOf="parent"
354 app:layout_constraintStart_toEndOf="@+id/cbMostrarExistencia" 354 app:layout_constraintStart_toEndOf="@+id/cbMostrarExistencia"
355 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> 355 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" />
356 356
357 <Button 357 <Button
358 android:id="@+id/btnGuardar" 358 android:id="@+id/btnGuardar"
359 android:layout_width="wrap_content" 359 android:layout_width="wrap_content"
360 android:layout_height="wrap_content" 360 android:layout_height="wrap_content"
361 android:text="@string/btnGuardar" 361 android:text="@string/btnGuardar"
362 android:textSize="@dimen/NormalText" 362 android:textSize="@dimen/NormalText"
363 app:layout_constraintEnd_toEndOf="parent" 363 app:layout_constraintEnd_toEndOf="parent"
364 android:textColor="@android:color/white" 364 android:textColor="@android:color/white"
365 android:padding="10dp" 365 android:padding="10dp"
366 android:background="@drawable/boton_borde_redondeado" 366 android:background="@drawable/boton_borde_redondeado"
367 app:layout_constraintStart_toStartOf="parent" 367 app:layout_constraintStart_toStartOf="parent"
368 app:layout_constraintTop_toBottomOf="@+id/cbMostrarPrecio" /> 368 app:layout_constraintTop_toBottomOf="@+id/cbMostrarPrecio" />
369 </androidx.constraintlayout.widget.ConstraintLayout> 369 </androidx.constraintlayout.widget.ConstraintLayout>
370 370
371 </ScrollView> 371 </ScrollView>
app/src/main/res/layout-land/fragment_descripcion.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 2
3 3
4 <androidx.constraintlayout.widget.ConstraintLayout 4 <androidx.constraintlayout.widget.ConstraintLayout
5 xmlns:android="http://schemas.android.com/apk/res/android" 5 xmlns:android="http://schemas.android.com/apk/res/android"
6 xmlns:app="http://schemas.android.com/apk/res-auto" 6 xmlns:app="http://schemas.android.com/apk/res-auto"
7 xmlns:tools="http://schemas.android.com/tools" 7 xmlns:tools="http://schemas.android.com/tools"
8 android:layout_width="match_parent" 8 android:layout_width="match_parent"
9 android:layout_height="match_parent" 9 android:layout_height="match_parent"
10 tools:context=".ui.descripcionFragment.DescripcionFragment"> 10 tools:context=".UI.descripcionFragment.DescripcionFragment">
11 11
12 12
13 <androidx.recyclerview.widget.RecyclerView 13 <androidx.recyclerview.widget.RecyclerView
14 android:id="@+id/rcDescripcion" 14 android:id="@+id/rcDescripcion"
15 android:layout_width="match_parent" 15 android:layout_width="match_parent"
16 android:layout_height="0dp" 16 android:layout_height="0dp"
17 android:background="@android:color/darker_gray" 17 android:background="@android:color/darker_gray"
18 android:scrollbars="vertical" 18 android:scrollbars="vertical"
19 app:layout_constraintTop_toBottomOf="@id/guideline4" 19 app:layout_constraintTop_toBottomOf="@id/guideline4"
20 app:layout_constraintBottom_toTopOf="@+id/guideline5" 20 app:layout_constraintBottom_toTopOf="@+id/guideline5"
21 app:layout_constraintEnd_toEndOf="parent" 21 app:layout_constraintEnd_toEndOf="parent"
22 app:layout_constraintStart_toStartOf="parent" 22 app:layout_constraintStart_toStartOf="parent"
23 tools:listitem="@layout/item" /> 23 tools:listitem="@layout/item" />
24 24
25 <Button 25 <Button
26 android:id="@+id/btnSalir" 26 android:id="@+id/btnSalir"
27 android:layout_width="0dp" 27 android:layout_width="0dp"
28 android:layout_height="wrap_content" 28 android:layout_height="wrap_content"
29 android:text="@string/btnCancelar" 29 android:text="@string/btnCancelar"
30 android:textColor="@android:color/white" 30 android:textColor="@android:color/white"
31 android:padding="10dp" 31 android:padding="10dp"
32 android:background="@drawable/boton_borde_redondeado" 32 android:background="@drawable/boton_borde_redondeado"
33 app:layout_constraintBottom_toBottomOf="@+id/guideline6" 33 app:layout_constraintBottom_toBottomOf="@+id/guideline6"
34 app:layout_constraintEnd_toEndOf="parent" 34 app:layout_constraintEnd_toEndOf="parent"
35 app:layout_constraintHorizontal_chainStyle="spread" 35 app:layout_constraintHorizontal_chainStyle="spread"
36 app:layout_constraintStart_toStartOf="parent" 36 app:layout_constraintStart_toStartOf="parent"
37 app:layout_constraintTop_toBottomOf="@+id/rcInventarios" /> 37 app:layout_constraintTop_toBottomOf="@+id/rcInventarios" />
38 38
39 <androidx.constraintlayout.widget.Guideline 39 <androidx.constraintlayout.widget.Guideline
40 android:id="@+id/guideline4" 40 android:id="@+id/guideline4"
41 android:layout_width="wrap_content" 41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content" 42 android:layout_height="wrap_content"
43 android:orientation="horizontal" 43 android:orientation="horizontal"
44 app:layout_constraintGuide_percent="0.04" /> 44 app:layout_constraintGuide_percent="0.04" />
45 45
46 <androidx.constraintlayout.widget.Guideline 46 <androidx.constraintlayout.widget.Guideline
47 android:id="@+id/guideline5" 47 android:id="@+id/guideline5"
48 android:layout_width="wrap_content" 48 android:layout_width="wrap_content"
49 android:layout_height="wrap_content" 49 android:layout_height="wrap_content"
50 android:orientation="horizontal" 50 android:orientation="horizontal"
51 app:layout_constraintGuide_percent="0.82" /> 51 app:layout_constraintGuide_percent="0.82" />
52 52
53 <androidx.constraintlayout.widget.Guideline 53 <androidx.constraintlayout.widget.Guideline
54 android:id="@+id/guideline6" 54 android:id="@+id/guideline6"
55 android:layout_width="wrap_content" 55 android:layout_width="wrap_content"
56 android:layout_height="wrap_content" 56 android:layout_height="wrap_content"
57 android:orientation="horizontal" 57 android:orientation="horizontal"
58 app:layout_constraintGuide_percent="0.97" /> 58 app:layout_constraintGuide_percent="0.97" />
59 </androidx.constraintlayout.widget.ConstraintLayout> 59 </androidx.constraintlayout.widget.ConstraintLayout>
60 60
app/src/main/res/layout-land/fragment_inventario.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:id="@+id/frameLayout" 5 android:id="@+id/frameLayout"
6 android:layout_width="match_parent" 6 android:layout_width="match_parent"
7 android:layout_height="match_parent" 7 android:layout_height="match_parent"
8 tools:context=".ui.inventario.InventarioFragment"> 8 tools:context=".UI.inventario.InventarioFragment">
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/tvTitulo" 11 android:id="@+id/tvTitulo"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="60dp" 13 android:layout_height="60dp"
14 android:autoSizeMaxTextSize="100sp" 14 android:autoSizeMaxTextSize="100sp"
15 android:autoSizeMinTextSize="20sp" 15 android:autoSizeMinTextSize="20sp"
16 android:autoSizeStepGranularity="5sp" 16 android:autoSizeStepGranularity="5sp"
17 android:autoSizeTextType="uniform" 17 android:autoSizeTextType="uniform"
18 android:gravity="center" 18 android:gravity="center"
19 android:lines="1" 19 android:lines="1"
20 android:text="@string/invTitulo" 20 android:text="@string/invTitulo"
21 android:textColor="@color/colorAccent" 21 android:textColor="@color/colorAccent"
22 app:fontFamily="sans-serif-condensed" 22 app:fontFamily="sans-serif-condensed"
23 app:layout_constraintBottom_toTopOf="@id/guideline2" 23 app:layout_constraintBottom_toTopOf="@id/guideline2"
24 app:layout_constraintEnd_toEndOf="parent" 24 app:layout_constraintEnd_toEndOf="parent"
25 app:layout_constraintStart_toStartOf="parent" 25 app:layout_constraintStart_toStartOf="parent"
26 app:layout_constraintTop_toTopOf="@id/guideline" /> 26 app:layout_constraintTop_toTopOf="@id/guideline" />
27 27
28 28
29 <ImageButton 29 <ImageButton
30 android:id="@+id/ivCamara" 30 android:id="@+id/ivCamara"
31 android:layout_width="60dp" 31 android:layout_width="60dp"
32 android:layout_height="60dp" 32 android:layout_height="60dp"
33 android:layout_marginTop="15dp" 33 android:layout_marginTop="15dp"
34 android:clickable="true" 34 android:clickable="true"
35 android:contentDescription="@string/ibBusCB" 35 android:contentDescription="@string/ibBusCB"
36 android:elevation="5dp" 36 android:elevation="5dp"
37 android:background="@drawable/boton_redondo" 37 android:background="@drawable/boton_redondo"
38 android:layout_margin="10dp" 38 android:layout_margin="10dp"
39 android:focusable="false" 39 android:focusable="false"
40 android:scaleType="fitEnd" 40 android:scaleType="fitEnd"
41 app:layout_constraintCircleRadius="40dp" 41 app:layout_constraintCircleRadius="40dp"
42 android:src="@drawable/codbar" 42 android:src="@drawable/codbar"
43 app:layout_constraintBottom_toTopOf="@id/guideline3" 43 app:layout_constraintBottom_toTopOf="@id/guideline3"
44 app:layout_constraintEnd_toStartOf="@+id/etCodigoBarras" 44 app:layout_constraintEnd_toStartOf="@+id/etCodigoBarras"
45 app:layout_constraintHorizontal_bias="0.0" 45 app:layout_constraintHorizontal_bias="0.0"
46 app:layout_constraintStart_toStartOf="parent" 46 app:layout_constraintStart_toStartOf="parent"
47 app:layout_constraintTop_toBottomOf="@+id/guideline2" /> 47 app:layout_constraintTop_toBottomOf="@+id/guideline2" />
48 48
49 <EditText 49 <EditText
50 android:id="@+id/etCodigoBarras" 50 android:id="@+id/etCodigoBarras"
51 android:layout_width="0dp" 51 android:layout_width="0dp"
52 android:layout_height="wrap_content" 52 android:layout_height="wrap_content"
53 android:autofillHints="" 53 android:autofillHints=""
54 android:clickable="true" 54 android:clickable="true"
55 android:ems="10" 55 android:ems="10"
56 android:focusable="true" 56 android:focusable="true"
57 android:hint="@string/ibBusCB" 57 android:hint="@string/ibBusCB"
58 android:inputType="textPersonName" 58 android:inputType="textPersonName"
59 android:lines="1" 59 android:lines="1"
60 android:textAllCaps="true" 60 android:textAllCaps="true"
61 android:textSize="20sp" 61 android:textSize="20sp"
62 app:layout_constraintBottom_toTopOf="@+id/guideline3" 62 app:layout_constraintBottom_toTopOf="@+id/guideline3"
63 app:layout_constraintEnd_toStartOf="@+id/swSumaUno" 63 app:layout_constraintEnd_toStartOf="@+id/swSumaUno"
64 app:layout_constraintHorizontal_bias="0.49" 64 app:layout_constraintHorizontal_bias="0.49"
65 app:layout_constraintHorizontal_chainStyle="packed" 65 app:layout_constraintHorizontal_chainStyle="packed"
66 app:layout_constraintStart_toEndOf="@+id/ivCamara" 66 app:layout_constraintStart_toEndOf="@+id/ivCamara"
67 app:layout_constraintTop_toBottomOf="@+id/guideline2" /> 67 app:layout_constraintTop_toBottomOf="@+id/guideline2" />
68 68
69 69
70 <Switch 70 <Switch
71 android:id="@+id/swSumaUno" 71 android:id="@+id/swSumaUno"
72 android:layout_width="wrap_content" 72 android:layout_width="wrap_content"
73 android:layout_height="wrap_content" 73 android:layout_height="wrap_content"
74 android:text="@string/switch_1" 74 android:text="@string/switch_1"
75 app:layout_constraintBaseline_toBaselineOf="@+id/etCodigoBarras" 75 app:layout_constraintBaseline_toBaselineOf="@+id/etCodigoBarras"
76 app:layout_constraintEnd_toEndOf="parent" 76 app:layout_constraintEnd_toEndOf="parent"
77 app:layout_constraintStart_toEndOf="@id/etCodigoBarras" 77 app:layout_constraintStart_toEndOf="@id/etCodigoBarras"
78 tools:ignore="UseSwitchCompatOrMaterialXml" /> 78 tools:ignore="UseSwitchCompatOrMaterialXml" />
79 79
80 <androidx.recyclerview.widget.RecyclerView 80 <androidx.recyclerview.widget.RecyclerView
81 android:id="@+id/rcInventarios" 81 android:id="@+id/rcInventarios"
82 android:layout_width="match_parent" 82 android:layout_width="match_parent"
83 android:layout_height="0dp" 83 android:layout_height="0dp"
84 android:background="@android:color/darker_gray" 84 android:background="@android:color/darker_gray"
85 app:layout_constraintBottom_toBottomOf="@+id/guideline5" 85 app:layout_constraintBottom_toBottomOf="@+id/guideline5"
86 app:layout_constraintEnd_toEndOf="parent" 86 app:layout_constraintEnd_toEndOf="parent"
87 app:layout_constraintStart_toStartOf="parent" 87 app:layout_constraintStart_toStartOf="parent"
88 app:layout_constraintTop_toBottomOf="@+id/guideline4" 88 app:layout_constraintTop_toBottomOf="@+id/guideline4"
89 tools:listitem="@layout/item" /> 89 tools:listitem="@layout/item" />
90 90
91 91
92 <Button 92 <Button
93 android:id="@+id/btnExportarInv" 93 android:id="@+id/btnExportarInv"
94 android:layout_width="wrap_content" 94 android:layout_width="wrap_content"
95 android:layout_height="wrap_content" 95 android:layout_height="wrap_content"
96 android:text="@string/btnExportarInv" 96 android:text="@string/btnExportarInv"
97 android:textColor="@android:color/white" 97 android:textColor="@android:color/white"
98 android:padding="10dp" 98 android:padding="10dp"
99 android:background="@drawable/boton_borde_redondeado" 99 android:background="@drawable/boton_borde_redondeado"
100 app:layout_constraintBottom_toBottomOf="@+id/guideline6" 100 app:layout_constraintBottom_toBottomOf="@+id/guideline6"
101 app:layout_constraintEnd_toEndOf="parent" 101 app:layout_constraintEnd_toEndOf="parent"
102 app:layout_constraintHorizontal_chainStyle="spread" 102 app:layout_constraintHorizontal_chainStyle="spread"
103 app:layout_constraintStart_toEndOf="@+id/btnBorrarInv" 103 app:layout_constraintStart_toEndOf="@+id/btnBorrarInv"
104 app:layout_constraintTop_toBottomOf="@+id/guideline5" /> 104 app:layout_constraintTop_toBottomOf="@+id/guideline5" />
105 105
106 <Button 106 <Button
107 android:id="@+id/btnBorrarInv" 107 android:id="@+id/btnBorrarInv"
108 android:layout_width="wrap_content" 108 android:layout_width="wrap_content"
109 android:layout_height="wrap_content" 109 android:layout_height="wrap_content"
110 android:text="@string/btnBorrarInv" 110 android:text="@string/btnBorrarInv"
111 app:layout_constraintBottom_toBottomOf="@+id/guideline6" 111 app:layout_constraintBottom_toBottomOf="@+id/guideline6"
112 app:layout_constraintEnd_toStartOf="@id/btnExportarInv" 112 app:layout_constraintEnd_toStartOf="@id/btnExportarInv"
113 app:layout_constraintHorizontal_chainStyle="spread" 113 app:layout_constraintHorizontal_chainStyle="spread"
114 app:layout_constraintStart_toStartOf="parent" 114 app:layout_constraintStart_toStartOf="parent"
115 android:textColor="@android:color/white" 115 android:textColor="@android:color/white"
116 android:padding="10dp" 116 android:padding="10dp"
117 android:background="@drawable/boton_borde_redondeado" 117 android:background="@drawable/boton_borde_redondeado"
118 app:layout_constraintTop_toBottomOf="@+id/guideline5" /> 118 app:layout_constraintTop_toBottomOf="@+id/guideline5" />
119 119
120 <androidx.constraintlayout.widget.Guideline 120 <androidx.constraintlayout.widget.Guideline
121 android:id="@+id/guideline" 121 android:id="@+id/guideline"
122 android:layout_width="wrap_content" 122 android:layout_width="wrap_content"
123 android:layout_height="wrap_content" 123 android:layout_height="wrap_content"
124 android:orientation="horizontal" 124 android:orientation="horizontal"
125 app:layout_constraintGuide_percent="0.02" /> 125 app:layout_constraintGuide_percent="0.02" />
126 126
127 <androidx.constraintlayout.widget.Guideline 127 <androidx.constraintlayout.widget.Guideline
128 android:id="@+id/guideline2" 128 android:id="@+id/guideline2"
129 android:layout_width="wrap_content" 129 android:layout_width="wrap_content"
130 android:layout_height="wrap_content" 130 android:layout_height="wrap_content"
131 android:orientation="horizontal" 131 android:orientation="horizontal"
132 app:layout_constraintGuide_percent="0.2" /> 132 app:layout_constraintGuide_percent="0.2" />
133 133
134 <androidx.constraintlayout.widget.Guideline 134 <androidx.constraintlayout.widget.Guideline
135 android:id="@+id/guideline3" 135 android:id="@+id/guideline3"
136 android:layout_width="wrap_content" 136 android:layout_width="wrap_content"
137 android:layout_height="wrap_content" 137 android:layout_height="wrap_content"
138 android:orientation="horizontal" 138 android:orientation="horizontal"
139 app:layout_constraintGuide_percent="0.29" /> 139 app:layout_constraintGuide_percent="0.29" />
140 140
141 <androidx.constraintlayout.widget.Guideline 141 <androidx.constraintlayout.widget.Guideline
142 android:id="@+id/guideline4" 142 android:id="@+id/guideline4"
143 android:layout_width="wrap_content" 143 android:layout_width="wrap_content"
144 android:layout_height="wrap_content" 144 android:layout_height="wrap_content"
145 android:orientation="horizontal" 145 android:orientation="horizontal"
146 app:layout_constraintGuide_percent="0.35" /> 146 app:layout_constraintGuide_percent="0.35" />
147 147
148 <androidx.constraintlayout.widget.Guideline 148 <androidx.constraintlayout.widget.Guideline
149 android:id="@+id/guideline5" 149 android:id="@+id/guideline5"
150 android:layout_width="wrap_content" 150 android:layout_width="wrap_content"
151 android:layout_height="wrap_content" 151 android:layout_height="wrap_content"
152 android:orientation="horizontal" 152 android:orientation="horizontal"
153 app:layout_constraintGuide_percent="0.83" /> 153 app:layout_constraintGuide_percent="0.83" />
154 154
155 <androidx.constraintlayout.widget.Guideline 155 <androidx.constraintlayout.widget.Guideline
156 android:id="@+id/guideline6" 156 android:id="@+id/guideline6"
157 android:layout_width="wrap_content" 157 android:layout_width="wrap_content"
158 android:layout_height="wrap_content" 158 android:layout_height="wrap_content"
159 android:orientation="horizontal" 159 android:orientation="horizontal"
160 app:layout_constraintGuide_percent="0.97" /> 160 app:layout_constraintGuide_percent="0.97" />
161 161
162 162
163 </androidx.constraintlayout.widget.ConstraintLayout> 163 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout-land/fragment_servidores.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout 2 <androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent" 6 android:layout_width="match_parent"
7 android:layout_height="match_parent" 7 android:layout_height="match_parent"
8 tools:context=".ui.servidores.ServidoresFragment"> 8 tools:context=".UI.servidores.ServidoresFragment">
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/tvTitutloServer" 11 android:id="@+id/tvTitutloServer"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="60dp" 13 android:layout_height="40dp"
14 android:layout_marginStart="8dp" 14 android:layout_marginStart="8dp"
15 android:layout_marginTop="15dp" 15 android:layout_marginTop="15dp"
16 android:layout_marginEnd="8dp" 16 android:layout_marginEnd="8dp"
17 android:autoSizeMaxTextSize="100sp" 17 android:autoSizeMaxTextSize="100sp"
18 android:autoSizeMinTextSize="20sp" 18 android:autoSizeMinTextSize="20sp"
19 android:autoSizeStepGranularity="5sp" 19 android:autoSizeStepGranularity="5sp"
20 android:autoSizeTextType="uniform" 20 android:autoSizeTextType="uniform"
21 android:gravity="center" 21 android:gravity="center"
22 android:lines="1" 22 android:lines="1"
23 android:text="@string/tvTitutloServer" 23 android:text="@string/tvTitutloServer"
24 android:textColor="@color/colorAccent" 24 android:textColor="@color/colorAccent"
25 app:fontFamily="sans-serif-condensed" 25 app:fontFamily="sans-serif-condensed"
26 app:layout_constraintEnd_toEndOf="parent" 26 app:layout_constraintEnd_toEndOf="parent"
27 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintStart_toStartOf="parent"
28 app:layout_constraintTop_toTopOf="parent" /> 28 app:layout_constraintTop_toTopOf="parent" />
29 29
30 <TextView 30 <TextView
31 android:id="@+id/tvDirServer" 31 android:id="@+id/tvDirServer"
32 android:layout_width="match_parent" 32 android:layout_width="match_parent"
33 android:layout_height="wrap_content" 33 android:layout_height="wrap_content"
34 android:layout_margin="10dp" 34
35 android:gravity="start" 35 android:gravity="start"
36 android:lines="1" 36 android:lines="1"
37 android:text="@string/tvDirServer" 37 android:text="@string/tvDirServer"
38 android:textColor="@android:color/black" 38 android:textColor="@android:color/black"
39 android:textSize="@dimen/SubTitulos" 39 android:textSize="@dimen/SubTitulos"
40 android:textStyle="bold|italic" 40 android:textStyle="bold|italic"
41 app:fontFamily="sans-serif-condensed" 41 app:fontFamily="sans-serif-condensed"
42 app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor" 42 app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor"
43 app:layout_constraintEnd_toEndOf="parent" 43 app:layout_constraintEnd_toEndOf="parent"
44 app:layout_constraintStart_toStartOf="parent" 44 app:layout_constraintStart_toStartOf="parent"
45 app:layout_constraintTop_toBottomOf="@id/tvTitutloServer" /> 45 app:layout_constraintTop_toBottomOf="@id/tvTitutloServer" />
46 46
47 <EditText 47 <EditText
48 android:id="@+id/etDireccionServidor" 48 android:id="@+id/etDireccionServidor"
49 android:layout_width="0dp" 49 android:layout_width="0dp"
50 android:layout_height="wrap_content" 50 android:layout_height="wrap_content"
51 android:layout_margin="10dp" 51 android:clickable="true"
52 android:clickable="true"
53 android:ems="10" 52 android:ems="10"
54 android:focusable="true" 53 android:focusable="true"
55 android:hint="192.168.10.1:9090" 54 android:hint="192.168.10.1:9090"
56 android:inputType="text" 55 android:inputType="text"
57 android:lines="1" 56 android:lines="1"
58 android:textSize="10sp" 57 android:textSize="10sp"
59 app:layout_constraintEnd_toEndOf="parent" 58 app:layout_constraintEnd_toEndOf="parent"
60 app:layout_constraintStart_toStartOf="parent" 59 app:layout_constraintStart_toStartOf="parent"
61 app:layout_constraintTop_toBottomOf="@id/tvDirServer" /> 60 app:layout_constraintTop_toBottomOf="@id/tvDirServer" />
62 61
63 <TextView 62 <TextView
64 android:id="@+id/tvNomServer" 63 android:id="@+id/tvNomServer"
65 android:layout_width="match_parent" 64 android:layout_width="match_parent"
66 android:layout_height="wrap_content" 65 android:layout_height="wrap_content"
67 android:layout_margin="10dp"
68 android:gravity="start" 66 android:gravity="start"
69 android:lines="1" 67 android:lines="1"
70 android:text="@string/tvNomServer" 68 android:text="@string/tvNomServer"
71 android:textColor="@android:color/black" 69 android:textColor="@android:color/black"
72 android:textSize="@dimen/SubTitulos" 70 android:textSize="@dimen/SubTitulos"
73 android:textStyle="bold|italic" 71 android:textStyle="bold|italic"
74 app:fontFamily="sans-serif-condensed" 72 app:fontFamily="sans-serif-condensed"
75 app:layout_constraintEnd_toEndOf="parent" 73 app:layout_constraintEnd_toEndOf="parent"
76 app:layout_constraintStart_toStartOf="parent" 74 app:layout_constraintStart_toStartOf="parent"
77 app:layout_constraintTop_toBottomOf="@id/etDireccionServidor" /> 75 app:layout_constraintTop_toBottomOf="@id/etDireccionServidor" />
78 76
79 <EditText 77 <EditText
80 android:id="@+id/etNombreServidor" 78 android:id="@+id/etNombreServidor"
81 android:layout_width="match_parent" 79 android:layout_width="match_parent"
82 android:layout_height="wrap_content" 80 android:layout_height="wrap_content"
83 android:layout_margin="10dp"
84 android:autofillHints="" 81 android:autofillHints=""
85 android:clickable="true" 82 android:clickable="true"
86 android:ems="10" 83 android:ems="10"
87 android:focusable="true" 84 android:focusable="true"
88 android:inputType="text" 85 android:inputType="text"
89 android:lines="1" 86 android:lines="1"
90 android:hint="Servidor Local" 87 android:hint="Servidor Local"
91 android:textSize="10sp" 88 android:textSize="10sp"
92 app:layout_constraintEnd_toEndOf="parent" 89 app:layout_constraintEnd_toEndOf="parent"
93 app:layout_constraintStart_toStartOf="parent" 90 app:layout_constraintStart_toStartOf="parent"
94 app:layout_constraintTop_toBottomOf="@+id/tvNomServer" /> 91 app:layout_constraintTop_toBottomOf="@+id/tvNomServer" />
95 92
96 93
97 <androidx.recyclerview.widget.RecyclerView 94 <androidx.recyclerview.widget.RecyclerView
98 android:id="@+id/rvServidores" 95 android:id="@+id/rvServidores"
99 android:layout_width="0dp" 96 android:layout_width="0dp"
100 android:layout_height="0dp" 97 android:layout_height="0dp"
101 android:layout_marginTop="10dp" 98 android:layout_marginTop="10dp"
102 android:background="@android:color/darker_gray" 99 android:background="@android:color/darker_gray"
103 app:layout_constraintBottom_toTopOf="@+id/btnGuardarServidores" 100 app:layout_constraintBottom_toTopOf="@+id/btnGuardarServidores"
104 app:layout_constraintEnd_toEndOf="parent" 101 app:layout_constraintEnd_toEndOf="parent"
105 app:layout_constraintHorizontal_bias="0.0" 102 app:layout_constraintHorizontal_bias="0.0"
106 app:layout_constraintStart_toStartOf="parent" 103 app:layout_constraintStart_toStartOf="parent"
107 app:layout_constraintTop_toBottomOf="@+id/etNombreServidor" 104 app:layout_constraintTop_toBottomOf="@+id/etNombreServidor"
108 app:layout_goneMarginEnd="10dp" 105 app:layout_goneMarginEnd="10dp"
109 tools:listitem="@layout/item_servidores" /> 106 tools:listitem="@layout/item_servidores" />
110 107
111 <Button 108 <Button
112 android:id="@+id/btnGuardarServidores" 109 android:id="@+id/btnGuardarServidores"
113 android:layout_width="0dp" 110 android:layout_width="0dp"
114 android:layout_height="wrap_content" 111 android:layout_height="wrap_content"
115 android:layout_marginTop="10dp" 112
116 android:layout_marginEnd="10dp"
117 android:text="@string/btnGuardarServidores" 113 android:text="@string/btnGuardarServidores"
118 android:textColor="@android:color/white" 114 android:textColor="@android:color/white"
119 android:padding="5dp" 115 android:padding="5dp"
120 android:background="@drawable/boton_borde_redondeado" 116 android:background="@drawable/boton_borde_redondeado"
121 app:layout_constraintTop_toBottomOf="@+id/rvServidores" 117 app:layout_constraintTop_toBottomOf="@+id/rvServidores"
122 app:layout_constraintEnd_toEndOf="parent" 118 app:layout_constraintEnd_toEndOf="parent"
123 app:layout_constraintStart_toStartOf="parent" 119 app:layout_constraintStart_toStartOf="parent"
124 app:layout_constraintBottom_toBottomOf="parent"/> 120 app:layout_constraintBottom_toBottomOf="parent"/>
125 121
126 </androidx.constraintlayout.widget.ConstraintLayout> 122 </androidx.constraintlayout.widget.ConstraintLayout>
127 123
app/src/main/res/layout/activity_splash.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent" 5 android:layout_width="match_parent"
6 android:layout_height="match_parent" 6 android:layout_height="match_parent"
7 tools:context=".ui.SplashActivity"> 7 tools:context=".UI.SplashActivity">
8 8
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/textView2" 11 android:id="@+id/textView2"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="100dp" 13 android:layout_height="100dp"
14 android:layout_margin="20dp" 14 android:layout_margin="20dp"
15 android:autoSizeMaxTextSize="1000sp" 15 android:autoSizeMaxTextSize="1000sp"
16 android:autoSizeMinTextSize="30sp" 16 android:autoSizeMinTextSize="30sp"
17 android:autoSizeStepGranularity="5sp" 17 android:autoSizeStepGranularity="5sp"
18 android:autoSizeTextType="uniform" 18 android:autoSizeTextType="uniform"
19 android:gravity="center" 19 android:gravity="center"
20 android:lines="1" 20 android:lines="1"
21 android:text="@string/bien" 21 android:text="@string/bien"
22 android:textColor="@color/colorAccent" 22 android:textColor="@color/colorAccent"
23 app:fontFamily="sans-serif-condensed" 23 app:fontFamily="sans-serif-condensed"
24 app:layout_constraintBottom_toTopOf="@+id/imageView" 24 app:layout_constraintBottom_toTopOf="@+id/imageView"
25 app:layout_constraintEnd_toEndOf="parent" 25 app:layout_constraintEnd_toEndOf="parent"
26 app:layout_constraintStart_toStartOf="parent" 26 app:layout_constraintStart_toStartOf="parent"
27 app:layout_constraintTop_toTopOf="parent" /> 27 app:layout_constraintTop_toTopOf="parent" />
28 28
29 <ImageView 29 <ImageView
30 android:id="@+id/imageView" 30 android:id="@+id/imageView"
31 android:layout_width="wrap_content" 31 android:layout_width="wrap_content"
32 android:layout_height="wrap_content" 32 android:layout_height="wrap_content"
33 android:contentDescription="@string/todo" 33 android:contentDescription="@string/todo"
34 android:src="@drawable/ic_launcher_background" 34 android:src="@drawable/ic_launcher_background"
35 app:layout_constraintBottom_toTopOf="@id/textView3" 35 app:layout_constraintBottom_toTopOf="@id/textView3"
36 app:layout_constraintEnd_toEndOf="parent" 36 app:layout_constraintEnd_toEndOf="parent"
37 app:layout_constraintStart_toStartOf="parent" 37 app:layout_constraintStart_toStartOf="parent"
38 app:layout_constraintTop_toBottomOf="@+id/textView2" 38 app:layout_constraintTop_toBottomOf="@+id/textView2"
39 app:srcCompat="@drawable/suitedebo" /> 39 app:srcCompat="@drawable/suitedebo" />
40 40
41 41
42 <TextView 42 <TextView
43 android:id="@+id/textView3" 43 android:id="@+id/textView3"
44 android:layout_width="match_parent" 44 android:layout_width="match_parent"
45 android:layout_height="100dp" 45 android:layout_height="100dp"
46 android:layout_margin="20dp" 46 android:layout_margin="20dp"
47 android:autoSizeMaxTextSize="1000sp" 47 android:autoSizeMaxTextSize="1000sp"
48 android:autoSizeMinTextSize="30sp" 48 android:autoSizeMinTextSize="30sp"
49 android:autoSizeStepGranularity="5sp" 49 android:autoSizeStepGranularity="5sp"
50 android:autoSizeTextType="uniform" 50 android:autoSizeTextType="uniform"
51 android:gravity="center" 51 android:gravity="center"
52 android:lines="1" 52 android:lines="1"
53 android:text="@string/debo" 53 android:text="@string/debo"
54 android:textColor="@color/colorAccent" 54 android:textColor="@color/colorAccent"
55 app:fontFamily="sans-serif-condensed" 55 app:fontFamily="sans-serif-condensed"
56 app:layout_constraintBottom_toTopOf="@+id/textView4" 56 app:layout_constraintBottom_toTopOf="@+id/textView4"
57 app:layout_constraintEnd_toEndOf="parent" 57 app:layout_constraintEnd_toEndOf="parent"
58 app:layout_constraintStart_toStartOf="parent" 58 app:layout_constraintStart_toStartOf="parent"
59 app:layout_constraintTop_toBottomOf="@+id/imageView" /> 59 app:layout_constraintTop_toBottomOf="@+id/imageView" />
60 60
61 <androidx.appcompat.widget.AppCompatTextView 61 <androidx.appcompat.widget.AppCompatTextView
62 android:id="@+id/textView4" 62 android:id="@+id/textView4"
63 android:layout_width="match_parent" 63 android:layout_width="match_parent"
64 android:layout_height="110dp" 64 android:layout_height="110dp"
65 android:layout_margin="20dp" 65 android:layout_margin="20dp"
66 android:autoSizeMaxTextSize="1000sp" 66 android:autoSizeMaxTextSize="1000sp"
67 android:autoSizeMinTextSize="30sp" 67 android:autoSizeMinTextSize="30sp"
68 android:autoSizeStepGranularity="5sp" 68 android:autoSizeStepGranularity="5sp"
69 android:autoSizeTextType="uniform" 69 android:autoSizeTextType="uniform"
70 android:gravity="center" 70 android:gravity="center"
71 android:lines="1" 71 android:lines="1"
72 android:text="@string/inventario" 72 android:text="@string/inventario"
73 android:textColor="@color/colorAccent" 73 android:textColor="@color/colorAccent"
74 app:fontFamily="sans-serif-condensed" 74 app:fontFamily="sans-serif-condensed"
75 app:layout_constraintBottom_toBottomOf="parent" 75 app:layout_constraintBottom_toBottomOf="parent"
76 app:layout_constraintEnd_toEndOf="parent" 76 app:layout_constraintEnd_toEndOf="parent"
77 app:layout_constraintEnd_toStartOf="parent" 77 app:layout_constraintEnd_toStartOf="parent"
78 app:layout_constraintTop_toBottomOf="@id/textView3" /> 78 app:layout_constraintTop_toBottomOf="@id/textView3" />
79 </androidx.constraintlayout.widget.ConstraintLayout> 79 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/app_bar_main.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent" 5 android:layout_width="match_parent"
6 android:layout_height="match_parent" 6 android:layout_height="match_parent"
7 tools:context=".ui.MainActivity"> 7 tools:context=".UI.MainActivity">
8 8
9 <com.google.android.material.appbar.AppBarLayout 9 <com.google.android.material.appbar.AppBarLayout
10 android:layout_width="match_parent" 10 android:layout_width="match_parent"
11 android:layout_height="wrap_content" 11 android:layout_height="wrap_content"
12 android:theme="@style/AppTheme.AppBarOverlay"> 12 android:theme="@style/AppTheme.AppBarOverlay">
13 13
14 <androidx.appcompat.widget.Toolbar 14 <androidx.appcompat.widget.Toolbar
15 android:id="@+id/toolbar" 15 android:id="@+id/toolbar"
16 android:layout_width="match_parent" 16 android:layout_width="match_parent"
17 android:layout_height="?attr/actionBarSize" 17 android:layout_height="?attr/actionBarSize"
18 android:background="?attr/colorPrimary" 18 android:background="?attr/colorPrimary"
19 app:popupTheme="@style/AppTheme.PopupOverlay" /> 19 app:popupTheme="@style/AppTheme.PopupOverlay" />
20 20
21 </com.google.android.material.appbar.AppBarLayout> 21 </com.google.android.material.appbar.AppBarLayout>
22 22
23 <include layout="@layout/content_main" /> 23 <include layout="@layout/content_main" />
24 24
25 25
26 </androidx.coordinatorlayout.widget.CoordinatorLayout> 26 </androidx.coordinatorlayout.widget.CoordinatorLayout>
app/src/main/res/layout/fragment_actua_maestros.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent" 5 android:layout_width="match_parent"
6 android:layout_height="match_parent" 6 android:layout_height="match_parent"
7 tools:context=".ui.actualizacionMaestros.ActuaMaestrosFragment"> 7 tools:context=".UI.actualizacionMaestros.ActuaMaestrosFragment">
8 8
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/tvActMaestros" 11 android:id="@+id/tvActMaestros"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="wrap_content" 13 android:layout_height="wrap_content"
14 android:layout_marginTop="@dimen/MarginTopTitulos" 14 android:layout_marginTop="@dimen/MarginTopTitulos"
15 android:gravity="center" 15 android:gravity="center"
16 16
17 android:text="@string/tvActMaestros" 17 android:text="@string/tvActMaestros"
18 android:textColor="@color/colorAccent" 18 android:textColor="@color/colorAccent"
19 android:textSize="@dimen/Titulos" 19 android:textSize="@dimen/Titulos"
20 app:fontFamily="sans-serif-condensed" 20 app:fontFamily="sans-serif-condensed"
21 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor" 21 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor"
22 app:layout_constraintEnd_toEndOf="parent" 22 app:layout_constraintEnd_toEndOf="parent"
23 app:layout_constraintStart_toStartOf="parent" 23 app:layout_constraintStart_toStartOf="parent"
24 app:layout_constraintTop_toTopOf="parent" /> 24 app:layout_constraintTop_toTopOf="parent" />
25 25
26 <TextView 26 <TextView
27 android:id="@+id/tvSeleccioneServidor" 27 android:id="@+id/tvSeleccioneServidor"
28 android:layout_width="0dp" 28 android:layout_width="0dp"
29 android:layout_height="wrap_content" 29 android:layout_height="wrap_content"
30 android:layout_margin="30dp" 30 android:layout_margin="30dp"
31 android:gravity="center" 31 android:gravity="center"
32 android:lines="2" 32 android:lines="2"
33 android:text="@string/tvMedio" 33 android:text="@string/tvMedio"
34 android:textColor="@android:color/black" 34 android:textColor="@android:color/black"
35 android:textSize="@dimen/SubTitulos" 35 android:textSize="@dimen/SubTitulos"
36 app:fontFamily="sans-serif-condensed" 36 app:fontFamily="sans-serif-condensed"
37 app:layout_constraintEnd_toEndOf="parent" 37 app:layout_constraintEnd_toEndOf="parent"
38 app:layout_constraintStart_toStartOf="parent" 38 app:layout_constraintStart_toStartOf="parent"
39 app:layout_constraintTop_toBottomOf="@+id/tvActMaestros" /> 39 app:layout_constraintTop_toBottomOf="@+id/tvActMaestros" />
40 40
41 <RadioGroup 41 <RadioGroup
42 android:id="@+id/rgTipoActualizacion" 42 android:id="@+id/rgTipoActualizacion"
43 android:layout_width="0dp" 43 android:layout_width="0dp"
44 android:layout_height="wrap_content" 44 android:layout_height="wrap_content"
45 android:layout_margin="25dp" 45 android:layout_margin="25dp"
46 android:gravity="center" 46 android:gravity="center"
47 android:orientation="horizontal" 47 android:orientation="horizontal"
48 app:layout_constraintEnd_toEndOf="parent" 48 app:layout_constraintEnd_toEndOf="parent"
49 app:layout_constraintStart_toStartOf="parent" 49 app:layout_constraintStart_toStartOf="parent"
50 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor"> 50 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor">
51 51
52 <RadioButton 52 <RadioButton
53 android:id="@+id/obPorWifi" 53 android:id="@+id/obPorWifi"
54 android:layout_width="wrap_content" 54 android:layout_width="wrap_content"
55 android:layout_height="wrap_content" 55 android:layout_height="wrap_content"
56 android:layout_margin="5dp" 56 android:layout_margin="5dp"
57 android:checked="true" 57 android:checked="true"
58 android:padding="5dp" 58 android:padding="5dp"
59 android:text="@string/obPorWifi" 59 android:text="@string/obPorWifi"
60 android:textSize="@dimen/NormalText" /> 60 android:textSize="@dimen/NormalText" />
61 61
62 <RadioButton 62 <RadioButton
63 android:id="@+id/obViaArchivo" 63 android:id="@+id/obViaArchivo"
64 android:layout_width="wrap_content" 64 android:layout_width="wrap_content"
65 android:layout_height="wrap_content" 65 android:layout_height="wrap_content"
66 android:layout_margin="5dp" 66 android:layout_margin="5dp"
67 android:checked="false" 67 android:checked="false"
68 android:padding="5dp" 68 android:padding="5dp"
69 android:text="@string/obViaArchivo" 69 android:text="@string/obViaArchivo"
70 android:textSize="@dimen/NormalText" /> 70 android:textSize="@dimen/NormalText" />
71 71
72 72
73 </RadioGroup> 73 </RadioGroup>
74 74
75 75
76 <TextView 76 <TextView
77 android:id="@+id/countriesList" 77 android:id="@+id/countriesList"
78 android:layout_width="0dp" 78 android:layout_width="0dp"
79 android:layout_height="wrap_content" 79 android:layout_height="wrap_content"
80 android:layout_marginTop="@dimen/MarginTopTitulos" 80 android:layout_marginTop="@dimen/MarginTopTitulos"
81 android:gravity="center" 81 android:gravity="center"
82 android:text="" 82 android:text=""
83 android:textColor="@android:color/black" 83 android:textColor="@android:color/black"
84 android:textSize="@dimen/SubTitulos" 84 android:textSize="@dimen/SubTitulos"
85 android:visibility="visible" 85 android:visibility="visible"
86 app:fontFamily="sans-serif-condensed" 86 app:fontFamily="sans-serif-condensed"
87 app:layout_constraintBottom_toTopOf="@+id/btnConfirmarAct" 87 app:layout_constraintBottom_toTopOf="@+id/btnConfirmarAct"
88 app:layout_constraintEnd_toEndOf="parent" 88 app:layout_constraintEnd_toEndOf="parent"
89 app:layout_constraintHorizontal_bias="0.0" 89 app:layout_constraintHorizontal_bias="0.0"
90 app:layout_constraintStart_toStartOf="parent" 90 app:layout_constraintStart_toStartOf="parent"
91 app:layout_constraintTop_toBottomOf="@+id/rgTipoActualizacion" 91 app:layout_constraintTop_toBottomOf="@+id/rgTipoActualizacion"
92 app:layout_constraintVertical_bias="0.0" /> 92 app:layout_constraintVertical_bias="0.0" />
93 93
94 <Button 94 <Button
95 android:id="@+id/btnConfirmarAct" 95 android:id="@+id/btnConfirmarAct"
96 android:layout_width="0dp" 96 android:layout_width="0dp"
97 android:layout_height="wrap_content" 97 android:layout_height="wrap_content"
98 android:layout_margin="20dp" 98 android:layout_margin="20dp"
99 android:text="@string/btnConfirmarAct" 99 android:text="@string/btnConfirmarAct"
100 android:textSize="@dimen/NormalText" 100 android:textSize="@dimen/NormalText"
101 android:textColor="@android:color/white" 101 android:textColor="@android:color/white"
102 android:padding="10dp" 102 android:padding="10dp"
103 android:background="@drawable/boton_borde_redondeado" 103 android:background="@drawable/boton_borde_redondeado"
104 app:layout_constraintBottom_toBottomOf="parent" 104 app:layout_constraintBottom_toBottomOf="parent"
105 app:layout_constraintEnd_toEndOf="parent" 105 app:layout_constraintEnd_toEndOf="parent"
106 app:layout_constraintStart_toStartOf="parent" /> 106 app:layout_constraintStart_toStartOf="parent" />
107 107
108 108
109 <ProgressBar 109 <ProgressBar
110 android:id="@+id/loading_view" 110 android:id="@+id/loading_view"
111 android:layout_width="wrap_content" 111 android:layout_width="wrap_content"
112 android:layout_height="wrap_content" 112 android:layout_height="wrap_content"
113 android:layout_marginStart="8dp" 113 android:layout_marginStart="8dp"
114 android:layout_marginLeft="8dp" 114 android:layout_marginLeft="8dp"
115 android:layout_marginTop="8dp" 115 android:layout_marginTop="8dp"
116 android:layout_marginEnd="8dp" 116 android:layout_marginEnd="8dp"
117 android:layout_marginRight="8dp" 117 android:layout_marginRight="8dp"
118 android:layout_marginBottom="8dp" 118 android:layout_marginBottom="8dp"
119 android:visibility="gone" 119 android:visibility="gone"
120 app:layout_constraintBottom_toBottomOf="parent" 120 app:layout_constraintBottom_toBottomOf="parent"
121 app:layout_constraintEnd_toEndOf="parent" 121 app:layout_constraintEnd_toEndOf="parent"
122 app:layout_constraintStart_toStartOf="parent" 122 app:layout_constraintStart_toStartOf="parent"
123 app:layout_constraintTop_toTopOf="parent" /> 123 app:layout_constraintTop_toTopOf="parent" />
124 124
125 </androidx.constraintlayout.widget.ConstraintLayout> 125 </androidx.constraintlayout.widget.ConstraintLayout>
126 126
app/src/main/res/layout/fragment_configuracion.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent" 5 android:layout_width="match_parent"
6 android:layout_height="wrap_content" 6 android:layout_height="wrap_content"
7 tools:context=".ui.configuracion.ConfiguracionFragment"> 7 tools:context=".UI.configuracion.ConfiguracionFragment">
8 8
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/textView2" 11 android:id="@+id/textView2"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="wrap_content" 13 android:layout_height="wrap_content"
14 14
15 android:layout_marginTop="@dimen/MarginTopTitulos" 15 android:layout_marginTop="@dimen/MarginTopTitulos"
16 android:gravity="center" 16 android:gravity="center"
17 17
18 android:lines="1" 18 android:lines="1"
19 android:text="@string/tvTituloConf" 19 android:text="@string/tvTituloConf"
20 android:textColor="@color/colorAccent" 20 android:textColor="@color/colorAccent"
21 android:textSize="@dimen/Titulos" 21 android:textSize="@dimen/Titulos"
22 app:fontFamily="sans-serif-condensed" 22 app:fontFamily="sans-serif-condensed"
23 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor" 23 app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor"
24 app:layout_constraintEnd_toEndOf="parent" 24 app:layout_constraintEnd_toEndOf="parent"
25 app:layout_constraintStart_toStartOf="parent" 25 app:layout_constraintStart_toStartOf="parent"
26 app:layout_constraintTop_toTopOf="parent" /> 26 app:layout_constraintTop_toTopOf="parent" />
27 27
28 <TextView 28 <TextView
29 android:id="@+id/tvSeleccioneServidor" 29 android:id="@+id/tvSeleccioneServidor"
30 android:layout_width="0dp" 30 android:layout_width="0dp"
31 android:layout_height="wrap_content" 31 android:layout_height="wrap_content"
32 32
33 android:layout_marginStart="@dimen/MarginBotAgreSer" 33 android:layout_marginStart="@dimen/MarginBotAgreSer"
34 android:layout_marginTop="@dimen/MarginTopSubTitulos" 34 android:layout_marginTop="@dimen/MarginTopSubTitulos"
35 android:gravity="start" 35 android:gravity="start"
36 android:lines="1" 36 android:lines="1"
37 android:text="@string/tvSeleccioneServidor" 37 android:text="@string/tvSeleccioneServidor"
38 android:textColor="@android:color/black" 38 android:textColor="@android:color/black"
39 android:textSize="@dimen/SubTitulos" 39 android:textSize="@dimen/SubTitulos"
40 app:fontFamily="sans-serif-condensed" 40 app:fontFamily="sans-serif-condensed"
41 app:layout_constraintBottom_toTopOf="@+id/spServidor" 41 app:layout_constraintBottom_toTopOf="@+id/spServidor"
42 app:layout_constraintEnd_toEndOf="parent" 42 app:layout_constraintEnd_toEndOf="parent"
43 app:layout_constraintStart_toStartOf="parent" 43 app:layout_constraintStart_toStartOf="parent"
44 app:layout_constraintTop_toBottomOf="@+id/textView2" /> 44 app:layout_constraintTop_toBottomOf="@+id/textView2" />
45 45
46 <Spinner 46 <Spinner
47 android:id="@+id/spServidor" 47 android:id="@+id/spServidor"
48 style="@android:style/Widget.Holo.Light.Spinner" 48 style="@android:style/Widget.Holo.Light.Spinner"
49 android:layout_width="0dp" 49 android:layout_width="0dp"
50 android:layout_height="wrap_content" 50 android:layout_height="wrap_content"
51 android:elevation="5dp" 51 android:elevation="5dp"
52 52
53 android:textSize="@dimen/NormalText" 53 android:textSize="@dimen/NormalText"
54 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" 54 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor"
55 app:layout_constraintEnd_toStartOf="@+id/btnValidarServidor" 55 app:layout_constraintEnd_toStartOf="@+id/btnValidarServidor"
56 app:layout_constraintHorizontal_chainStyle="packed" 56 app:layout_constraintHorizontal_chainStyle="packed"
57 app:layout_constraintStart_toStartOf="parent" 57 app:layout_constraintStart_toStartOf="parent"
58 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" 58 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor"
59 /> 59 />
60 60
61 <Button 61 <Button
62 android:id="@+id/btnValidarServidor" 62 android:id="@+id/btnValidarServidor"
63 android:layout_width="wrap_content" 63 android:layout_width="wrap_content"
64 android:layout_height="wrap_content" 64 android:layout_height="wrap_content"
65 android:textColor="@android:color/white" 65 android:textColor="@android:color/white"
66 android:padding="10dp" 66 android:padding="10dp"
67 android:background="@drawable/boton_borde_redondeado" 67 android:background="@drawable/boton_borde_redondeado"
68 android:text="@string/btnValidarServidor" 68 android:text="@string/btnValidarServidor"
69 android:textSize="@dimen/NormalText" 69 android:textSize="@dimen/NormalText"
70 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" 70 app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor"
71 app:layout_constraintEnd_toEndOf="parent" 71 app:layout_constraintEnd_toEndOf="parent"
72 app:layout_constraintHorizontal_chainStyle="packed" 72 app:layout_constraintHorizontal_chainStyle="packed"
73 app:layout_constraintStart_toEndOf="@id/spServidor" 73 app:layout_constraintStart_toEndOf="@id/spServidor"
74 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" /> 74 app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" />
75 75
76 <Button 76 <Button
77 android:id="@+id/btnAgregarServidor" 77 android:id="@+id/btnAgregarServidor"
78 android:layout_width="0dp" 78 android:layout_width="0dp"
79 android:layout_height="wrap_content" 79 android:layout_height="wrap_content"
80 android:layout_marginStart="@dimen/MarginBotAgreSer" 80 android:layout_marginStart="@dimen/MarginBotAgreSer"
81 android:layout_marginEnd="@dimen/MarginBotAgreSer" 81 android:layout_marginEnd="@dimen/MarginBotAgreSer"
82 android:text="@string/btnAgregarServidor" 82 android:text="@string/btnAgregarServidor"
83 android:textSize="@dimen/NormalText" 83 android:textSize="@dimen/NormalText"
84 android:textColor="@android:color/white" 84 android:textColor="@android:color/white"
85 android:padding="10dp" 85 android:padding="10dp"
86 android:background="@drawable/boton_borde_redondeado" 86 android:background="@drawable/boton_borde_redondeado"
87 app:layout_constraintBottom_toTopOf="@+id/tvUbicacionCarpetas" 87 app:layout_constraintBottom_toTopOf="@+id/tvUbicacionCarpetas"
88 app:layout_constraintEnd_toEndOf="parent" 88 app:layout_constraintEnd_toEndOf="parent"
89 app:layout_constraintStart_toStartOf="parent" 89 app:layout_constraintStart_toStartOf="parent"
90 app:layout_constraintTop_toBottomOf="@+id/btnValidarServidor" /> 90 app:layout_constraintTop_toBottomOf="@+id/btnValidarServidor" />
91 91
92 92
93 <TextView 93 <TextView
94 android:id="@+id/tvUbicacionCarpetas" 94 android:id="@+id/tvUbicacionCarpetas"
95 android:layout_width="0dp" 95 android:layout_width="0dp"
96 android:layout_height="wrap_content" 96 android:layout_height="wrap_content"
97 97
98 android:layout_marginStart="@dimen/MarginBotAgreSer" 98 android:layout_marginStart="@dimen/MarginBotAgreSer"
99 android:layout_marginTop="@dimen/MarginTopSubTitulos" 99 android:layout_marginTop="@dimen/MarginTopSubTitulos"
100 android:gravity="start" 100 android:gravity="start"
101 android:lines="1" 101 android:lines="1"
102 android:text="@string/tvUbicacionCarpetas" 102 android:text="@string/tvUbicacionCarpetas"
103 android:textColor="@android:color/black" 103 android:textColor="@android:color/black"
104 android:textSize="@dimen/SubTitulos" 104 android:textSize="@dimen/SubTitulos"
105 app:fontFamily="sans-serif-condensed" 105 app:fontFamily="sans-serif-condensed"
106 app:layout_constraintBottom_toTopOf="@+id/ibSearch" 106 app:layout_constraintBottom_toTopOf="@+id/ibSearch"
107 app:layout_constraintEnd_toEndOf="parent" 107 app:layout_constraintEnd_toEndOf="parent"
108 app:layout_constraintStart_toStartOf="parent" 108 app:layout_constraintStart_toStartOf="parent"
109 app:layout_constraintTop_toBottomOf="@+id/btnAgregarServidor" /> 109 app:layout_constraintTop_toBottomOf="@+id/btnAgregarServidor" />
110 110
111 <ImageButton 111 <ImageButton
112 android:id="@+id/ibSearch" 112 android:id="@+id/ibSearch"
113 android:layout_width="36dp" 113 android:layout_width="36dp"
114 android:layout_height="37dp" 114 android:layout_height="37dp"
115 android:layout_margin="10dp" 115 android:layout_margin="10dp"
116 android:src="@drawable/search" 116 android:src="@drawable/search"
117 android:textColor="@android:color/white" 117 android:textColor="@android:color/white"
118 android:padding="10dp" 118 android:padding="10dp"
119 android:background="@drawable/boton_borde_redondeado" 119 android:background="@drawable/boton_borde_redondeado"
120 app:layout_constraintEnd_toStartOf="@+id/etRuta" 120 app:layout_constraintEnd_toStartOf="@+id/etRuta"
121 app:layout_constraintStart_toStartOf="parent" 121 app:layout_constraintStart_toStartOf="parent"
122 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> 122 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" />
123 123
124 <EditText 124 <EditText
125 android:id="@+id/etRuta" 125 android:id="@+id/etRuta"
126 android:layout_width="0dp" 126 android:layout_width="0dp"
127 android:layout_height="wrap_content" 127 android:layout_height="wrap_content"
128 android:layout_marginTop="10dp" 128 android:layout_marginTop="10dp"
129 android:layout_marginEnd="10dp" 129 android:layout_marginEnd="10dp"
130 android:clickable="true" 130 android:clickable="true"
131 android:ems="10" 131 android:ems="10"
132 android:focusable="true" 132 android:focusable="true"
133 android:inputType="textPersonName" 133 android:inputType="textPersonName"
134 android:lines="1" 134 android:lines="1"
135 android:text="" 135 android:text=""
136 android:textSize="@dimen/NormalText" 136 android:textSize="@dimen/NormalText"
137 app:layout_constraintEnd_toEndOf="parent" 137 app:layout_constraintEnd_toEndOf="parent"
138 app:layout_constraintStart_toEndOf="@id/ibSearch" 138 app:layout_constraintStart_toEndOf="@id/ibSearch"
139 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> 139 app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" />
140 140
141 <TextView 141 <TextView
142 android:id="@+id/tvActuFecha" 142 android:id="@+id/tvActuFecha"
143 android:layout_width="0dp" 143 android:layout_width="0dp"
144 android:layout_height="wrap_content" 144 android:layout_height="wrap_content"
145 android:layout_marginStart="@dimen/MarginBotAgreSer" 145 android:layout_marginStart="@dimen/MarginBotAgreSer"
146 android:layout_marginTop="@dimen/MarginTopSubTitulos" 146 android:layout_marginTop="@dimen/MarginTopSubTitulos"
147 android:gravity="start" 147 android:gravity="start"
148 android:lines="1" 148 android:lines="1"
149 android:text="@string/tvTituloArea" 149 android:text="@string/tvTituloArea"
150 android:textColor="@android:color/black" 150 android:textColor="@android:color/black"
151 android:textSize="@dimen/SubTitulos" 151 android:textSize="@dimen/SubTitulos"
152 app:fontFamily="sans-serif-condensed" 152 app:fontFamily="sans-serif-condensed"
153 app:layout_constraintEnd_toEndOf="parent" 153 app:layout_constraintEnd_toEndOf="parent"
154 app:layout_constraintStart_toStartOf="parent" 154 app:layout_constraintStart_toStartOf="parent"
155 app:layout_constraintTop_toBottomOf="@+id/etRuta" /> 155 app:layout_constraintTop_toBottomOf="@+id/etRuta" />
156 156
157 <RadioGroup 157 <RadioGroup
158 android:id="@+id/rgFechaHora" 158 android:id="@+id/rgFechaHora"
159 android:layout_width="0dp" 159 android:layout_width="0dp"
160 android:layout_height="wrap_content" 160 android:layout_height="wrap_content"
161 161
162 android:gravity="center" 162 android:gravity="center"
163 android:orientation="horizontal" 163 android:orientation="horizontal"
164 app:layout_constraintEnd_toEndOf="parent" 164 app:layout_constraintEnd_toEndOf="parent"
165 app:layout_constraintStart_toStartOf="parent" 165 app:layout_constraintStart_toStartOf="parent"
166 app:layout_constraintTop_toBottomOf="@+id/tvActuFecha"> 166 app:layout_constraintTop_toBottomOf="@+id/tvActuFecha">
167 167
168 <RadioButton 168 <RadioButton
169 android:id="@+id/rbVentas" 169 android:id="@+id/rbVentas"
170 android:layout_width="wrap_content" 170 android:layout_width="wrap_content"
171 android:layout_height="wrap_content" 171 android:layout_height="wrap_content"
172 android:layout_margin="5dp" 172 android:layout_margin="5dp"
173 android:checked="true" 173 android:checked="true"
174 android:padding="5dp" 174 android:padding="5dp"
175 android:text="@string/rbVentas" 175 android:text="@string/rbVentas"
176 android:textSize="@dimen/NormalText" /> 176 android:textSize="@dimen/NormalText" />
177 177
178 <RadioButton 178 <RadioButton
179 android:id="@+id/rbDeposito" 179 android:id="@+id/rbDeposito"
180 android:layout_width="wrap_content" 180 android:layout_width="wrap_content"
181 android:layout_height="wrap_content" 181 android:layout_height="wrap_content"
182 android:layout_margin="5dp" 182 android:layout_margin="5dp"
183 android:checked="false" 183 android:checked="false"
184 android:padding="5dp" 184 android:padding="5dp"
185 android:text="@string/rbDeposito" 185 android:text="@string/rbDeposito"
186 android:textSize="@dimen/NormalText" /> 186 android:textSize="@dimen/NormalText" />
187 187
188 </RadioGroup> 188 </RadioGroup>
189 189
190 <TextView 190 <TextView
191 android:id="@+id/tvLosProductos" 191 android:id="@+id/tvLosProductos"
192 android:layout_width="0dp" 192 android:layout_width="0dp"
193 android:layout_height="wrap_content" 193 android:layout_height="wrap_content"
194 194
195 android:layout_marginStart="@dimen/MarginBotAgreSer" 195 android:layout_marginStart="@dimen/MarginBotAgreSer"
196 android:layout_marginEnd="@dimen/MarginTopSubTitulos" 196 android:layout_marginEnd="@dimen/MarginTopSubTitulos"
197 android:gravity="start" 197 android:gravity="start"
198 android:lines="1" 198 android:lines="1"
199 android:text="@string/tvLosProductos" 199 android:text="@string/tvLosProductos"
200 android:textColor="@android:color/black" 200 android:textColor="@android:color/black"
201 android:textSize="@dimen/SubTitulos" 201 android:textSize="@dimen/SubTitulos"
202 app:fontFamily="sans-serif-condensed" 202 app:fontFamily="sans-serif-condensed"
203 app:layout_constraintEnd_toEndOf="parent" 203 app:layout_constraintEnd_toEndOf="parent"
204 app:layout_constraintStart_toStartOf="parent" 204 app:layout_constraintStart_toStartOf="parent"
205 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> 205 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" />
206 206
207 <RadioGroup 207 <RadioGroup
208 android:id="@+id/rgLosProductos" 208 android:id="@+id/rgLosProductos"
209 android:layout_width="0dp" 209 android:layout_width="0dp"
210 android:layout_height="wrap_content" 210 android:layout_height="wrap_content"
211 211
212 android:gravity="center" 212 android:gravity="center"
213 android:orientation="vertical" 213 android:orientation="vertical"
214 app:layout_constraintEnd_toEndOf="parent" 214 app:layout_constraintEnd_toEndOf="parent"
215 app:layout_constraintStart_toStartOf="parent" 215 app:layout_constraintStart_toStartOf="parent"
216 app:layout_constraintTop_toBottomOf="@+id/tvLosProductos"> 216 app:layout_constraintTop_toBottomOf="@+id/tvLosProductos">
217 217
218 <RadioButton 218 <RadioButton
219 android:id="@+id/rbProInclu" 219 android:id="@+id/rbProInclu"
220 android:layout_width="match_parent" 220 android:layout_width="match_parent"
221 android:layout_height="wrap_content" 221 android:layout_height="wrap_content"
222 222
223 android:layout_margin="@dimen/PadingCbyRb" 223 android:layout_margin="@dimen/PadingCbyRb"
224 android:checked="true" 224 android:checked="true"
225 android:padding="@dimen/PadingCbyRb" 225 android:padding="@dimen/PadingCbyRb"
226 android:text="@string/rbProInclu" 226 android:text="@string/rbProInclu"
227 android:textSize="@dimen/NormalText" /> 227 android:textSize="@dimen/NormalText" />
228 228
229 <RadioButton 229 <RadioButton
230 android:id="@+id/rbProNoInclu" 230 android:id="@+id/rbProNoInclu"
231 android:layout_width="match_parent" 231 android:layout_width="match_parent"
232 android:layout_height="wrap_content" 232 android:layout_height="wrap_content"
233 android:layout_margin="@dimen/PadingCbyRb" 233 android:layout_margin="@dimen/PadingCbyRb"
234 android:checked="false" 234 android:checked="false"
235 android:padding="@dimen/PadingCbyRb" 235 android:padding="@dimen/PadingCbyRb"
236 android:text="@string/rbProNoInclu" 236 android:text="@string/rbProNoInclu"
237 android:textSize="@dimen/NormalText" /> 237 android:textSize="@dimen/NormalText" />
238 238
239 </RadioGroup> 239 </RadioGroup>
240 240
241 <CheckBox 241 <CheckBox
242 android:id="@+id/cbHabiLectura" 242 android:id="@+id/cbHabiLectura"
243 android:layout_width="0dp" 243 android:layout_width="0dp"
244 android:layout_height="wrap_content" 244 android:layout_height="wrap_content"
245 android:layout_margin="@dimen/PadingCbyRb" 245 android:layout_margin="@dimen/PadingCbyRb"
246 android:padding="@dimen/PadingCbyRb" 246 android:padding="@dimen/PadingCbyRb"
247 android:text="@string/cbHabiLectura" 247 android:text="@string/cbHabiLectura"
248 android:textSize="@dimen/NormalText" 248 android:textSize="@dimen/NormalText"
249 app:layout_constraintEnd_toEndOf="parent" 249 app:layout_constraintEnd_toEndOf="parent"
250 app:layout_constraintStart_toStartOf="parent" 250 app:layout_constraintStart_toStartOf="parent"
251 app:layout_constraintTop_toBottomOf="@+id/rgLosProductos" /> 251 app:layout_constraintTop_toBottomOf="@+id/rgLosProductos" />
252 252
253 <CheckBox 253 <CheckBox
254 android:id="@+id/cbMostrarStock" 254 android:id="@+id/cbMostrarStock"
255 android:layout_width="0dp" 255 android:layout_width="0dp"
256 android:layout_height="wrap_content" 256 android:layout_height="wrap_content"
257 android:layout_margin="@dimen/PadingCbyRb" 257 android:layout_margin="@dimen/PadingCbyRb"
258 android:padding="@dimen/PadingCbyRb" 258 android:padding="@dimen/PadingCbyRb"
259 android:text="@string/cbMostrarStock" 259 android:text="@string/cbMostrarStock"
260 android:textSize="@dimen/NormalText" 260 android:textSize="@dimen/NormalText"
261 app:layout_constraintEnd_toEndOf="parent" 261 app:layout_constraintEnd_toEndOf="parent"
262 app:layout_constraintStart_toStartOf="parent" 262 app:layout_constraintStart_toStartOf="parent"
263 app:layout_constraintTop_toBottomOf="@+id/cbHabiLectura" /> 263 app:layout_constraintTop_toBottomOf="@+id/cbHabiLectura" />
264 264
265 <TextView 265 <TextView
266 android:id="@+id/tvColumMostrar" 266 android:id="@+id/tvColumMostrar"
267 android:layout_width="0dp" 267 android:layout_width="0dp"
268 android:layout_height="wrap_content" 268 android:layout_height="wrap_content"
269 269
270 android:layout_marginStart="@dimen/MarginBotAgreSer" 270 android:layout_marginStart="@dimen/MarginBotAgreSer"
271 android:layout_marginEnd="@dimen/MarginTopSubTitulos" 271 android:layout_marginEnd="@dimen/MarginTopSubTitulos"
272 android:gravity="start" 272 android:gravity="start"
273 android:lines="1" 273 android:lines="1"
274 android:text="@string/tvColumMostrar" 274 android:text="@string/tvColumMostrar"
275 android:textColor="@android:color/black" 275 android:textColor="@android:color/black"
276 android:textSize="@dimen/SubTitulos" 276 android:textSize="@dimen/SubTitulos"
277 app:fontFamily="sans-serif-condensed" 277 app:fontFamily="sans-serif-condensed"
278 app:layout_constraintEnd_toEndOf="parent" 278 app:layout_constraintEnd_toEndOf="parent"
279 app:layout_constraintStart_toStartOf="parent" 279 app:layout_constraintStart_toStartOf="parent"
280 app:layout_constraintTop_toBottomOf="@+id/cbMostrarStock" /> 280 app:layout_constraintTop_toBottomOf="@+id/cbMostrarStock" />
281 281
282 <RadioGroup 282 <RadioGroup
283 android:id="@+id/rgCodigosMostrar" 283 android:id="@+id/rgCodigosMostrar"
284 android:layout_width="0dp" 284 android:layout_width="0dp"
285 android:layout_height="wrap_content" 285 android:layout_height="wrap_content"
286 286
287 android:gravity="center" 287 android:gravity="center"
288 android:orientation="horizontal" 288 android:orientation="horizontal"
289 app:layout_constraintEnd_toEndOf="parent" 289 app:layout_constraintEnd_toEndOf="parent"
290 app:layout_constraintStart_toStartOf="parent" 290 app:layout_constraintStart_toStartOf="parent"
291 app:layout_constraintTop_toBottomOf="@+id/tvColumMostrar"> 291 app:layout_constraintTop_toBottomOf="@+id/tvColumMostrar">
292 292
293 <RadioButton 293 <RadioButton
294 android:id="@+id/rbCodigoDebo" 294 android:id="@+id/rbCodigoDebo"
295 android:layout_width="wrap_content" 295 android:layout_width="wrap_content"
296 android:layout_height="wrap_content" 296 android:layout_height="wrap_content"
297 android:layout_margin="5dp" 297 android:layout_margin="5dp"
298 android:checked="true" 298 android:checked="true"
299 android:padding="5dp" 299 android:padding="5dp"
300 android:text="@string/rbCodigoDebo" 300 android:text="@string/rbCodigoDebo"
301 android:textSize="@dimen/NormalText" /> 301 android:textSize="@dimen/NormalText" />
302 302
303 <RadioButton 303 <RadioButton
304 android:id="@+id/rbCodigoOrigen" 304 android:id="@+id/rbCodigoOrigen"
305 android:layout_width="wrap_content" 305 android:layout_width="wrap_content"
306 android:layout_height="wrap_content" 306 android:layout_height="wrap_content"
307 android:layout_margin="5dp" 307 android:layout_margin="5dp"
308 android:checked="false" 308 android:checked="false"
309 android:padding="5dp" 309 android:padding="5dp"
310 android:text="@string/rbCodigoOrigen" 310 android:text="@string/rbCodigoOrigen"
311 android:textSize="@dimen/NormalText" /> 311 android:textSize="@dimen/NormalText" />
312 312
313 <RadioButton 313 <RadioButton
314 android:id="@+id/rbCodigoBarras" 314 android:id="@+id/rbCodigoBarras"
315 android:layout_width="wrap_content" 315 android:layout_width="wrap_content"
316 android:layout_height="wrap_content" 316 android:layout_height="wrap_content"
317 android:layout_margin="5dp" 317 android:layout_margin="5dp"
318 android:padding="5dp" 318 android:padding="5dp"
319 android:text="@string/rbCodigoBarras" 319 android:text="@string/rbCodigoBarras"
320 android:textSize="@dimen/NormalText" /> 320 android:textSize="@dimen/NormalText" />
321 </RadioGroup> 321 </RadioGroup>
322 322
323 <CheckBox 323 <CheckBox
324 android:id="@+id/cbMostrarExistencia" 324 android:id="@+id/cbMostrarExistencia"
325 android:layout_width="wrap_content" 325 android:layout_width="wrap_content"
326 android:layout_height="wrap_content" 326 android:layout_height="wrap_content"
327 android:layout_margin="@dimen/PadingCbyRb" 327 android:layout_margin="@dimen/PadingCbyRb"
328 android:padding="@dimen/PadingCbyRb" 328 android:padding="@dimen/PadingCbyRb"
329 android:text="@string/cbMostrarExistencia" 329 android:text="@string/cbMostrarExistencia"
330 android:textSize="@dimen/NormalText" 330 android:textSize="@dimen/NormalText"
331 android:checked="false" 331 android:checked="false"
332 app:layout_constraintEnd_toStartOf="@+id/cbMostrarPrecio" 332 app:layout_constraintEnd_toStartOf="@+id/cbMostrarPrecio"
333 app:layout_constraintStart_toStartOf="parent" 333 app:layout_constraintStart_toStartOf="parent"
334 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> 334 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" />
335 335
336 <CheckBox 336 <CheckBox
337 android:id="@+id/cbMostrarPrecio" 337 android:id="@+id/cbMostrarPrecio"
338 android:layout_width="wrap_content" 338 android:layout_width="wrap_content"
339 android:layout_height="wrap_content" 339 android:layout_height="wrap_content"
340 android:layout_margin="@dimen/PadingCbyRb" 340 android:layout_margin="@dimen/PadingCbyRb"
341 android:padding="@dimen/PadingCbyRb" 341 android:padding="@dimen/PadingCbyRb"
342 android:text="@string/cbMostrarPrecio" 342 android:text="@string/cbMostrarPrecio"
343 android:textSize="@dimen/NormalText" 343 android:textSize="@dimen/NormalText"
344 android:checked="false" 344 android:checked="false"
345 app:layout_constraintEnd_toEndOf="parent" 345 app:layout_constraintEnd_toEndOf="parent"
346 app:layout_constraintStart_toEndOf="@+id/cbMostrarExistencia" 346 app:layout_constraintStart_toEndOf="@+id/cbMostrarExistencia"
347 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> 347 app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" />
348 348
349 <Button 349 <Button
350 android:id="@+id/btnGuardar" 350 android:id="@+id/btnGuardar"
351 android:layout_width="wrap_content" 351 android:layout_width="wrap_content"
352 android:layout_height="wrap_content" 352 android:layout_height="wrap_content"
353 android:text="@string/btnGuardar" 353 android:text="@string/btnGuardar"
354 android:textSize="@dimen/NormalText" 354 android:textSize="@dimen/NormalText"
355 app:layout_constraintEnd_toEndOf="parent" 355 app:layout_constraintEnd_toEndOf="parent"
356 android:textColor="@android:color/white" 356 android:textColor="@android:color/white"
357 android:padding="10dp" 357 android:padding="10dp"
358 android:background="@drawable/boton_borde_redondeado" 358 android:background="@drawable/boton_borde_redondeado"
359 app:layout_constraintStart_toStartOf="parent" 359 app:layout_constraintStart_toStartOf="parent"
360 app:layout_constraintTop_toBottomOf="@+id/cbMostrarPrecio" /> 360 app:layout_constraintTop_toBottomOf="@+id/cbMostrarPrecio" />
361 361
362 </androidx.constraintlayout.widget.ConstraintLayout> 362 </androidx.constraintlayout.widget.ConstraintLayout>
363 363
364 364
app/src/main/res/layout/fragment_descripcion.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 2
3 3
4 <androidx.constraintlayout.widget.ConstraintLayout 4 <androidx.constraintlayout.widget.ConstraintLayout
5 xmlns:android="http://schemas.android.com/apk/res/android" 5 xmlns:android="http://schemas.android.com/apk/res/android"
6 xmlns:app="http://schemas.android.com/apk/res-auto" 6 xmlns:app="http://schemas.android.com/apk/res-auto"
7 xmlns:tools="http://schemas.android.com/tools" 7 xmlns:tools="http://schemas.android.com/tools"
8 android:layout_width="match_parent" 8 android:layout_width="match_parent"
9 android:layout_height="match_parent" 9 android:layout_height="match_parent"
10 tools:context=".ui.descripcionFragment.DescripcionFragment"> 10 tools:context=".UI.descripcionFragment.DescripcionFragment">
11 11
12 12
13 <androidx.recyclerview.widget.RecyclerView 13 <androidx.recyclerview.widget.RecyclerView
14 android:id="@+id/rcDescripcion" 14 android:id="@+id/rcDescripcion"
15 android:layout_width="match_parent" 15 android:layout_width="match_parent"
16 android:layout_height="0dp" 16 android:layout_height="0dp"
17 android:background="@android:color/darker_gray" 17 android:background="@android:color/darker_gray"
18 android:scrollbars="vertical" 18 android:scrollbars="vertical"
19 app:layout_constraintTop_toBottomOf="@id/guideline4" 19 app:layout_constraintTop_toBottomOf="@id/guideline4"
20 app:layout_constraintBottom_toTopOf="@+id/guideline6" 20 app:layout_constraintBottom_toTopOf="@+id/guideline6"
21 app:layout_constraintEnd_toEndOf="parent" 21 app:layout_constraintEnd_toEndOf="parent"
22 app:layout_constraintStart_toStartOf="parent" 22 app:layout_constraintStart_toStartOf="parent"
23 tools:listitem="@layout/item" /> 23 tools:listitem="@layout/item" />
24 24
25 <!-- <Button--> 25 <!-- <Button-->
26 <!-- android:id="@+id/btnSalir"--> 26 <!-- android:id="@+id/btnSalir"-->
27 <!-- android:layout_width="0dp"--> 27 <!-- android:layout_width="0dp"-->
28 <!-- android:layout_height="wrap_content"--> 28 <!-- android:layout_height="wrap_content"-->
29 <!-- android:text="@string/btnCancelar"--> 29 <!-- android:text="@string/btnCancelar"-->
30 <!-- android:textColor="@android:color/white"--> 30 <!-- android:textColor="@android:color/white"-->
31 <!-- android:padding="10dp"--> 31 <!-- android:padding="10dp"-->
32 <!-- android:background="@drawable/boton_borde_redondeado"--> 32 <!-- android:background="@drawable/boton_borde_redondeado"-->
33 <!-- app:layout_constraintBottom_toBottomOf="@+id/guideline6"--> 33 <!-- app:layout_constraintBottom_toBottomOf="@+id/guideline6"-->
34 <!-- app:layout_constraintEnd_toEndOf="parent"--> 34 <!-- app:layout_constraintEnd_toEndOf="parent"-->
35 <!-- app:layout_constraintHorizontal_chainStyle="spread"--> 35 <!-- app:layout_constraintHorizontal_chainStyle="spread"-->
36 <!-- app:layout_constraintStart_toStartOf="parent"--> 36 <!-- app:layout_constraintStart_toStartOf="parent"-->
37 <!-- app:layout_constraintTop_toBottomOf="@+id/rcInventarios" />--> 37 <!-- app:layout_constraintTop_toBottomOf="@+id/rcInventarios" />-->
38 38
39 <androidx.constraintlayout.widget.Guideline 39 <androidx.constraintlayout.widget.Guideline
40 android:id="@+id/guideline4" 40 android:id="@+id/guideline4"
41 android:layout_width="wrap_content" 41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content" 42 android:layout_height="wrap_content"
43 android:orientation="horizontal" 43 android:orientation="horizontal"
44 app:layout_constraintGuide_percent="0.06" /> 44 app:layout_constraintGuide_percent="0.06" />
45 45
46 <androidx.constraintlayout.widget.Guideline 46 <androidx.constraintlayout.widget.Guideline
47 android:id="@+id/guideline5" 47 android:id="@+id/guideline5"
48 android:layout_width="wrap_content" 48 android:layout_width="wrap_content"
49 android:layout_height="wrap_content" 49 android:layout_height="wrap_content"
50 android:orientation="horizontal" 50 android:orientation="horizontal"
51 app:layout_constraintGuide_percent="0.88" /> 51 app:layout_constraintGuide_percent="0.88" />
52 52
53 <androidx.constraintlayout.widget.Guideline 53 <androidx.constraintlayout.widget.Guideline
54 android:id="@+id/guideline6" 54 android:id="@+id/guideline6"
55 android:layout_width="wrap_content" 55 android:layout_width="wrap_content"
56 android:layout_height="wrap_content" 56 android:layout_height="wrap_content"
57 android:orientation="horizontal" 57 android:orientation="horizontal"
58 app:layout_constraintGuide_percent="0.97" /> 58 app:layout_constraintGuide_percent="0.97" />
59 </androidx.constraintlayout.widget.ConstraintLayout> 59 </androidx.constraintlayout.widget.ConstraintLayout>
60 60
app/src/main/res/layout/fragment_inventario.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:id="@+id/frameLayout" 5 android:id="@+id/frameLayout"
6 android:layout_width="match_parent" 6 android:layout_width="match_parent"
7 android:layout_height="match_parent" 7 android:layout_height="match_parent"
8 tools:context=".ui.inventario.InventarioFragment"> 8 tools:context=".UI.inventario.InventarioFragment">
9 9
10 10
11 <androidx.appcompat.widget.AppCompatTextView 11 <androidx.appcompat.widget.AppCompatTextView
12 android:id="@+id/tvTitulo" 12 android:id="@+id/tvTitulo"
13 android:layout_width="match_parent" 13 android:layout_width="match_parent"
14 android:layout_height="90dp" 14 android:layout_height="90dp"
15 android:layout_marginStart="8dp" 15 android:layout_marginStart="8dp"
16 android:layout_marginEnd="8dp" 16 android:layout_marginEnd="8dp"
17 android:autoSizeMaxTextSize="100sp" 17 android:autoSizeMaxTextSize="100sp"
18 android:autoSizeMinTextSize="20sp" 18 android:autoSizeMinTextSize="20sp"
19 android:autoSizeStepGranularity="5sp" 19 android:autoSizeStepGranularity="5sp"
20 android:autoSizeTextType="uniform" 20 android:autoSizeTextType="uniform"
21 android:gravity="center" 21 android:gravity="center"
22 android:lines="1" 22 android:lines="1"
23 android:text="@string/invTitulo" 23 android:text="@string/invTitulo"
24 android:textColor="@color/colorAccent" 24 android:textColor="@color/colorAccent"
25 app:fontFamily="sans-serif-condensed" 25 app:fontFamily="sans-serif-condensed"
26 app:layout_constraintBottom_toTopOf="@id/guideline2" 26 app:layout_constraintBottom_toTopOf="@id/guideline2"
27 app:layout_constraintEnd_toEndOf="parent" 27 app:layout_constraintEnd_toEndOf="parent"
28 app:layout_constraintStart_toStartOf="parent" 28 app:layout_constraintStart_toStartOf="parent"
29 app:layout_constraintTop_toTopOf="@id/guideline" /> 29 app:layout_constraintTop_toTopOf="@id/guideline" />
30 30
31 31
32 <ImageButton 32 <ImageButton
33 android:id="@+id/ivCamara" 33 android:id="@+id/ivCamara"
34 android:layout_width="80dp" 34 android:layout_width="80dp"
35 android:layout_height="80dp" 35 android:layout_height="80dp"
36 android:layout_marginTop="15dp" 36 android:layout_marginTop="15dp"
37 android:clickable="true" 37 android:clickable="true"
38 android:contentDescription="@string/ibBusCB" 38 android:contentDescription="@string/ibBusCB"
39 android:elevation="5dp" 39 android:elevation="5dp"
40 android:background="@drawable/boton_redondo" 40 android:background="@drawable/boton_redondo"
41 android:layout_margin="10dp" 41 android:layout_margin="10dp"
42 android:focusable="false" 42 android:focusable="false"
43 android:scaleType="fitEnd" 43 android:scaleType="fitEnd"
44 app:layout_constraintCircleRadius="40dp" 44 app:layout_constraintCircleRadius="40dp"
45 android:src="@drawable/codbar" 45 android:src="@drawable/codbar"
46 app:layout_constraintBottom_toTopOf="@id/guideline3" 46 app:layout_constraintBottom_toTopOf="@id/guideline3"
47 app:layout_constraintEnd_toStartOf="@+id/etCodigoBarras" 47 app:layout_constraintEnd_toStartOf="@+id/etCodigoBarras"
48 app:layout_constraintHorizontal_bias="0.0" 48 app:layout_constraintHorizontal_bias="0.0"
49 app:layout_constraintStart_toStartOf="parent" 49 app:layout_constraintStart_toStartOf="parent"
50 app:layout_constraintTop_toBottomOf="@+id/guideline2" /> 50 app:layout_constraintTop_toBottomOf="@+id/guideline2" />
51 51
52 <EditText 52 <EditText
53 android:id="@+id/etCodigoBarras" 53 android:id="@+id/etCodigoBarras"
54 android:layout_width="0dp" 54 android:layout_width="0dp"
55 android:layout_height="wrap_content" 55 android:layout_height="wrap_content"
56 android:autofillHints="" 56 android:autofillHints=""
57 android:clickable="true" 57 android:clickable="true"
58 android:ems="10" 58 android:ems="10"
59 android:focusable="true" 59 android:focusable="true"
60 android:hint="@string/ibBusCB" 60 android:hint="@string/ibBusCB"
61 android:inputType="textPersonName" 61 android:inputType="textPersonName"
62 android:lines="1" 62 android:lines="1"
63 android:textAllCaps="true" 63 android:textAllCaps="true"
64 android:textSize="20sp" 64 android:textSize="20sp"
65 app:layout_constraintBottom_toTopOf="@+id/guideline3" 65 app:layout_constraintBottom_toTopOf="@+id/guideline3"
66 app:layout_constraintEnd_toStartOf="@+id/swSumaUno" 66 app:layout_constraintEnd_toStartOf="@+id/swSumaUno"
67 app:layout_constraintHorizontal_bias="0.49" 67 app:layout_constraintHorizontal_bias="0.49"
68 app:layout_constraintHorizontal_chainStyle="packed" 68 app:layout_constraintHorizontal_chainStyle="packed"
69 app:layout_constraintStart_toEndOf="@+id/ivCamara" 69 app:layout_constraintStart_toEndOf="@+id/ivCamara"
70 app:layout_constraintTop_toBottomOf="@+id/guideline2" /> 70 app:layout_constraintTop_toBottomOf="@+id/guideline2" />
71 71
72 72
73 <Switch 73 <Switch
74 android:id="@+id/swSumaUno" 74 android:id="@+id/swSumaUno"
75 android:layout_width="wrap_content" 75 android:layout_width="wrap_content"
76 android:layout_height="wrap_content" 76 android:layout_height="wrap_content"
77 android:text="@string/switch_1" 77 android:text="@string/switch_1"
78 app:layout_constraintBaseline_toBaselineOf="@+id/etCodigoBarras" 78 app:layout_constraintBaseline_toBaselineOf="@+id/etCodigoBarras"
79 app:layout_constraintEnd_toEndOf="parent" 79 app:layout_constraintEnd_toEndOf="parent"
80 app:layout_constraintStart_toEndOf="@id/etCodigoBarras" 80 app:layout_constraintStart_toEndOf="@id/etCodigoBarras"
81 tools:ignore="UseSwitchCompatOrMaterialXml" /> 81 tools:ignore="UseSwitchCompatOrMaterialXml" />
82 82
83 <androidx.recyclerview.widget.RecyclerView 83 <androidx.recyclerview.widget.RecyclerView
84 android:id="@+id/rcInventarios" 84 android:id="@+id/rcInventarios"
85 android:layout_width="match_parent" 85 android:layout_width="match_parent"
86 android:layout_height="0dp" 86 android:layout_height="0dp"
87 android:background="@android:color/darker_gray" 87 android:background="@android:color/darker_gray"
88 app:layout_constraintBottom_toBottomOf="@+id/guideline5" 88 app:layout_constraintBottom_toBottomOf="@+id/guideline5"
89 app:layout_constraintEnd_toEndOf="parent" 89 app:layout_constraintEnd_toEndOf="parent"
90 app:layout_constraintStart_toStartOf="parent" 90 app:layout_constraintStart_toStartOf="parent"
91 app:layout_constraintTop_toBottomOf="@+id/guideline4" 91 app:layout_constraintTop_toBottomOf="@+id/guideline4"
92 tools:listitem="@layout/item" /> 92 tools:listitem="@layout/item" />
93 93
94 94
95 <Button 95 <Button
96 android:id="@+id/btnExportarInv" 96 android:id="@+id/btnExportarInv"
97 android:layout_width="wrap_content" 97 android:layout_width="wrap_content"
98 android:layout_height="wrap_content" 98 android:layout_height="wrap_content"
99 android:text="@string/btnExportarInv" 99 android:text="@string/btnExportarInv"
100 android:textColor="@android:color/white" 100 android:textColor="@android:color/white"
101 android:padding="10dp" 101 android:padding="10dp"
102 android:background="@drawable/boton_borde_redondeado" 102 android:background="@drawable/boton_borde_redondeado"
103 app:layout_constraintBottom_toBottomOf="@+id/guideline6" 103 app:layout_constraintBottom_toBottomOf="@+id/guideline6"
104 app:layout_constraintEnd_toEndOf="parent" 104 app:layout_constraintEnd_toEndOf="parent"
105 app:layout_constraintHorizontal_chainStyle="spread" 105 app:layout_constraintHorizontal_chainStyle="spread"
106 app:layout_constraintStart_toEndOf="@+id/btnBorrarInv" 106 app:layout_constraintStart_toEndOf="@+id/btnBorrarInv"
107 app:layout_constraintTop_toBottomOf="@+id/guideline5" /> 107 app:layout_constraintTop_toBottomOf="@+id/guideline5" />
108 108
109 <Button 109 <Button
110 android:id="@+id/btnBorrarInv" 110 android:id="@+id/btnBorrarInv"
111 android:layout_width="wrap_content" 111 android:layout_width="wrap_content"
112 android:layout_height="wrap_content" 112 android:layout_height="wrap_content"
113 android:text="@string/btnBorrarInv" 113 android:text="@string/btnBorrarInv"
114 app:layout_constraintBottom_toBottomOf="@+id/guideline6" 114 app:layout_constraintBottom_toBottomOf="@+id/guideline6"
115 app:layout_constraintEnd_toStartOf="@id/btnExportarInv" 115 app:layout_constraintEnd_toStartOf="@id/btnExportarInv"
116 app:layout_constraintHorizontal_chainStyle="spread" 116 app:layout_constraintHorizontal_chainStyle="spread"
117 app:layout_constraintStart_toStartOf="parent" 117 app:layout_constraintStart_toStartOf="parent"
118 android:textColor="@android:color/white" 118 android:textColor="@android:color/white"
119 android:padding="10dp" 119 android:padding="10dp"
120 android:background="@drawable/boton_borde_redondeado" 120 android:background="@drawable/boton_borde_redondeado"
121 app:layout_constraintTop_toBottomOf="@+id/guideline5" /> 121 app:layout_constraintTop_toBottomOf="@+id/guideline5" />
122 122
123 <androidx.constraintlayout.widget.Guideline 123 <androidx.constraintlayout.widget.Guideline
124 android:id="@+id/guideline" 124 android:id="@+id/guideline"
125 android:layout_width="wrap_content" 125 android:layout_width="wrap_content"
126 android:layout_height="wrap_content" 126 android:layout_height="wrap_content"
127 android:orientation="horizontal" 127 android:orientation="horizontal"
128 app:layout_constraintGuide_percent="0.02" /> 128 app:layout_constraintGuide_percent="0.02" />
129 129
130 <androidx.constraintlayout.widget.Guideline 130 <androidx.constraintlayout.widget.Guideline
131 android:id="@+id/guideline2" 131 android:id="@+id/guideline2"
132 android:layout_width="wrap_content" 132 android:layout_width="wrap_content"
133 android:layout_height="wrap_content" 133 android:layout_height="wrap_content"
134 android:orientation="horizontal" 134 android:orientation="horizontal"
135 app:layout_constraintGuide_percent="0.12" /> 135 app:layout_constraintGuide_percent="0.12" />
136 136
137 <androidx.constraintlayout.widget.Guideline 137 <androidx.constraintlayout.widget.Guideline
138 android:id="@+id/guideline3" 138 android:id="@+id/guideline3"
139 android:layout_width="wrap_content" 139 android:layout_width="wrap_content"
140 android:layout_height="wrap_content" 140 android:layout_height="wrap_content"
141 android:orientation="horizontal" 141 android:orientation="horizontal"
142 app:layout_constraintGuide_percent="0.29" /> 142 app:layout_constraintGuide_percent="0.29" />
143 143
144 <androidx.constraintlayout.widget.Guideline 144 <androidx.constraintlayout.widget.Guideline
145 android:id="@+id/guideline4" 145 android:id="@+id/guideline4"
146 android:layout_width="wrap_content" 146 android:layout_width="wrap_content"
147 android:layout_height="wrap_content" 147 android:layout_height="wrap_content"
148 android:orientation="horizontal" 148 android:orientation="horizontal"
149 app:layout_constraintGuide_percent="0.35" /> 149 app:layout_constraintGuide_percent="0.35" />
150 150
151 <androidx.constraintlayout.widget.Guideline 151 <androidx.constraintlayout.widget.Guideline
152 android:id="@+id/guideline5" 152 android:id="@+id/guideline5"
153 android:layout_width="wrap_content" 153 android:layout_width="wrap_content"
154 android:layout_height="wrap_content" 154 android:layout_height="wrap_content"
155 android:orientation="horizontal" 155 android:orientation="horizontal"
156 app:layout_constraintGuide_percent="0.88" /> 156 app:layout_constraintGuide_percent="0.88" />
157 157
158 <androidx.constraintlayout.widget.Guideline 158 <androidx.constraintlayout.widget.Guideline
159 android:id="@+id/guideline6" 159 android:id="@+id/guideline6"
160 android:layout_width="wrap_content" 160 android:layout_width="wrap_content"
161 android:layout_height="wrap_content" 161 android:layout_height="wrap_content"
162 android:orientation="horizontal" 162 android:orientation="horizontal"
163 app:layout_constraintGuide_percent="0.97" /> 163 app:layout_constraintGuide_percent="0.97" />
164 164
165 165
166 </androidx.constraintlayout.widget.ConstraintLayout> 166 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_main.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent" 5 android:layout_width="match_parent"
6 android:layout_height="match_parent"> 6 android:layout_height="match_parent">
7 7
8 <androidx.appcompat.widget.AppCompatTextView 8 <androidx.appcompat.widget.AppCompatTextView
9 android:id="@+id/tvInvDinamicos" 9 android:id="@+id/tvInvDinamicos"
10 android:layout_width="match_parent" 10 android:layout_width="match_parent"
11 android:layout_height="90dp" 11 android:layout_height="90dp"
12 android:autoSizeMaxTextSize="150sp" 12 android:autoSizeMaxTextSize="150sp"
13 android:autoSizeMinTextSize="25sp" 13 android:autoSizeMinTextSize="25sp"
14 android:autoSizeStepGranularity="5sp" 14 android:autoSizeStepGranularity="5sp"
15 android:autoSizeTextType="uniform" 15 android:autoSizeTextType="uniform"
16 android:gravity="center" 16 android:gravity="start"
17 android:lines="1"
17 android:padding="10dp" 18 android:padding="10dp"
18 android:text="@string/invDinamicoVenta" 19 android:text="@string/invDinamicoVenta"
19 android:textColor="@color/colorAccent" 20 android:textColor="@color/colorAccent"
20 android:visibility="visible" 21 android:visibility="visible"
21 app:fontFamily="sans-serif" 22 app:fontFamily="sans-serif-condensed"
22 app:layout_constraintEnd_toEndOf="parent" 23 app:layout_constraintEnd_toEndOf="parent"
23 app:layout_constraintStart_toStartOf="parent" 24 app:layout_constraintStart_toStartOf="parent"
24 app:layout_constraintTop_toTopOf="parent" /> 25 app:layout_constraintTop_toTopOf="parent" />
25 26
26 <androidx.appcompat.widget.AppCompatImageButton 27 <androidx.appcompat.widget.AppCompatImageButton
27 android:id="@+id/ivSort19" 28 android:id="@+id/ivSort19"
28 android:layout_width="50dp" 29 android:layout_width="50dp"
29 android:layout_height="50dp" 30 android:layout_height="50dp"
30 android:layout_marginStart="10dp" 31 android:layout_marginStart="10dp"
31 android:padding="5dp" 32 android:padding="5dp"
32 android:src="@drawable/ic_sort19" 33 android:src="@drawable/ic_sort19"
33 android:visibility="gone" 34 android:visibility="gone"
34 app:layout_constraintHorizontal_bias="0.0" 35 app:layout_constraintHorizontal_bias="0.0"
35 app:layout_constraintHorizontal_chainStyle="packed" 36 app:layout_constraintHorizontal_chainStyle="packed"
36 app:layout_constraintStart_toStartOf="parent" 37 app:layout_constraintStart_toStartOf="parent"
37 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" /> 38 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" />
38 39
39 <androidx.appcompat.widget.AppCompatImageButton 40 <androidx.appcompat.widget.AppCompatImageButton
40 android:id="@+id/ivSort91" 41 android:id="@+id/ivSort91"
41 android:layout_width="50dp" 42 android:layout_width="50dp"
42 android:layout_height="50dp" 43 android:layout_height="50dp"
43 android:layout_marginStart="10dp" 44 android:layout_marginStart="10dp"
44 android:padding="5dp" 45 android:padding="5dp"
45 android:src="@drawable/ic_sort91" 46 android:src="@drawable/ic_sort91"
46 android:visibility="gone" 47 android:visibility="gone"
47 app:layout_constraintHorizontal_chainStyle="packed" 48 app:layout_constraintHorizontal_chainStyle="packed"
48 app:layout_constraintStart_toStartOf="parent" 49 app:layout_constraintStart_toStartOf="parent"
49 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" /> 50 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" />
50 51
51 <TextView 52 <TextView
52 android:id="@+id/tvTipo" 53 android:id="@+id/tvTipo"
53 android:layout_width="wrap_content" 54 android:layout_width="wrap_content"
54 android:layout_height="wrap_content" 55 android:layout_height="wrap_content"
55 android:layout_margin="5dp" 56 android:layout_margin="5dp"
56 android:text="Tipo:" 57 android:text="Tipo:"
57 android:layout_marginTop="12dp" 58 android:layout_marginTop="12dp"
58 android:textSize="15sp" 59 android:textSize="15sp"
59 android:visibility="gone" 60 android:visibility="gone"
60 app:layout_constraintBaseline_toBaselineOf="@+id/cbVentas" 61 app:layout_constraintBaseline_toBaselineOf="@+id/cbVentas"
61 app:layout_constraintEnd_toStartOf="@+id/cbVentas" /> 62 app:layout_constraintEnd_toStartOf="@+id/cbVentas" />
62 63
63 <com.google.android.material.checkbox.MaterialCheckBox 64 <com.google.android.material.checkbox.MaterialCheckBox
64 android:id="@+id/cbVentas" 65 android:id="@+id/cbVentas"
65 android:layout_width="wrap_content" 66 android:layout_width="wrap_content"
66 android:layout_height="wrap_content" 67 android:layout_height="wrap_content"
67 android:layout_margin="5dp" 68 android:layout_margin="5dp"
68 android:checked="true" 69 android:checked="true"
69 android:text="Ventas" 70 android:text="Ventas"
70 android:layout_marginTop="12dp" 71 android:layout_marginTop="12dp"
71 android:visibility="gone" 72 android:visibility="gone"
72 app:layout_constraintEnd_toStartOf="@+id/cbDeposito" 73 app:layout_constraintEnd_toStartOf="@+id/cbDeposito"
73 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" /> 74 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" />
74 75
75 <com.google.android.material.checkbox.MaterialCheckBox 76 <com.google.android.material.checkbox.MaterialCheckBox
76 android:id="@+id/cbDeposito" 77 android:id="@+id/cbDeposito"
77 android:layout_width="wrap_content" 78 android:layout_width="wrap_content"
78 android:layout_height="wrap_content" 79 android:layout_height="wrap_content"
79 android:layout_margin="5dp" 80 android:layout_margin="5dp"
80 android:checked="true" 81 android:checked="true"
81 android:text="Deposito" 82 android:text="Deposito"
82 android:layout_marginTop="12dp" 83 android:layout_marginTop="12dp"
83 android:visibility="gone" 84 android:visibility="gone"
84 app:layout_constraintEnd_toEndOf="parent" 85 app:layout_constraintEnd_toEndOf="parent"
85 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" /> 86 app:layout_constraintTop_toBottomOf="@+id/tvInvDinamicos" />
86 87
87 <androidx.recyclerview.widget.RecyclerView 88 <androidx.recyclerview.widget.RecyclerView
88 android:id="@+id/rcInventario" 89 android:id="@+id/rcInventario"
89 android:layout_width="match_parent" 90 android:layout_width="match_parent"
90 android:layout_height="0dp" 91 android:layout_height="0dp"
91 android:background="@android:color/darker_gray" 92 android:background="@android:color/darker_gray"
92 android:scrollbars="vertical" 93 android:scrollbars="vertical"
93 android:visibility="gone" 94 android:visibility="gone"
94 app:layout_constraintEnd_toEndOf="parent" 95 app:layout_constraintEnd_toEndOf="parent"
95 app:layout_constraintStart_toStartOf="parent" 96 app:layout_constraintStart_toStartOf="parent"
96 app:layout_constraintTop_toBottomOf="@id/ivSort19" 97 app:layout_constraintTop_toBottomOf="@id/ivSort19"
97 tools:listitem="@layout/item_principal" /> 98 tools:listitem="@layout/item_principal" />
98 99
99 100
100 <androidx.appcompat.widget.AppCompatTextView 101 <androidx.appcompat.widget.AppCompatTextView
101 android:id="@+id/txtDeposito" 102 android:id="@+id/txtDeposito"
102 android:layout_width="match_parent" 103 android:layout_width="match_parent"
103 android:layout_height="90dp" 104 android:layout_height="90dp"
104 android:autoSizeMaxTextSize="150sp" 105 android:autoSizeMaxTextSize="150sp"
105 android:autoSizeMinTextSize="25sp" 106 android:autoSizeMinTextSize="25sp"
106 android:autoSizeStepGranularity="5sp" 107 android:autoSizeStepGranularity="5sp"
107 android:autoSizeTextType="uniform" 108 android:autoSizeTextType="uniform"
108 android:gravity="start" 109 android:gravity="start"
109 android:lines="1" 110 android:lines="1"
110 android:padding="10dp" 111 android:padding="10dp"
111 android:text="@string/invDinamicoCompra" 112 android:text="@string/invDinamicoCompra"
112 android:textColor="@color/colorAccent" 113 android:textColor="@color/colorAccent"
113 android:visibility="visible" 114 android:visibility="visible"
114 app:fontFamily="sans-serif-condensed" 115 app:fontFamily="sans-serif-condensed"
115 app:layout_constraintBottom_toBottomOf="parent" 116 app:layout_constraintBottom_toBottomOf="parent"
116 app:layout_constraintEnd_toEndOf="parent" 117 app:layout_constraintEnd_toEndOf="parent"
117 app:layout_constraintStart_toStartOf="parent" 118 app:layout_constraintStart_toStartOf="parent"
118 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos" 119 app:layout_constraintTop_toBottomOf="@id/tvInvDinamicos"
119 app:layout_constraintVertical_bias="0.0" /> 120 app:layout_constraintVertical_bias="0.0" />
120 </androidx.constraintlayout.widget.ConstraintLayout> 121 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_servidores.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout 2 <androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent" 6 android:layout_width="match_parent"
7 android:layout_height="match_parent" 7 android:layout_height="match_parent"
8 tools:context=".ui.servidores.ServidoresFragment"> 8 tools:context=".UI.servidores.ServidoresFragment">
9 9
10 <androidx.appcompat.widget.AppCompatTextView 10 <androidx.appcompat.widget.AppCompatTextView
11 android:id="@+id/tvTitutloServer" 11 android:id="@+id/tvTitutloServer"
12 android:layout_width="match_parent" 12 android:layout_width="match_parent"
13 android:layout_height="90dp" 13 android:layout_height="90dp"
14 android:layout_marginStart="8dp" 14 android:layout_marginStart="8dp"
15 android:layout_marginTop="15dp" 15 android:layout_marginTop="15dp"
16 android:layout_marginEnd="8dp" 16 android:layout_marginEnd="8dp"
17 android:autoSizeMaxTextSize="100sp" 17 android:autoSizeMaxTextSize="100sp"
18 android:autoSizeMinTextSize="20sp" 18 android:autoSizeMinTextSize="20sp"
19 android:autoSizeStepGranularity="5sp" 19 android:autoSizeStepGranularity="5sp"
20 android:autoSizeTextType="uniform" 20 android:autoSizeTextType="uniform"
21 android:gravity="center" 21 android:gravity="center"
22 android:lines="1" 22 android:lines="1"
23 android:text="@string/tvTitutloServer" 23 android:text="@string/tvTitutloServer"
24 android:textColor="@color/colorAccent" 24 android:textColor="@color/colorAccent"
25 app:fontFamily="sans-serif-condensed" 25 app:fontFamily="sans-serif-condensed"
26 app:layout_constraintEnd_toEndOf="parent" 26 app:layout_constraintEnd_toEndOf="parent"
27 app:layout_constraintStart_toStartOf="parent" 27 app:layout_constraintStart_toStartOf="parent"
28 app:layout_constraintTop_toTopOf="parent" /> 28 app:layout_constraintTop_toTopOf="parent" />
29 29
30 <TextView 30 <TextView
31 android:id="@+id/tvDirServer" 31 android:id="@+id/tvDirServer"
32 android:layout_width="match_parent" 32 android:layout_width="match_parent"
33 android:layout_height="wrap_content" 33 android:layout_height="wrap_content"
34 android:layout_margin="10dp" 34 android:layout_margin="10dp"
35 android:gravity="start" 35 android:gravity="start"
36 android:lines="1" 36 android:lines="1"
37 android:text="@string/tvDirServer" 37 android:text="@string/tvDirServer"
38 android:textColor="@android:color/black" 38 android:textColor="@android:color/black"
39 android:textSize="@dimen/TitulosMedios" 39 android:textSize="@dimen/TitulosMedios"
40 android:textStyle="bold|italic" 40 android:textStyle="bold|italic"
41 app:fontFamily="sans-serif-condensed" 41 app:fontFamily="sans-serif-condensed"
42 app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor" 42 app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor"
43 app:layout_constraintEnd_toEndOf="parent" 43 app:layout_constraintEnd_toEndOf="parent"
44 app:layout_constraintStart_toStartOf="parent" 44 app:layout_constraintStart_toStartOf="parent"
45 app:layout_constraintTop_toBottomOf="@id/tvTitutloServer" /> 45 app:layout_constraintTop_toBottomOf="@id/tvTitutloServer" />
46 46
47 <EditText 47 <EditText
48 android:id="@+id/etDireccionServidor" 48 android:id="@+id/etDireccionServidor"
49 android:layout_width="0dp" 49 android:layout_width="0dp"
50 android:layout_height="wrap_content" 50 android:layout_height="wrap_content"
51 android:layout_margin="10dp" 51 android:layout_margin="10dp"
52 android:clickable="true" 52 android:clickable="true"
53 android:ems="10" 53 android:ems="10"
54 android:focusable="true" 54 android:focusable="true"
55 android:hint="192.168.10.1:9090" 55 android:hint="192.168.10.1:9090"
56 android:inputType="text" 56 android:inputType="text"
57 android:lines="1" 57 android:lines="1"
58 android:textSize="15sp" 58 android:textSize="15sp"
59 app:layout_constraintEnd_toEndOf="parent" 59 app:layout_constraintEnd_toEndOf="parent"
60 app:layout_constraintStart_toStartOf="parent" 60 app:layout_constraintStart_toStartOf="parent"
61 app:layout_constraintTop_toBottomOf="@id/tvDirServer" /> 61 app:layout_constraintTop_toBottomOf="@id/tvDirServer" />
62 62
63 <TextView 63 <TextView
64 android:id="@+id/tvNomServer" 64 android:id="@+id/tvNomServer"
65 android:layout_width="match_parent" 65 android:layout_width="match_parent"
66 android:layout_height="wrap_content" 66 android:layout_height="wrap_content"
67 android:layout_margin="10dp" 67 android:layout_margin="10dp"
68 android:gravity="start" 68 android:gravity="start"
69 android:lines="1" 69 android:lines="1"
70 android:text="@string/tvNomServer" 70 android:text="@string/tvNomServer"
71 android:textColor="@android:color/black" 71 android:textColor="@android:color/black"
72 android:textSize="@dimen/TitulosMedios" 72 android:textSize="@dimen/TitulosMedios"
73 android:textStyle="bold|italic" 73 android:textStyle="bold|italic"
74 app:fontFamily="sans-serif-condensed" 74 app:fontFamily="sans-serif-condensed"
75 app:layout_constraintEnd_toEndOf="parent" 75 app:layout_constraintEnd_toEndOf="parent"
76 app:layout_constraintStart_toStartOf="parent" 76 app:layout_constraintStart_toStartOf="parent"
77 app:layout_constraintTop_toBottomOf="@id/etDireccionServidor" /> 77 app:layout_constraintTop_toBottomOf="@id/etDireccionServidor" />
78 78
79 <EditText 79 <EditText
80 android:id="@+id/etNombreServidor" 80 android:id="@+id/etNombreServidor"
81 android:layout_width="match_parent" 81 android:layout_width="match_parent"
82 android:layout_height="wrap_content" 82 android:layout_height="wrap_content"
83 android:layout_margin="10dp" 83 android:layout_margin="10dp"
84 android:autofillHints="" 84 android:autofillHints=""
85 android:clickable="true" 85 android:clickable="true"
86 android:ems="10" 86 android:ems="10"
87 android:focusable="true" 87 android:focusable="true"
88 android:inputType="text" 88 android:inputType="text"
89 android:lines="1" 89 android:lines="1"
90 android:hint="Servidor Local" 90 android:hint="Servidor Local"
91 android:textSize="15sp" 91 android:textSize="15sp"
92 app:layout_constraintEnd_toEndOf="parent" 92 app:layout_constraintEnd_toEndOf="parent"
93 app:layout_constraintStart_toStartOf="parent" 93 app:layout_constraintStart_toStartOf="parent"
94 app:layout_constraintTop_toBottomOf="@+id/tvNomServer" /> 94 app:layout_constraintTop_toBottomOf="@+id/tvNomServer" />
95 95
96 96
97 <androidx.recyclerview.widget.RecyclerView 97 <androidx.recyclerview.widget.RecyclerView
98 android:id="@+id/rvServidores" 98 android:id="@+id/rvServidores"
99 android:layout_width="0dp" 99 android:layout_width="match_parent"
100 android:layout_height="0dp" 100 android:layout_height="0dp"
101 android:layout_marginTop="10dp" 101 android:layout_marginTop="10dp"
102 app:layout_goneMarginEnd="10dp" 102 app:layout_goneMarginEnd="10dp"
103 android:background="@android:color/darker_gray" 103 android:background="@android:color/darker_gray"
104 app:layout_constraintBottom_toTopOf="@+id/btnGuardarServidores" 104 app:layout_constraintBottom_toTopOf="@+id/btnGuardarServidores"
105 app:layout_constraintEnd_toEndOf="parent" 105 app:layout_constraintEnd_toEndOf="parent"
106 app:layout_constraintStart_toStartOf="parent" 106 app:layout_constraintStart_toStartOf="parent"
107 app:layout_constraintTop_toBottomOf="@+id/etNombreServidor" 107 app:layout_constraintTop_toBottomOf="@+id/etNombreServidor"
108 tools:listitem="@layout/item_servidores" /> 108 tools:listitem="@layout/item_servidores" />
109 109
110 <Button 110 <Button
111 android:id="@+id/btnGuardarServidores" 111 android:id="@+id/btnGuardarServidores"
112 android:layout_width="0dp" 112 android:layout_width="0dp"
113 android:layout_height="wrap_content" 113 android:layout_height="wrap_content"
114 android:layout_marginTop="10dp" 114 android:layout_marginTop="10dp"
115 android:layout_marginEnd="10dp" 115 android:layout_marginEnd="10dp"
116 android:text="@string/btnGuardarServidores" 116 android:text="@string/btnGuardarServidores"
117 android:textColor="@android:color/white" 117 android:textColor="@android:color/white"
118 android:padding="10dp" 118 android:padding="10dp"
119 android:background="@drawable/boton_borde_redondeado" 119 android:background="@drawable/boton_borde_redondeado"
120 app:layout_constraintTop_toBottomOf="@+id/rvServidores" 120 app:layout_constraintTop_toBottomOf="@+id/rvServidores"
121 app:layout_constraintEnd_toEndOf="parent" 121 app:layout_constraintEnd_toEndOf="parent"
122 app:layout_constraintStart_toStartOf="parent" 122 app:layout_constraintStart_toStartOf="parent"
123 app:layout_constraintBottom_toBottomOf="parent"/> 123 app:layout_constraintBottom_toBottomOf="parent"/>
124 124
125 </androidx.constraintlayout.widget.ConstraintLayout> 125 </androidx.constraintlayout.widget.ConstraintLayout>
126 126
app/src/main/res/layout/ingresar_cantidad.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.cardview.widget.CardView 2 <androidx.cardview.widget.CardView
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent" 6 android:layout_width="match_parent"
7 android:layout_height="wrap_content" 7 android:layout_height="wrap_content"
8 app:cardCornerRadius="10dp" 8 app:cardCornerRadius="10dp"
9 app:cardElevation="5dp" 9 app:cardElevation="5dp"
10 10
11 tools:ignore="PrivateResource"> 11 tools:ignore="PrivateResource">
12 <!-- android:background="@drawable/md_transparent"--> 12 <!-- android:background="@drawable/md_transparent"-->
13 13
14 <androidx.constraintlayout.widget.ConstraintLayout 14 <androidx.constraintlayout.widget.ConstraintLayout
15 android:layout_width="match_parent" 15 android:layout_width="match_parent"
16 android:layout_height="match_parent"> 16 android:layout_height="match_parent">
17 17
18 <LinearLayout 18 <LinearLayout
19 android:id="@+id/barraSuperior" 19 android:id="@+id/barraSuperior"
20 android:layout_width="0dp" 20 android:layout_width="0dp"
21 android:layout_height="wrap_content" 21 android:layout_height="wrap_content"
22 android:background="@color/colorPrimaryDark" 22 android:background="@color/colorPrimaryDark"
23 android:orientation="horizontal" 23 android:orientation="horizontal"
24 app:layout_constraintLeft_toLeftOf="parent" 24 app:layout_constraintLeft_toLeftOf="parent"
25 app:layout_constraintRight_toRightOf="parent" 25 app:layout_constraintRight_toRightOf="parent"
26 app:layout_constraintTop_toTopOf="parent" 26 app:layout_constraintTop_toTopOf="parent"
27 app:layout_constraintTop_toBottomOf="@+id/lySegundo"> 27 app:layout_constraintTop_toBottomOf="@+id/lySegundo">
28 28
29 <androidx.appcompat.widget.AppCompatTextView 29 <androidx.appcompat.widget.AppCompatTextView
30 android:id="@+id/tvTitulo" 30 android:id="@+id/tvTitulo"
31 android:layout_width="0dp" 31 android:layout_width="0dp"
32 android:layout_height="wrap_content" 32 android:layout_height="wrap_content"
33 android:layout_margin="10dp" 33 android:layout_margin="10dp"
34 android:layout_marginStart="5dp" 34 android:layout_marginStart="5dp"
35 android:layout_marginTop="10dp" 35 android:layout_marginTop="10dp"
36 android:layout_weight="1" 36 android:layout_weight="1"
37 android:text="@string/adv" 37 android:text="@string/adv"
38 android:textAlignment="center" 38 android:textAlignment="center"
39 android:textColor="@android:color/white" 39 android:textColor="@android:color/white"
40 android:textSize="25sp" 40 android:textSize="25sp" />
41 android:textStyle="bold" />
42 </LinearLayout> 41 </LinearLayout>
43 42
44 43
45 <LinearLayout 44 <LinearLayout
46 android:id="@+id/lySegundo" 45 android:id="@+id/lySegundo"
47 android:layout_width="match_parent" 46 android:layout_width="match_parent"
48 android:layout_height="wrap_content" 47 android:layout_height="wrap_content"
49 android:orientation="vertical" 48 android:orientation="vertical"
50 android:padding="12dp" 49 android:padding="12dp"
51 app:layout_constraintLeft_toLeftOf="parent" 50 app:layout_constraintLeft_toLeftOf="parent"
52 app:layout_constraintRight_toRightOf="parent" 51 app:layout_constraintRight_toRightOf="parent"
53 app:layout_constraintTop_toBottomOf="@id/barraSuperior"> 52 app:layout_constraintTop_toBottomOf="@id/barraSuperior">
54 53
55 54
56 55
57 <EditText 56 <EditText
58 android:id="@+id/etCantidad" 57 android:id="@+id/etCantidad"
59 android:layout_width="match_parent" 58 android:layout_width="match_parent"
60 android:layout_height="wrap_content" 59 android:layout_height="wrap_content"
61 android:ems="10" 60 android:ems="10"
62 android:gravity="center" 61 android:gravity="center"
63 android:textSize="20sp" 62 android:textSize="20sp"
64 android:focusable="true" 63 android:focusable="true"
65 android:clickable="true" 64 android:clickable="true"
66 android:inputType="numberDecimal" 65 android:inputType="numberDecimal"
67 android:text="" /> 66 android:text="" />
68 67
69 68
70 <androidx.appcompat.widget.AppCompatButton 69 <androidx.appcompat.widget.AppCompatButton
71 android:id="@+id/btnAceptar" 70 android:id="@+id/btnAceptar"
72 android:layout_width="match_parent" 71 android:layout_width="match_parent"
73 android:layout_height="wrap_content" 72 android:layout_height="wrap_content"
74 android:layout_margin="10dp" 73 android:layout_margin="10dp"
75 android:layout_marginBottom="20dp" 74 android:layout_marginBottom="20dp"
76 android:clickable="true" 75 android:clickable="true"
77 android:focusable="true" 76 android:focusable="true"
78 android:textColor="@android:color/white" 77 android:textColor="@android:color/white"
79 android:padding="10dp" 78 android:padding="10dp"
80 android:background="@drawable/boton_borde_redondeado" 79 android:background="@drawable/boton_borde_redondeado"
81 android:text="@string/btnConfirmar" 80 android:text="@string/btnConfirmar"
82 android:textAlignment="center" 81 android:textAlignment="center"
83 android:textSize="20sp" 82 android:textSize="20sp"
84 android:textStyle="bold" 83 android:textStyle="bold"
85 app:cardBackgroundColor="@android:color/darker_gray" 84 app:cardBackgroundColor="@android:color/darker_gray"
86 app:cardUseCompatPadding="true" /> 85 app:cardUseCompatPadding="true" />
87 86
88 87
89 </LinearLayout> 88 </LinearLayout>
90 89
91 90
92 </androidx.constraintlayout.widget.ConstraintLayout> 91 </androidx.constraintlayout.widget.ConstraintLayout>
93 </androidx.cardview.widget.CardView> 92 </androidx.cardview.widget.CardView>
app/src/main/res/layout/login_dialog.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 android:layout_width="match_parent" 4 android:layout_width="match_parent"
5 android:layout_height="wrap_content" 5 android:layout_height="wrap_content"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 android:padding="10dp"> 7 android:padding="10dp">
8 8
9 <TextView 9 <TextView
10 android:id="@+id/dialogNameEt" 10 android:id="@+id/dialogNameEt"
11 android:layout_width="wrap_content" 11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content" 12 android:layout_height="wrap_content"
13 android:layout_margin="5dp" 13 android:layout_margin="5dp"
14 android:text="Cantidad actual:" 14 android:text="Cantidad actual:"
15 android:textSize="20sp" 15 android:textSize="20sp"
16 app:layout_constraintEnd_toStartOf="@id/tvCantInicial" 16 app:layout_constraintEnd_toStartOf="@id/tvCantInicial"
17 app:layout_constraintHorizontal_bias="0.0" 17 app:layout_constraintHorizontal_bias="0.0"
18 app:layout_constraintHorizontal_chainStyle="packed" 18 app:layout_constraintHorizontal_chainStyle="packed"
19 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintStart_toStartOf="parent"
20 app:layout_constraintTop_toTopOf="parent" /> 20 app:layout_constraintTop_toTopOf="parent" />
21 21
22 <TextView 22 <TextView
23 android:id="@+id/tvCantInicial" 23 android:id="@+id/tvCantInicial"
24 android:layout_width="wrap_content" 24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content" 25 android:layout_height="wrap_content"
26 android:layout_margin="5dp" 26 android:layout_margin="5dp"
27 android:text="" 27 android:text=""
28 android:textSize="20sp" 28 android:textSize="20sp"
29 app:layout_constraintBaseline_toBaselineOf="@+id/dialogNameEt" 29 app:layout_constraintBaseline_toBaselineOf="@+id/dialogNameEt"
30 app:layout_constraintEnd_toEndOf="parent" 30 app:layout_constraintEnd_toEndOf="parent"
31 app:layout_constraintHorizontal_chainStyle="packed" 31 app:layout_constraintHorizontal_chainStyle="packed"
32 app:layout_constraintStart_toEndOf="@id/dialogNameEt" /> 32 app:layout_constraintStart_toEndOf="@id/dialogNameEt" />
33 33
34 <TextView 34 <TextView
35 android:id="@+id/tvgenerico" 35 android:id="@+id/tvgenerico"
36 android:layout_width="wrap_content" 36 android:layout_width="wrap_content"
37 android:layout_height="wrap_content" 37 android:layout_height="wrap_content"
38 android:layout_margin="5dp" 38 android:layout_margin="5dp"
39 android:text="Nueva cantidad:" 39 android:text="Nueva cantidad:"
40 android:textSize="20sp" 40 android:textSize="20sp"
41 app:layout_constraintStart_toStartOf="parent" 41 app:layout_constraintStart_toStartOf="parent"
42 app:layout_constraintTop_toBottomOf="@+id/tvCantInicial" /> 42 app:layout_constraintTop_toBottomOf="@+id/tvCantInicial" />
43 43
44 <EditText 44 <EditText
45 android:id="@+id/tvNuevaCantidad" 45 android:id="@+id/tvNuevaCantidad"
46 android:layout_width="0dp" 46 android:layout_width="0dp"
47 android:layout_height="wrap_content" 47 android:layout_height="wrap_content"
48 android:autofillHints="" 48 android:autofillHints=""
49 android:hint="" 49 android:hint=""
50 android:focusable="true"
51 android:clickable="true"
50 android:inputType="numberDecimal" 52 android:inputType="numberDecimal"
51 app:layout_constraintBaseline_toBaselineOf="@+id/tvgenerico" 53 app:layout_constraintBaseline_toBaselineOf="@+id/tvgenerico"
52 app:layout_constraintEnd_toEndOf="parent" 54 app:layout_constraintEnd_toEndOf="parent"
53 app:layout_constraintStart_toEndOf="@id/tvgenerico" /> 55 app:layout_constraintStart_toEndOf="@id/tvgenerico" />
54 56
55 <TextView 57 <TextView
56 android:id="@+id/tvgenerico2" 58 android:id="@+id/tvgenerico2"
57 android:layout_width="wrap_content" 59 android:layout_width="wrap_content"
58 android:layout_height="wrap_content" 60 android:layout_height="wrap_content"
59 android:layout_margin="5dp" 61 android:layout_margin="5dp"
60 android:gravity="center" 62 android:gravity="center"
61 android:text="@string/tvSeleccion" 63 android:text="@string/tvSeleccion"
62 android:textSize="20sp" 64 android:textSize="20sp"
63 android:visibility="gone" 65 android:visibility="gone"
64 app:layout_constraintStart_toStartOf="parent" 66 app:layout_constraintStart_toStartOf="parent"
65 app:layout_constraintTop_toBottomOf="@+id/tvgenerico" /> 67 app:layout_constraintTop_toBottomOf="@+id/tvgenerico" />
66 68
67 <RadioGroup 69 <RadioGroup
68 android:id="@+id/rgFechaHora" 70 android:id="@+id/rgFechaHora"
69 android:layout_width="wrap_content" 71 android:layout_width="wrap_content"
70 android:layout_height="wrap_content" 72 android:layout_height="wrap_content"
71 android:gravity="start" 73 android:gravity="start"
72 android:orientation="horizontal" 74 android:orientation="horizontal"
73 app:layout_constraintEnd_toEndOf="parent" 75 app:layout_constraintEnd_toEndOf="parent"
74 app:layout_constraintHorizontal_bias="0.0" 76 app:layout_constraintHorizontal_bias="0.0"
75 app:layout_constraintStart_toStartOf="parent" 77 app:layout_constraintStart_toStartOf="parent"
76 app:layout_constraintTop_toBottomOf="@+id/tvgenerico2"> 78 app:layout_constraintTop_toBottomOf="@+id/tvgenerico2">
77 79
78 <RadioButton 80 <RadioButton
79 android:id="@+id/rbSumar" 81 android:id="@+id/rbSumar"
80 android:layout_width="wrap_content" 82 android:layout_width="wrap_content"
81 android:layout_height="wrap_content" 83 android:layout_height="wrap_content"
82 android:layout_margin="5dp" 84 android:layout_margin="5dp"
83 android:checked="false" 85 android:checked="false"
84 86
85 android:text="@string/rbSumar" 87 android:text="@string/rbSumar"
86 android:textSize="@dimen/text_size2" /> 88 android:textSize="@dimen/text_size2" />
87 89
88 <RadioButton 90 <RadioButton
89 android:id="@+id/rbMdodificar" 91 android:id="@+id/rbMdodificar"
90 android:layout_width="wrap_content" 92 android:layout_width="wrap_content"
91 android:layout_height="wrap_content" 93 android:layout_height="wrap_content"
92 android:layout_margin="5dp" 94 android:layout_margin="5dp"
93 android:checked="false" 95 android:checked="false"
94 android:text="@string/rbModificar" 96 android:text="@string/rbModificar"
95 android:textSize="@dimen/text_size2" /> 97 android:textSize="@dimen/text_size2" />
96 98
97 <RadioButton 99 <RadioButton
98 android:id="@+id/rbRestar" 100 android:id="@+id/rbRestar"
99 android:layout_width="wrap_content" 101 android:layout_width="wrap_content"
100 android:layout_height="wrap_content" 102 android:layout_height="wrap_content"
101 android:layout_margin="5dp" 103 android:layout_margin="5dp"
102 android:checked="false" 104 android:checked="false"
103 android:padding="5dp" 105 android:padding="5dp"
104 android:text="@string/rbRestar" 106 android:text="@string/rbRestar"
105 android:textSize="@dimen/text_size2" /> 107 android:textSize="@dimen/text_size2" />
106 108
107 </RadioGroup> 109 </RadioGroup>
108 110
109 <TextView 111 <TextView
110 android:id="@+id/tvgenerico3" 112 android:id="@+id/tvgenerico3"
111 android:layout_width="wrap_content" 113 android:layout_width="wrap_content"
112 android:layout_height="wrap_content" 114 android:layout_height="wrap_content"
113 android:layout_margin="5dp" 115 android:layout_margin="5dp"
114 android:gravity="center" 116 android:gravity="center"
115 android:text="@string/tvResultado" 117 android:text="@string/tvResultado"
116 android:textSize="20sp" 118 android:textSize="20sp"
117 app:layout_constraintEnd_toEndOf="parent" 119 app:layout_constraintEnd_toEndOf="parent"
118 app:layout_constraintHorizontal_bias="0.0" 120 app:layout_constraintHorizontal_bias="0.0"
119 app:layout_constraintStart_toStartOf="parent" 121 app:layout_constraintStart_toStartOf="parent"
120 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> 122 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" />
121 123
122 <TextView 124 <TextView
123 android:id="@+id/tvResultado" 125 android:id="@+id/tvResultado"
124 android:layout_width="wrap_content" 126 android:layout_width="wrap_content"
125 android:layout_height="wrap_content" 127 android:layout_height="wrap_content"
126 android:layout_margin="5dp" 128 android:layout_margin="5dp"
127 android:gravity="center" 129 android:gravity="center"
128 android:text="" 130 android:text=""
129 android:textSize="20sp" 131 android:textSize="20sp"
130 app:layout_constraintEnd_toEndOf="parent" 132 app:layout_constraintEnd_toEndOf="parent"
131 app:layout_constraintHorizontal_bias="0.0" 133 app:layout_constraintHorizontal_bias="0.0"
132 app:layout_constraintStart_toEndOf="@+id/tvgenerico3" 134 app:layout_constraintStart_toEndOf="@+id/tvgenerico3"
133 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> 135 app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" />
134 136
135 <LinearLayout 137 <LinearLayout
136 android:layout_width="match_parent" 138 android:layout_width="match_parent"
137 android:layout_height="wrap_content" 139 android:layout_height="wrap_content"
138 android:gravity="center" 140 android:gravity="center"
139 android:orientation="horizontal" 141 android:orientation="horizontal"
140 app:layout_constraintEnd_toEndOf="parent" 142 app:layout_constraintEnd_toEndOf="parent"
141 app:layout_constraintStart_toStartOf="parent" 143 app:layout_constraintStart_toStartOf="parent"
142 app:layout_constraintTop_toBottomOf="@+id/tvResultado"> 144 app:layout_constraintTop_toBottomOf="@+id/tvResultado">
143 145
144 <Button 146 <Button
145 android:id="@+id/btnAceptar" 147 android:id="@+id/btnAceptar"
146 style="@style/Base.Widget.AppCompat.Button.Colored" 148 style="@style/Base.Widget.AppCompat.Button.Colored"
147 android:layout_width="wrap_content" 149 android:layout_width="wrap_content"
148 android:layout_height="wrap_content" 150 android:layout_height="wrap_content"
149 android:layout_margin="5dp" 151 android:layout_margin="5dp"
150 android:background="@drawable/boton_borde_redondeado" 152 android:background="@drawable/boton_borde_redondeado"
151 android:padding="20dp" 153 android:padding="20dp"
152 android:text="@string/btnOk" 154 android:text="@string/btnOk"
153 android:textColor="@android:color/white" /> 155 android:textColor="@android:color/white" />
154 156
155 <Button 157 <Button
156 android:id="@+id/dialogCancelBtn" 158 android:id="@+id/dialogCancelBtn"
157 style="@style/Base.Widget.AppCompat.Button.Colored" 159 style="@style/Base.Widget.AppCompat.Button.Colored"
158 android:layout_width="wrap_content" 160 android:layout_width="wrap_content"
159 android:layout_height="wrap_content" 161 android:layout_height="wrap_content"
160 android:layout_margin="5dp" 162 android:layout_margin="5dp"
161 android:background="@drawable/boton_borde_redondeado" 163 android:background="@drawable/boton_borde_redondeado"
162 android:padding="20dp" 164 android:padding="20dp"
163 android:text="@string/btnCancelar" 165 android:text="@string/btnCancelar"
164 android:textColor="@android:color/white" /> 166 android:textColor="@android:color/white" />
165 </LinearLayout> 167 </LinearLayout>
166 168
167 </androidx.constraintlayout.widget.ConstraintLayout> 169 </androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/navigation/mobile_navigation.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <navigation xmlns:android="http://schemas.android.com/apk/res/android" 2 <navigation xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools" 4 xmlns:tools="http://schemas.android.com/tools"
5 android:id="@+id/mobile_navigation" 5 android:id="@+id/mobile_navigation"
6 app:startDestination="@id/mainFragment2"> 6 app:startDestination="@id/mainFragment2">
7 7
8 <activity 8 <activity
9 android:id="@+id/mainActivity" 9 android:id="@+id/mainActivity"
10 android:name="com.focasoftware.deboinventariov20.ui.MainActivity" 10 android:name="com.focasoftware.deboinventariov20.UI.MainActivity"
11 android:label="app_bar_main" 11 android:label="app_bar_main"
12 tools:layout="@layout/app_bar_main" /> 12 tools:layout="@layout/app_bar_main" />
13
13 <fragment 14 <fragment
14 android:id="@+id/mainFragment2" 15 android:id="@+id/mainFragment2"
15 android:name="com.focasoftware.deboinventariov20.ui.main.MainFragment" 16 android:name="com.focasoftware.deboinventariov20.UI.main.MainFragment"
16 android:label="Principal" 17 android:label="Principal"
17 tools:layout="@layout/fragment_main" > 18 tools:layout="@layout/fragment_main" >
18 <action 19 <action
19 android:id="@+id/action_mainFragment2_to_configuracionFragment" 20 android:id="@+id/action_mainFragment2_to_configuracionFragment"
20 app:destination="@id/configuracionFragment" 21 app:destination="@id/configuracionFragment"
21 app:popEnterAnim="@anim/slide_in_left" 22 app:popEnterAnim="@anim/slide_in_left"
22 app:popExitAnim="@anim/slide_out_right" 23 app:popExitAnim="@anim/slide_out_right"
23 app:enterAnim="@anim/slide_in_right" 24 app:enterAnim="@anim/slide_in_right"
24 app:exitAnim="@anim/slide_out_left" /> 25 app:exitAnim="@anim/slide_out_left" />
25 <action 26 <action
26 android:id="@+id/action_mainFragment2_to_actuaMaestrosFragment" 27 android:id="@+id/action_mainFragment2_to_actuaMaestrosFragment"
27 app:destination="@id/actuaMaestrosFragment" 28 app:destination="@id/actuaMaestrosFragment"
28 app:popEnterAnim="@anim/slide_in_left" 29 app:popEnterAnim="@anim/slide_in_left"
29 app:popExitAnim="@anim/slide_out_right" 30 app:popExitAnim="@anim/slide_out_right"
30 app:enterAnim="@anim/slide_in_right" 31 app:enterAnim="@anim/slide_in_right"
31 app:exitAnim="@anim/slide_out_left" /> 32 app:exitAnim="@anim/slide_out_left" />
32 <action 33 <action
33 android:id="@+id/action_mainFragment2_to_inventarioFragment" 34 android:id="@+id/action_mainFragment2_to_inventarioFragment"
34 app:destination="@id/inventarioFragment" 35 app:destination="@id/inventarioFragment"
35 app:popEnterAnim="@anim/slide_in_left" 36 app:popEnterAnim="@anim/slide_in_left"
36 app:popExitAnim="@anim/slide_out_right" 37 app:popExitAnim="@anim/slide_out_right"
37 app:enterAnim="@anim/slide_in_right" 38 app:enterAnim="@anim/slide_in_right"
38 app:exitAnim="@anim/slide_out_left" /> 39 app:exitAnim="@anim/slide_out_left" />
39 </fragment> 40 </fragment>
41
40 <fragment 42 <fragment
41 android:id="@+id/actuaMaestrosFragment" 43 android:id="@+id/actuaMaestrosFragment"
42 android:name="com.focasoftware.deboinventariov20.ui.actualizacionMaestros.ActuaMaestrosFragment" 44 android:name="com.focasoftware.deboinventariov20.UI.actualizacionMaestros.ActuaMaestrosFragment"
43 android:label="Importaciones Varias" 45 android:label="Importaciones Varias"
44 tools:layout="@layout/fragment_actua_maestros" /> 46 tools:layout="@layout/fragment_actua_maestros" />
45 47
46 <fragment
47 android:id="@+id/servidoresFragment"
48 android:name="com.focasoftware.deboinventariov20.ui.servidores.ServidoresFragment"
49 android:label="Alta Servidores"
50 tools:layout="@layout/fragment_servidores">
51 <action
52 android:id="@+id/action_servidoresFragment_to_configuracionFragment"
53 app:destination="@id/configuracionFragment"
54 app:popUpTo="@id/servidoresFragment"
55 app:popUpToInclusive="true" />
56 </fragment>
57 48
58 <fragment 49 <fragment
59 android:id="@+id/inventarioFragment" 50 android:id="@+id/inventarioFragment"
60 android:name="com.focasoftware.deboinventariov20.ui.inventario.InventarioFragment" 51 android:name="com.focasoftware.deboinventariov20.UI.inventario.InventarioFragment"
61 android:label="Inventario Dinamico" 52 android:label="Inventario Dinamico"
62 tools:layout="@layout/fragment_inventario" > 53 tools:layout="@layout/fragment_inventario" >
63 <action 54 <action
64 android:id="@+id/action_inventarioFragment_to_descripcionFragment" 55 android:id="@+id/action_inventarioFragment_to_descripcionFragment"
65 app:destination="@id/descripcionFragment" 56 app:destination="@id/descripcionFragment"
66 app:popEnterAnim="@anim/slide_in_left" 57 app:popEnterAnim="@anim/slide_in_left"
67 app:popExitAnim="@anim/slide_out_right" 58 app:popExitAnim="@anim/slide_out_right"
68 app:enterAnim="@anim/slide_in_right" 59 app:enterAnim="@anim/slide_in_right"
69 app:exitAnim="@anim/slide_out_left" 60 app:exitAnim="@anim/slide_out_left"
70 /> 61 />
71 <action 62 <action
72 android:id="@+id/action_inventarioFragment_to_mainFragment2" 63 android:id="@+id/action_inventarioFragment_to_mainFragment2"
73 app:destination="@id/mainFragment2" 64 app:destination="@id/mainFragment2"
74 app:popEnterAnim="@anim/slide_in_left" 65 app:popEnterAnim="@anim/slide_in_left"
75 app:popExitAnim="@anim/slide_out_right" 66 app:popExitAnim="@anim/slide_out_right"
76 app:enterAnim="@anim/slide_in_right" 67 app:enterAnim="@anim/slide_in_right"
77 app:exitAnim="@anim/slide_out_left"/> 68 app:exitAnim="@anim/slide_out_left"/>
78 <action 69 <action
79 android:id="@+id/action_inventarioFragment_to_detalleArtFragment" 70 android:id="@+id/action_inventarioFragment_to_detalleArtFragment"
80 app:destination="@id/detalleArtFragment" /> 71 app:destination="@id/detalleArtFragment" />
81
82 </fragment>
83 <fragment
84 android:id="@+id/configuracionFragment"
85 android:name="com.focasoftware.deboinventariov20.ui.configuracion.ConfiguracionFragment"
86 android:label="Configuraciones"
87 tools:layout="@layout/fragment_configuracion" >
88 <action
89 android:id="@+id/action_configuracionFragment_to_servidoresFragment"
90 app:destination="@id/servidoresFragment"
91 app:popEnterAnim="@anim/slide_in_left"
92 app:popExitAnim="@anim/slide_out_right"
93 app:enterAnim="@anim/slide_in_right"
94 app:exitAnim="@anim/slide_out_left"
95 app:popUpTo="@id/configuracionFragment"
96 app:popUpToInclusive="true" />
97 <action
98 android:id="@+id/action_configuracionFragment_to_mainFragment2"
99 app:destination="@id/mainFragment2" />
100 </fragment> 72 </fragment>
73
101 <fragment 74 <fragment
102 android:id="@+id/descripcionFragment" 75 android:id="@+id/descripcionFragment"
103 android:name="com.focasoftware.deboinventariov20.ui.descripcionFragment.DescripcionFragment" 76 android:name="com.focasoftware.deboinventariov20.UI.descripcionFragment.DescripcionFragment"
104 android:label="Productos Encontrados"> 77 android:label="Productos Encontrados">
105
106 <action 78 <action
107 android:id="@+id/action_descripcionFragment_to_inventarioFragment" 79 android:id="@+id/action_descripcionFragment_to_inventarioFragment"
108 app:destination="@id/inventarioFragment" 80 app:destination="@id/inventarioFragment"
109 app:popEnterAnim="@anim/slide_in_left" 81 app:popEnterAnim="@anim/slide_in_left"
110 app:popExitAnim="@anim/slide_out_right" 82 app:popExitAnim="@anim/slide_out_right"
111 app:enterAnim="@anim/slide_in_right" 83 app:enterAnim="@anim/slide_in_right"
112 app:exitAnim="@anim/slide_out_left" 84 app:exitAnim="@anim/slide_out_left" />
113 />
114 </fragment> 85 </fragment>
115 <dialog
116 android:id="@+id/dialogNoEncontrado"
117 android:name="com.focasoftware.deboinventariov20.ui.util.Base.dialogos.DialogNoEncontrado"
118 android:label="DialogNoEncontrado" />
119 <fragment
120 android:id="@+id/dialogoLogin"
121 android:name="com.focasoftware.deboinventariov20.ui.util.Base.dialogos.DialogoLogin"
122 android:label="dialogoLogin" />
123 <fragment
124 android:id="@+id/singleChoiceAlertDialog"
125 android:name="com.focasoftware.deboinventariov20.ui.util.Base.dialogos.SingleChoiceAlertDialog"
126 android:label="SingleChoiceAlertDialog" />
127 86
128 <fragment 87 <fragment
129 android:id="@+id/detalleArtFragment" 88 android:id="@+id/detalleArtFragment"
130 android:name="com.focasoftware.deboinventariov20.ui.detalleProducto.DetalleArtFragment" 89 android:name="com.focasoftware.deboinventariov20.UI.detalleProducto.DetalleArtFragment"
131 android:label="Detalle Articulo" 90 android:label="Detalle Articulo"
132 tools:layout="@layout/fragment_detalle_art"> 91 tools:layout="@layout/fragment_detalle_art">
133 <action 92 <action
134 android:id="@+id/action_detalleArtFragment_to_inventarioFragment" 93 android:id="@+id/action_detalleArtFragment_to_inventarioFragment"
1 // Top-level build file where you can add configuration options common to all sub-projects/modules. 1 // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 buildscript { 2 buildscript {
3 ext.kotlin_version = '1.4.0' 3 ext.kotlin_version = '1.4.0'
4 repositories { 4 repositories {
5 google() 5 google()
6 jcenter() 6 jcenter()
7 } 7 }
8 dependencies { 8 dependencies {
9 classpath "com.android.tools.build:gradle:4.0.1" 9 classpath "com.android.tools.build:gradle:4.0.1"
10 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 10 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 11
12 // NOTE: Do not place your application dependencies here; they belong 12 // NOTE: Do not place your application dependencies here; they belong
13 // in the individual module build.gradle files 13 // in the individual module build.gradle files
14 } 14 }
15 } 15 }
16 16
17 allprojects { 17 allprojects {
18 repositories { 18 repositories {
19 google() 19 google()
20 jcenter() 20 jcenter()
21 maven {
22 url 'http://www.idescout.com/maven/repo/'
23 name 'IDEScout, Inc.'
24 }
21 } 25 }
22 } 26 }
23 27
24 task clean(type: Delete) { 28 task clean(type: Delete) {
25 delete rootProject.buildDir 29 delete rootProject.buildDir
26 } 30 }