ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/Trunk/MCP_Console.py
Revision: 462
Committed: Tue Oct 1 19:53:25 2013 UTC (12 years, 5 months ago) by nino.borges
Content type: text/x-python
Original Path: Python/NinoCode/Active_prgs/MCP/MCP_Console.py
File size: 36093 byte(s)
Log Message:
Added support in view edit for the case path style setting and added a popup that forces you to choose if you select an IDS system. Also added ability to have the MCP create the data folders.

File Contents

# User Rev Content
1 ninoborges 8 """
2    
3     MCP_Console
4    
5     Created by
6     Emanuel Borges
7     08.28.2010
8    
9     This will be the interface to add, edit and archive cases.
10    
11     Should this work as one large GUI and you pick the below or read from argv and let you
12     just call it with what you want, making these three look like separate apps.
13    
14    
15     """
16    
17     import MCP_Lib,os,shutil,ConcordanceHelperTools, time,directorySize2
18    
19     class MainConsole:
20     def __init__(self):
21     ## Gather the case list
22    
23     print "connecting to matter tracking access db..."
24     ## Production version
25     self.accessDB = MCP_Lib.AccessDBConnection(r"\\chiads01\app\DS_CaseTrack\TPM_CaseTracking.mdb")
26 nino.borges 459 self.fullTPMMatrix = self.accessDB.RetrieveAllTPMMatrix()
27 ninoborges 8 self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo()
28 nino.borges 189 #responsibleCases,casesDir = MCP_Lib.GetCaseList('',self.accessDB)
29 nino.borges 462 myCases, myActiveCases,officeCases, allCases,casesDir, casePathStyleMatrix= MCP_Lib.GetCaseList('',self.accessDB)
30 ninoborges 8
31     ## Testing version
32     #self.accessDB = MCP_Lib.AccessDBConnection(r"W:\Manny\testing\TPM_CaseTracking.mdb")
33     #responsibleCases,casesDir = MCP_Lib.GetCaseList(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP",self.accessDB)
34     #self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP")
35    
36     print "connected to DB."
37    
38 nino.borges 189 self.responsibleCasesList = myCases
39 ninoborges 8 self.casesDir = casesDir
40    
41    
42     def AddNewCase(self, caseName, clientMatter, chargable = False, reviewPlatform = "", responsibleProcessingVendor = "",
43     responsibleScanningVendor = "",responsibleHostingVendor = ""):
44 nino.borges 343 ## TODO: add a verification somehwere where it verify that the proposed name does not include characters that cant be used in a folder name.
45 ninoborges 8 ## Add the local folders The GUI should test that the clm is 10 digits and has hyphen.
46     template = os.path.join(self.casesDir,'_Template_')
47     new = os.path.join(self.casesDir, caseName + '_(%s)'%clientMatter)
48     if os.path.exists(new):
49     print "ERROR: This case already exists!!"
50     else:
51     #print template
52     #print new
53     os.mkdir(new)
54     for file in os.listdir(template):
55     shutil.copy2(os.path.join(template,file),new)
56     ## Check the H drive for the supplemental folders and the matter folder, only if they select Concordance.
57     self.SetCaseNameAndCLM(caseName,clientMatter)
58     self.AddCaseToAccessDB(caseName,clientMatter)
59    
60 nino.borges 343 def ChangeCaseName(self,caseName,newCaseName,newClientMatter):
61     """This method will allow for editing the case name and number. This is different than settign the casename"""
62     ## Test that there is only one entry for this clm in access.
63     clientMatter = caseName.split("_(")[1]
64     clientMatter = clientMatter[:-1]
65     clientMatter = clientMatter.replace('-','.')
66     accessCaseName = self.accessDB.GetCaseName(clientMatter)
67     localCasesPath = self.casesDir
68     if os.path.exists(os.path.join(localCasesPath,caseName)):
69     if clientMatter != newClientMatter:
70     if newCaseName != caseName.split("_("):
71     ## change both
72     self.accessDB.UpdateCaseName(clientMatter,newCaseName)
73     self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
74     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%newClientMatter.replace(".","-")))
75     else:
76     ## change just client matter
77     self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
78     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,caseName + '_(%s)'%newClientMatter.replace(".","-")))
79     elif newCaseName != caseName.split("_("):
80     ## change just the casename
81     self.accessDB.UpdateCaseName(clientMatter,newCaseName)
82     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%clientMatter.replace(".","-")))
83    
84     ## verify that the proposed name does not include characters that cant be used in a folder name.
85     ## Change the name and or clm in access
86    
87     ## Test that it was changed in access
88     ## change the folder name in cases.
89     else:
90     ## That case dir cant be found. They can't change other's casenames.
91     err = 1
92    
93    
94     def AddCaseToAccessDB(self, caseName):
95 ninoborges 8 ## First test to see if it's already in the DB.
96     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
97     clientMatter = clientMatter.replace("-",".")
98     if clientMatter in fullClientMatterList:
99     print "This client matter already exists in the database. Skipping."
100     else:
101     print "New client matter. Adding."
102     self.accessDB.AddNewCase(caseName, clientMatter, self.tPMName,self.tPMID,responsibleOffice = self.tPMOffice)
103     print "Added!"
104    
105     def EditCaseData(self,caseName,chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice, caseStatus):
106     clientMatter = caseName.split("_(")[1]
107     clientMatter = clientMatter[:-1]
108     clientMatter = clientMatter.replace('-','.')
109 nino.borges 459 empID = self.fullTPMMatrix[respTPM][0]
110 ninoborges 8 self.accessDB.UpdateChargable(clientMatter,chargeableBool)
111     self.accessDB.UpdateResponsibleAttorney(clientMatter,respAttorney)
112     self.accessDB.UpdateResponsibleParalegal(clientMatter,respParalegal)
113     self.accessDB.UpdateReviewPlatform(clientMatter,revPlatform)
114 nino.borges 459 self.accessDB.UpdateResponsibleTPM(clientMatter,respTPM,empID)
115 ninoborges 8 self.accessDB.UpdatePrimaryOffice(clientMatter,respOffice)
116     self.accessDB.UpdateResponsibleVendors(clientMatter,respVendorTpl)
117     self.accessDB.UpdateCaseStatus(clientMatter, caseStatus)
118    
119     def GetCaseData(self, caseName):
120     #use this to get the data on the selected case, to populate your GUI
121     clientMatter = caseName.split("_(")[1]
122     clientMatter = clientMatter[:-1]
123     clientMatter = clientMatter.replace('-','.')
124     chargeableBool = self.accessDB.GetChargable(clientMatter)
125     respAttorney = self.accessDB.GetResponsibleAttorney(clientMatter)
126     respParalegal = self.accessDB.GetResponsibleParalegal(clientMatter)
127     respVendorTpl = self.accessDB.GetResponsibleVendorTpl(clientMatter)
128     revPlatform = self.accessDB.GetReviewPlatform(clientMatter)
129     respTPM = self.accessDB.GetResponsibleTPM(clientMatter)
130     respOffice = self.accessDB.GetPrimaryOffice(clientMatter)
131     caseStatus = self.accessDB.GetCaseStatus(clientMatter)
132 nino.borges 303 uploadCost = self.accessDB.GetUploadCostRate(clientMatter)
133     storageCost = self.accessDB.GetStorageCostRate(clientMatter)
134 nino.borges 321 disclosureLetterBool,disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
135     return (chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice,caseStatus,uploadCost,storageCost,disclosureLetterBool)
136    
137     def GetPossibleProducedToEntities(self,caseName):
138     """Returns the possible produced to entities for a case"""
139     clientMatter = caseName.split("_(")[1]
140     clientMatter = clientMatter[:-1]
141     clientMatter = clientMatter.replace('-','.')
142     possibleProducedToEntities = self.accessDB.GetProducedToEntities(clientMatter)
143     return possibleProducedToEntities
144    
145     def GetPossibleProdReqByNames(self,caseName):
146     """Returns the possible requested by names for a case"""
147     clientMatter = caseName.split("_(")[1]
148     clientMatter = clientMatter[:-1]
149     clientMatter = clientMatter.replace('-','.')
150     possibleProdReqByNames = self.accessDB.GetProductionRequestedByNames(clientMatter)
151     return possibleProdReqByNames
152 ninoborges 8
153 nino.borges 321
154     def AddProductionEntry(self, CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword):
155 ninoborges 8 """This method adds one production entry to the case."""
156     errRpt = True
157     if CLM:
158     if prodID:
159 nino.borges 321 if prodProcessedDate:
160 ninoborges 8 if begBates:
161     if endBates:
162     if prodDocCount:
163     if prodPageCount:
164     if prodNotes:
165 nino.borges 321 self.accessDB.UpdateProductionDetail(CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword)
166 ninoborges 8 errRpt = False
167     return errRpt
168    
169     def AddDataUpload(self,CLM, reviewPlatform, reportSize):
170     """This method will add one case upload."""
171     ## TODO: one day change it so that copy up requst calls this instead
172     ## of it being internal to that prog.
173     epoch = str(int(time.time()))
174     self.accessDB.UpdateCaseUpload(CLM,reviewPlatform,{epoch:(time.strftime('%m/%d/%Y'),reportSize)})
175    
176     def RemoveDataUpload(self,CLM,UEPOCH):
177     """This method calls DeleteCaseUpload and removes just one case upload. """
178     err = self.accessDB.DeleteCaseUpload(CLM,UEPOCH)
179     if err:
180     print "ERROR: An Error occured and this value was not removed!"
181     else:
182     print "%s Removed"% UEPOCH
183    
184     def GetUploadData(self, caseName):
185     # Used to get upload data, on the selected case, to populate the upload dialog
186     clientMatter = caseName.split("_(")[1]
187     clientMatter = clientMatter[:-1]
188     clientMatter = clientMatter.replace('-','.')
189     uploadList = self.accessDB.RetrieveUploadsByCLM(clientMatter)
190     return uploadList
191    
192     def GetProductionData(self,caseName):
193     clientMatter = caseName.split("_(")[1]
194     clientMatter = clientMatter[:-1]
195     clientMatter = clientMatter.replace('-','.')
196 nino.borges 321 productionMatrix = self.accessDB.RetrieveProductionsByCLM(clientMatter)
197     return productionMatrix
198 ninoborges 8
199     def GetProductionTotal(self,productionList):
200     """Using the above productionList, this returns the total docs and pages produced"""
201     pgCountTotal = 0
202     docCountTotal = 0
203     for i in productionList:
204 nino.borges 321 pageCount = i[-7]
205     docCount = i[-8]
206 ninoborges 8 if 'None' in pageCount:
207     pass
208     else:
209     #print pageCount
210     pgCountTotal = pgCountTotal+int(pageCount)
211     if 'None' in pageCount:
212     pass
213     else:
214     #print docCount
215     docCountTotal = docCountTotal+int(docCount)
216     return pgCountTotal,docCountTotal
217    
218     def ExportProductionDataToExcel(self,CaseName,pathToCSV):
219     """Exports the production data to a csv file"""
220     productionList = self.GetProductionData(CaseName)
221     #print productionList
222     outputFile = open(pathToCSV,'w')
223 nino.borges 321 outputFile.write('Production ID,Production Completed Date,Production Sent Date,Start Bates,End Bates,Document Count,Page Count,Produced To,Requested By,Production Media,ProductionMediaPassword,Production Sources,Notes\n')
224 ninoborges 8 for i in productionList:
225     for x in i:
226     outputFile.write(x+",")
227     outputFile.write("\n")
228     outputFile.close()
229    
230     def GetUploadTotal(self,uploadList):
231     """ Using the above uploadList, this will return the total uploaded """
232     count = 0.
233     for i in uploadList:
234     size = i[-1]
235    
236     if 'None' in size:
237     pass
238     else:
239     rawSize = directorySize2.prettyToUnpretty_Filesize(size)
240     count = count + rawSize
241     prettySizeFinal = directorySize2.pretty_filesize2(count)
242     return prettySizeFinal
243    
244 nino.borges 459
245     def TransferCase(self, caseName, sourceTpm, targetTpm):
246     """Transfers case to another TPM"""
247     sourceTPMOffice = self.fullTPMMatrix[sourceTpm][1]
248     targetTPMOffice = self.fullTPMMatrix[targetTpm][1]
249     ## Confirm that folder exists
250     print "Confirming folder exists..."
251     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(sourceTPMOffice)
252     targetCaseFolderLocation = MCP_Lib.GetOtherCaseFolder(targetTPMOffice)
253    
254     clientMatter = caseName.split("_(")[1]
255     clientMatter = clientMatter[:-1]
256     if "." in clientMatter:
257     clientMatter = clientMatter.replace('.','-')
258     folderMatrix = {}
259     #caseFolderLocation = os.path.join(caseFolderLocation,case)
260     err = False
261     if caseFolderLocation:
262     if os.path.exists(caseFolderLocation):
263     for f in os.listdir(caseFolderLocation):
264     if "_(" in f:
265     folderClientMatter = f.split("_(")[1]
266     folderClientMatter = folderClientMatter[:-1]
267     folderMatrix[folderClientMatter] = f
268     try:
269     folderName = folderMatrix[clientMatter]
270     fullCasePath = os.path.join(caseFolderLocation, folderName)
271     except:
272     err = True
273     else:
274     err = True
275     else:
276     print "A case folder for this case was not found."
277     err = True
278     if err:
279     print "Transfer aborted"
280     else:
281     if os.path.exists(fullCasePath):
282     print "Folder exists."
283     ## Check that target folder does not exist, support same office transfer.
284     print "Testing target directory..."
285     fullTargetCasePath = os.path.join(targetCaseFolderLocation, folderName)
286     if sourceTPMOffice == targetTPMOffice:
287     ## This is an inter office transfer, which is okay but dont move folders
288     pass
289     else:
290     if os.path.exists(fullTargetCasePath):
291     err = True
292     print "This case folder already exists."
293     else:
294     ## First move the folder to the new location
295     try:
296     print "moving %s to %s"%(fullCasePath,fullTargetCasePath)
297     shutil.move(fullCasePath,fullTargetCasePath)
298     except:
299     err = True
300     print "The move failed!"
301     if os.path.exists(fullTargetCasePath):
302     print "Case folder moved."
303     if err:
304     print "Transfer aborted"
305     else:
306     ## Change the info in Access
307     #print targetTPMOffice
308     self.accessDB.UpdatePrimaryOffice(clientMatter.replace('-','.'),targetTPMOffice)
309     self.accessDB.UpdateResponsibleTPM(clientMatter.replace('-','.'),targetTpm,self.fullTPMMatrix[targetTpm][0])
310     print "Case Transfer Completed."
311     return err
312    
313 ninoborges 8 def MakeCaseDormant(self, caseAndCLM):
314     """Moves the case to the Dormant folder"""
315 nino.borges 456 ## Dont do this, just hide from your view. Once archived, move off share.
316 ninoborges 8 print "Making %s case dormant..."
317     os.rename(os.path.join(self.casesDir,caseAndCLM),os.path.join(self.casesDir,os.path.join('zzzz_dormant_', caseAndCLM)))
318     print "Case has been archived."
319    
320    
321 nino.borges 158 def ViewCaseNotes(self,caseName,office):
322     """Trys to open the case notes file,in the case folder, for the active case, regardless who owns it."""
323     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
324     clientMatter = caseName.split("_(")[1]
325     clientMatter = clientMatter[:-1]
326     if "." in clientMatter:
327     clientMatter = clientMatter.replace('.','-')
328     folderMatrix = {}
329     #caseFolderLocation = os.path.join(caseFolderLocation,case)
330     err = False
331     if caseFolderLocation:
332     if os.path.exists(caseFolderLocation):
333     for f in os.listdir(caseFolderLocation):
334     if "_(" in f:
335     folderClientMatter = f.split("_(")[1]
336     folderClientMatter = folderClientMatter[:-1]
337     folderMatrix[folderClientMatter] = f
338     try:
339     folderName = folderMatrix[clientMatter]
340     os.startfile(os.path.join(caseFolderLocation, folderName)+"/Gen_Notes.txt")
341     except:
342     err = True
343     else:
344     err = True
345     else:
346     print "A case folder for this case was not found."
347     err = True
348     return err
349    
350     def ViewProdSpec(self,caseName,office):
351     """Trys to open the prod spec file,in the case folder, for the active case, regardless who owns it."""
352     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
353     clientMatter = caseName.split("_(")[1]
354     clientMatter = clientMatter[:-1]
355     if "." in clientMatter:
356     clientMatter = clientMatter.replace('.','-')
357     folderMatrix = {}
358     #caseFolderLocation = os.path.join(caseFolderLocation,case)
359     err = False
360     if caseFolderLocation:
361     if os.path.exists(caseFolderLocation):
362     for f in os.listdir(caseFolderLocation):
363     if "_(" in f:
364     folderClientMatter = f.split("_(")[1]
365     folderClientMatter = folderClientMatter[:-1]
366     folderMatrix[folderClientMatter] = f
367     try:
368     folderName = folderMatrix[clientMatter]
369     os.startfile(os.path.join(caseFolderLocation, folderName+"/Production_Spec.txt"))
370     except:
371     err = True
372     else:
373     err = True
374     else:
375     print "A case folder for this case was not found."
376     err = True
377     return err
378    
379 nino.borges 462 def CreateCasePathStyleFolders(self,platform,clientMatter):
380     """This method will create the "new style" case folder paths for a case on IDS"""
381     ## make sure that the CLMFolderPath exists, else make the folders needed to make it exist.
382     CLMFolderPath = ConcordanceHelperTools.ParseClientMatterRemote(clientMatter)
383    
384     expeObj = MCP_Lib.ExpeDatConnection(platform)
385    
386     ## Test each folder, and subfolder, on the new style spec to see if they are there, if not create them.
387     newStyleFolderPathList = [
388     "Productions\\MWE_Client\\Backloads",
389     "Productions\\MWE_Client\\Exports",
390     "Productions\\Other_Party",
391     "Review_Docs\\Hard_Copy",
392     "Review_Docs\\Loose",
393     "Review_Docs\\Processed_Data",
394     "Review_Docs\\TIFs",
395     "Working"
396     ]
397     for pathPart in newStyleFolderPathList:
398     newLocation = os.path.join(CLMFolderPath,pathPart)
399     pathExists = expeObj.TestPath(newLocation)
400     tempPath = newLocation
401     pathRemainingList = []
402     while pathExists == False:
403     tempPath, tempPart = os.path.split(tempPath)
404     pathRemainingList.append(tempPart)
405     pathExists = expeObj.TestPath(tempPath)
406     if pathRemainingList:
407     pathRemainingList.reverse()
408     #print pathRemainingList
409     for pathPiece in pathRemainingList:
410     tempPath = os.path.join(tempPath,pathPiece)
411     expeObj.CreateNewPath(tempPath)
412    
413    
414 nino.borges 321 def CreateProductionReport(self,caseName,office):
415     """Creates a html production report in the altMediaPath folder"""
416     err = False
417 nino.borges 261 clientMatter = caseName.split("_(")[1]
418     clientMatter = clientMatter[:-1]
419     clientMatter = clientMatter.replace('-','.')
420     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
421 nino.borges 321 productionMatrix = self.GetProductionData(caseName)
422     if os.path.exists(os.path.join(altMediaPath,'__MCP_Data')):
423     pass
424     else:
425     os.mkdir(os.path.join(altMediaPath,'__MCP_Data'))
426     reportFile = open(os.path.join(os.path.join(altMediaPath,'__MCP_Data'),'MCP_Production_Report.html'),'w')
427     reportFile.write('''<html>\n<head>\n <title>MCP: %s Production Report</title>\n <style type="text/css" media="screen">\n\n'''%caseName)
428     reportFile.write(r'''div#Rsidebar {
429     float: right;
430     width: 20%;
431     }
432     div#Lsidebar {
433     float: left;
434     width:20%;
435     height:380px;
436     }
437    
438     </style>''')
439     reportFile.write('''
440     <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
441     <meta name="author" content="Emanuel Borges">
442     </head>
443     <body>
444    
445     <h3><br>
446     </h3>
447     <center><h2>%s Production Report</h2></center>'''%caseName)
448     reportFile.write(r'''<center><hr width="40%"></center>''')
449     for k in productionMatrix.keys():
450     productionList = productionMatrix[k]
451     reportFile.write("<h4>%s Productions</h3>" % k)
452     reportFile.write('''<center><table border=1 cellspacing=0 cellpadding=5 width=1800>\n<tr><th>Production ID</th><th>Processed Date</th><th>Sent Date</th><th>Start Bates</th><th>End Bates</th><th>Document Count</th><th>Page Count</th><th>Requested By</th><th>Production Media</th><th>Media Password</th><th>Production Sources</th><th>Notes</th></tr>''')
453     for i in productionList:
454     reportFile.write("<tr>")
455     count = 1
456     for x in i:
457     if count == 8:
458     count = count + 1
459     else:
460     reportFile.write("<td>%s</td>"%x)
461     count = count +1
462     reportFile.write("</tr>")
463    
464     reportFile.write('</table></center>\n\n')
465     reportFile.write('''<div id="footer">
466     <p><span>&copy; 2012 <a href="#">Emanuel Borges</a></span><br />
467     Website automatically generated by the MCP program.</p></div>''')
468     reportFile.write('</body></html>\n')
469     reportFile.close()
470     return err
471    
472     def OpenAlternateMediaFolder(self,caseName,office,testOnly=False):
473     """Trys to open the Alternate media folder, for the active case, regardless who owns it.
474     If testOnly is set to True, it will only test that it exists and not open the folder."""
475     clientMatter = caseName.split("_(")[1]
476     clientMatter = clientMatter[:-1]
477     clientMatter = clientMatter.replace('-','.')
478     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
479 nino.borges 261 err = False
480     if altMediaPath:
481     if os.path.exists(altMediaPath):
482 nino.borges 321 if testOnly:
483     pass
484     else:
485     os.startfile(altMediaPath)
486 nino.borges 261 else:
487     print "An alternate media folder for this case was not found."
488     err = True
489     else:
490     err = True
491     return err
492 nino.borges 265
493     def SetAlternateMediaFolder(self,caseName,altMediaPath):
494     """Sets the alternate Media Path"""
495     clientMatter = caseName.split("_(")[1]
496     clientMatter = clientMatter[:-1]
497     clientMatter = clientMatter.replace('-','.')
498     self.accessDB.UpdateAlternateMediaPath(clientMatter,altMediaPath)
499 nino.borges 261
500 nino.borges 269 def GetVendorFolders(self,caseName):
501 nino.borges 271 """Returns the current list of vendor folders, for one case"""
502 nino.borges 269 clientMatter = caseName.split("_(")[1]
503     clientMatter = clientMatter[:-1]
504     clientMatter = clientMatter.replace('-','.')
505     vendorFolders = self.accessDB.GetVendorFolderPath(clientMatter)
506 nino.borges 271 #print "V%s "%vendorFolders
507 nino.borges 269 return vendorFolders
508 nino.borges 271
509     def SetVendorFolders(self,caseName, vendorFolders):
510     """Sets the Vendor Folder"""
511     clientMatter = caseName.split("_(")[1]
512     clientMatter = clientMatter[:-1]
513     clientMatter = clientMatter.replace('-','.')
514     self.accessDB.UpdateVendorFolderPath(clientMatter,vendorFolders)
515    
516     def GetVendorFoldersList(self):
517     """Returns a list of all vendorFolders"""
518     ## Change this so that it actually grabs the current ones from ln. Dont know if I should grab from a table in access.
519     vendorFolderList = ["None"]
520     for n in range(1,61):
521     vendorFolderList.append("mwevendor%0*d"%(2,n))
522     return vendorFolderList
523 nino.borges 321
524     def GetDisclosureLetterData(self,caseName):
525     """Returns the the bool of if a case has a disclosure letter and if so the path."""
526     clientMatter = caseName.split("_(")[1]
527     clientMatter = clientMatter[:-1]
528     clientMatter = clientMatter.replace('-','.')
529     disclosureLetterSet, disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
530     return disclosureLetterSet, disclosureLetterPath
531    
532     def SetDisclosureLetterData(self,caseName,disclosureLetterPath):
533     """Sets the disclosure letter path and checks it as true in the database"""
534     clientMatter = caseName.split("_(")[1]
535     clientMatter = clientMatter[:-1]
536     clientMatter = clientMatter.replace('-','.')
537     self.accessDB.UpdateDisclosureLetter(clientMatter,True,disclosureLetterPath)
538    
539 nino.borges 262 def GetCasePathsData(self,caseName, office):
540     clientMatter = caseName.split("_(")[1]
541     clientMatter = clientMatter[:-1]
542     clientMatter = clientMatter.replace('-','.')
543     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
544     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
545     caseFolderLocation = os.path.join(caseFolderLocation,caseName)
546     return altMediaPath, caseFolderLocation
547 nino.borges 303
548     def SetUploadAndStorageCosts(self, caseName,uploadCost,storageCost):
549     clientMatter = caseName.split("_(")[1]
550     clientMatter = clientMatter[:-1]
551     clientMatter = clientMatter.replace('-','.')
552 nino.borges 321 if uploadCost:
553     self.accessDB.UpdateUploadCostRate(clientMatter,uploadCost)
554     if storageCost:
555     self.accessDB.UpdateStorageCostRate(clientMatter,storageCost)
556 nino.borges 262
557 ninoborges 8 def OpenCaseFolder(self,caseName,office):
558     """Trys to open the case folder for the active case, regardless who owns it."""
559     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
560     clientMatter = caseName.split("_(")[1]
561     clientMatter = clientMatter[:-1]
562     if "." in clientMatter:
563     clientMatter = clientMatter.replace('.','-')
564     folderMatrix = {}
565     #caseFolderLocation = os.path.join(caseFolderLocation,case)
566     err = False
567     if caseFolderLocation:
568     if os.path.exists(caseFolderLocation):
569     for f in os.listdir(caseFolderLocation):
570     if "_(" in f:
571     folderClientMatter = f.split("_(")[1]
572     folderClientMatter = folderClientMatter[:-1]
573     folderMatrix[folderClientMatter] = f
574     try:
575     folderName = folderMatrix[clientMatter]
576     os.startfile(os.path.join(caseFolderLocation, folderName))
577     except:
578     err = True
579     else:
580     err = True
581     else:
582     print "A case folder for this case was not found."
583     err = True
584     return err
585    
586    
587     def SetCaseNameAndCLM(self, newCaseName, newClientMatterNumber):
588     """Used when setting up a new case. Should have both or nothing"""
589     self.caseName = newCaseName
590     self.clientMatter = newClientMatterNumber
591     #print self.clientMatter
592    
593     def SetChargableCase(self, chargBool):
594     """sets or clears the chargable case settings"""
595     pass
596     def SetResponsibleVendor(self, vendorInfo):
597     """Sets the vendor name that is responsible for the case"""
598     pass
599     def SetReviewPlatform(self, reviewPlatform):
600     """Sets the review platform chosen for this case"""
601     if reviewPlatform == "Concordance":
602     print "Concordance selected. Creating DIS directories..."
603     hDrivePath = ConcordanceHelperTools.ParseClientMatter(self.clientMatter)
604     os.mkdir(hDrivePath)
605     print "Matter folder created."
606     os.mkdir(os.path.join(hDrivePath,'Match'))
607     os.mkdir(os.path.join(hDrivePath,'Tag_Databases'))
608     print "Supplemental folders created."
609     print "DIS directories done!"
610    
611 nino.borges 321 def GetDatabaseList(self,caseName):
612     """Returns the list of databases in the database list file."""
613     return ['datbase1','database2','database3']
614 ninoborges 8
615     def SyncWithAccessDB(self,case = 'ALL'):
616     """Syncs your cases with the access database. This might only get run once when you first install
617     the program though..."""
618     ## So this syncs 'your' databases only. even though you are looking at a list of eeryone's databases
619     ## it will only sync yours. even if you did an upload for another tpm, that wouldnt get synced unles
620     ## the owner did a sync all. for 2 way sync to work, you should check, in access, that they have the case name
621     ## (with no funky characters) populated, before they run this for the first time.
622     if case == 'ALL':
623     ## verify that all your cases are up there, if not add it. but have support for cases where is should be
624     ## yours but is assigned to someone else...
625     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
626     myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
627     myLocalClientMatterList = []
628    
629     ## Sync cases from my local to access
630     for case in self.responsibleCasesList:
631     localCaseName,clientMatter = case.split("_(")
632     clientMatter = clientMatter.replace(")","")
633     clientMatter = clientMatter.replace("-",".")
634     myLocalClientMatterList.append(clientMatter)
635     for clm in myLocalClientMatterList:
636     if clm in myAccessClientMatterList:
637     print "%s exists"% clm
638     elif clm in fullClientMatterList:
639     print "%s cant be added to your cases because it's owned by someone else..."% clm
640     else:
641     print "%s does not exist in the database. Adding it..."% clm
642     self.AddCaseToAccessDB(localCaseName,clientMatter)
643    
644     ## Sync cases from Access to my local
645    
646    
647     uploadReportMatrix = {}
648     for caseName in self.responsibleCasesList:
649     print "now processing %s"% caseName
650     casePath = os.path.join(self.casesDir,caseName)
651     if os.path.exists(os.path.join(casePath,"UploadReport.txt")):
652     print "yup"
653     caseUploadContents = open(os.path.join(casePath,"UploadReport.txt")).readlines()
654     clientMatter = caseName.split("_(")[1]
655     clientMatter = clientMatter.replace(")","")
656     clientMatter = clientMatter.replace("-",".")
657     for i in caseUploadContents:
658     i = i.replace("\n","")
659     i = i.replace(" | ","|")
660     try:
661     uploadReportMatrix[clientMatter].append(("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3]))
662     except:
663     uploadReportMatrix[clientMatter] = [("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3])]
664     #print uploadReportMatrix
665    
666     accessMyCaseUploads = self.accessDB.RetrieveMyCaseUploads('09756')
667     for x in uploadReportMatrix.keys():
668     localCaseUploadList = uploadReportMatrix[x]
669     tempMatrix = {}
670     try:
671     accessCaseUploadList = accessMyCaseUploads[x]
672     #print accessCaseUploadList
673     for y in localCaseUploadList:
674     epoch = y[0]
675     if int(epoch) > 1298462400:
676     #print epoch
677     reviewPlatform = y[1]
678     reportSize = y[3]
679     #print "."
680     #print accessCaseUploadList
681     if epoch in accessCaseUploadList:
682     print "%s, in the %s case, is already in there, skipping."%(y,x)
683     else:
684     print "%s, in the %s case, is missing. Will be added..."%(y,x)
685     date = y[2]
686     date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
687    
688     self.accessDB.UpdateCaseUpload(x,reviewPlatform,{epoch:(date,reportSize)})
689     #tempMatrix[epoch] = [platform,(date,size)]
690     else:
691     #print "This entry is pre cutover"
692     pass
693     except KeyError:
694     print "nothing for this one"
695     for z in localCaseUploadList:
696     print "%s, in the %s case, is missing. Will be added..."%(z,x)
697     date = z[0]
698     date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
699     #try:
700     # tempMatrix[date].append(z[1])
701     #except:
702     # tempMatrix[date] = [z[1]]
703     #print tempMatrix
704     #if tempMatrix:
705     # #print tempMatrix
706     # self.accessDB.UpdateCaseUpload(x,'Concordance DIS', tempMatrix)
707     #pass
708    
709    
710     #print myLocalClientMatterList
711     ## verify that all of your uploads are up there, if not, add it.
712     self.accessDB.CloseAccessConnection()
713    
714     else:
715     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
716     myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
717    
718