ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/MCP_Console.py
Revision: 476
Committed: Mon Nov 4 17:09:33 2013 UTC (12 years, 4 months ago) by nino.borges
Content type: text/x-python
File size: 36907 byte(s)
Log Message:
Fixed a small bug where it was not using new folders for the vendor folder to IDS copying.

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